xswitcher icon indicating copy to clipboard operation
xswitcher copied to clipboard

Запуск через systemd

Open toperx opened this issue 4 years ago • 8 comments

Приветствую. Возможно ли реализовать запуск программы через systemd ? Я попробовал написать свой юнит, но получаю при запуске ошибку xswitcher[11392]: Error while XOpenDisplay()!

[Unit] Description=Xswitcher Documentation=https://github.com/ds-voix/xswitcher Requires=display-manager.service After=gdm.service display-manager.service multi-user.target

[Service] Type=notify Environment=DISPLAY=:0 ExecStart=/usr/bin/xswitcher

[Install] WantedBy=multi-user.target Alias=xswitcher.service

toperx avatar Aug 12 '21 00:08 toperx

Доброго! Если X к этому времени ("Requires=display-manager.service") реально запущен, попробуйте напихать в Environment те переменные окружения которые видите у себя в "export". См. например "https://github.com/ds-voix/xswitcher/blob/main/gnome3/switch.gnome". Там чтобы заработало понадобилась ещё "DBUS_SESSION_BUS_ADDRESS". Лишнее всегда можно выкинуть по результатам отладки.

Если нет (я не силён в нюансах десктопа) то сработает костыль с "Respawn" раз в 30 секунд (к примеру). Тогда останется найти более правильную привязку для запуска.

Удачи!

ds-voix avatar Aug 12 '21 13:08 ds-voix

На случай, если кто-то нерусскоговорящий найдёт/прознает про эту утилиту, я допишу коммент по-английски. README всё-таки также на английском.

I was able to make it work with the following setup:

[Unit]
Description=Xswitcher
Documentation=https://github.com/ds-voix/xswitcher
Requires=display-manager.service
After=gdm.service display-manager.service multi-user.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=always
RestartSec=1
Environment=DISPLAY=:0
Environment=XAUTHORITY=/run/user/1000/gdm/Xauthority
ExecStart=/usr/local/bin/xswitcher

[Install]
WantedBy=multi-user.target

It is able to start with no help after system reboot:

systemctl status xswitcher.service
● xswitcher.service - Xswitcher
     Loaded: loaded (/etc/systemd/system/xswitcher.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2022-02-02 18:45:26 MSK; 24s ago
       Docs: https://github.com/ds-voix/xswitcher
   Main PID: 2693 (xswitcher)
      Tasks: 14 (limit: 18743)
     Memory: 3.6M
     CGroup: /system.slice/xswitcher.service
             └─2693 /usr/local/bin/xswitcher

Feb 02 18:45:26 carbon9 xswitcher[2693]: mouse: SYNA8008:00 06CB:CE58 Touchpad
Feb 02 18:45:26 carbon9 xswitcher[2693]: keyboard: sof-hda-dsp Headset Jack
Feb 02 18:45:26 carbon9 xswitcher[2693]: keyboard: Power Button
Feb 02 18:45:26 carbon9 xswitcher[2693]: keyboard: AT Translated Set 2 keyboard
Feb 02 18:45:26 carbon9 xswitcher[2693]: keyboard: ThinkPad Extra Buttons
Feb 02 18:45:26 carbon9 xswitcher[2693]: mouse: TPPS/2 Elan TrackPoint
Feb 02 18:45:26 carbon9 xswitcher[2693]: keyboard: Intel HID events
Feb 02 18:45:31 carbon9 xswitcher[2693]: Empty ActiveWindowClass. M.b. gnome "window"?
Feb 02 18:45:40 carbon9 xswitcher[2693]: Empty ActiveWindowClass. M.b. gnome "window"?
Feb 02 18:45:45 carbon9 xswitcher[2693]: = kitty

I don't quite understand why but the key thing here was XAUTHORITY=/run/user/1000/gdm/Xauthority env var. From what I was able to google this is some sort of authentication for the GUI apps in the system.

I was able to get the value for the var via xauth info command:

Authority file:       /run/user/1000/gdm/Xauthority
File new:             no
File locked:          no
Number of entries:    2
Changes honored:      yes
Changes made:         no
Current input:        (argv):1

So obviously you need to specify your users UID here. Seems to work fine for now.

horseinthesky avatar Feb 02 '22 15:02 horseinthesky

A couple of the Environment variables points on how to connect to X API. They are already set while launching xswitcher under the user session. But systemd origins from the init system. It was "user-agnostic" by design (but full of crutches now).

  • Note that "gdm" relays to the "gnome desktop manager". Another DM will use another pathes, so such a unit file must be tuned in end-user system before of usage.

ds-voix avatar Feb 02 '22 18:02 ds-voix

У кого то получилось заставить работать на Gnome40, уже все что можно попробовал, не переключает

mikhail-burlet-git-7 avatar Feb 09 '22 09:02 mikhail-burlet-git-7

Посмотрите в https://github.com/ds-voix/xswitcher/issues/2 подход к работе с gnome. Т.к. "родной" переключатель Xorg в gnome не работает, используется прокладка "g3kb-switch" для отправки команд по шине сообщений. Вот этот "g3kb-switch" возможно что надо адаптировать для gnome40. Сам проект здесь

ds-voix avatar Feb 14 '22 09:02 ds-voix

g3kb-switch Пробовал, в терминале переключает по Break не хочет, всю голову сломал, пришлось обратно на кде уйти)

mikhail-burlet-git-7 avatar Mar 02 '22 09:03 mikhail-burlet-git-7

у меня в ubuntu 22.04.1 Wayland не заработало, судя по статусу запущен, но не переключает..

[Unit] Description=Xswitcher Documentation=https://github.com/ds-voix/xswitcher Requires=display-manager.service After=gdm.service display-manager.service multi-user.target StartLimitIntervalSec=0

[Service] Type=simple Restart=always RestartSec=1 Environment=DISPLAY=:0 Environment=XAUTHORITY=/run/user/1000/gdm/Xauthority ExecStart=/usr/local/bin/xswitcher

[Install] WantedBy=multi-user.target

root@ubuntu:~# systemctl status xswitcher.service ● xswitcher.service - Xswitcher Loaded: loaded (/etc/systemd/system/xswitcher.service; enabled; vendor pre> Active: activating (auto-restart) since Mon 2022-10-24 13:48:28 MSK; 682ms> Docs: https://github.com/ds-voix/xswitcher Process: 4693 ExecStart=/usr/local/bin/xswitcher (code=exited, status=0/SUC> Main PID: 4693 (code=exited, status=0/SUCCESS) CPU: 8ms

gitislab avatar Oct 24 '22 10:10 gitislab

  1. "code=exited" — это явно не запущен (с т.з. systemd).
  2. Пропиши́те "ExecStart=/usr/local/bin/xswitcher -v" или "ExecStart=/usr/local/bin/xswitcher -d". Чтобы потом посмотреть "journalctl -U xswitcher" (что там стряслось). С одной стороны, у xswitcher "Respawn()" — штатная операция, в т.ч. при запуске. Причина — "Must wait for DE to be started. Otherwise, DE sees stupid keyboard and unmaps my rigth alt|win keys at all!". Что делает его не слишком удобным для вкручивания в systemd. С другой стороны, будучи правильно прикрученным к DE, работать он таки должен.
  3. В связи с п.2, настройка "Restart=always" должна привести к довольно-таки весёлым результатам. Я бы поинтересовался количеством запущенных одновременно экземпляров xswitcher (ожидается поминутный рост).

ds-voix avatar Oct 24 '22 12:10 ds-voix