Форум OlegON > Компьютеры и Программное обеспечение > Операционные системы и программное обеспечение > Linux

Как запустить systemd unit после старта графической сессии : Linux

26.01.2025 8:39


08.12.2024 12:36
Вот здесь я уже писал, что пользуюсь systemd для того, чтобы программки, нужные мне, не закрывались просто так https://olegon.ru/showthread.php?t=37037

Однако, как выяснилось, в таком случае они запускаются еще до старта графики, после чего падают, поскольку графики нет, а потом еще раз перезапускаются. Не очень надежно и вообще непорядок. Стал разбираться с systemd, потратил несколько часов, убиваясь в попытках понять, почему его комбинации ни одна не работает достаточно надежно. Грубо говоря, не за что зацепиться After, чтобы точно работало.

И, в итоге обнаружил таймер, который запускается уже в пользовательской сессии, соответственно, сделал точно такой же свой, свой target, куда теперь могу цеплять свои сервисы и юниты, причем, от графического окружения это зависеть не будет.

Код:
cat ~/.local/share/systemd/user/startup.target 
[Unit]
Description=Startup services
Requires=swayidle.service telegram.service transmission.service
Код:
cat ~/.local/share/systemd/user/startup.timer 
[Unit]
Description=Startup units
ConditionUser=!@system
ConditionVirtualization=!container
[Timer]
OnActiveSec=1min
Unit=startup.target
[Install]
WantedBy=timers.target
Код:
cat ~/.local/share/systemd/user/telegram.service 
[Unit]
Description=Telegram
PartOf=startup.target
ConditionPathExists=/run/user/%U/wayland-1
[Service]
Type=idle
Environment=WAYLAND_DISPLAY=wayland-1
Restart=always
RestartSec=10
ExecStart=/home/olegon/T/Telegram
Slice=app.slice
[Install]
WantedBy=startup.target
08.12.2024 12:41
Соответственно, надо сделать
Код:
systemctl enable --user startup.timer
systemctl enable --user telegram.service
ну и для всех других сервисов тоже. Дублировать не стал, они у меня идентичные, только бинарники меняются.
Суть происходящего - ставится таймер, который видит минуту работы в пользовательской сессии, после чего подтверждает уровень startup.target, в нем включены все мои сервисы, которые и взводятся на этом уровне.

Понятное дело, что можно было запускать программки через сам sway, в том числе сервисы, а так же через XDG/autostart, все это понятно, непонятно было, как работает systemd, и при этом куча документации внятно на это не отвечает, а попадавшиеся примеры работали приблизительно, как я описывал выше, то есть падали сначала из-за отсутствия графики. А так - работает, меня устраивает.
Часовой пояс GMT +3, время: 08:39.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.