В /etc/systemd/logind.conf
есть настройка, которая сообщает systemd-logind
, как обрабатывать событие переключения крышки ноутбука. Попробуйте установить HandleLidSwitch=ignore
и перезапустить systemd -logind.
И раскомментируйте -строку перед сохранением.
Наконец нашел несколько подходящих конфигураций:
a )Пометить работающую службу как StopWhenUnneeded
и использовать свойство Wants
сsystemd-run --scope
:
.xsessionrc:
STARTUP='systemd-run --user --scope --property Wants=my.service sleep inf'
мой.сервис:
[Unit]
Description=My service
StopWhenUnneeded=yes
[Service]
Type=exec
ExecStart=/path/to/my/program
Restart=always
Это очень простое решение, которое выполняет все необходимые действия, однако запустить my.service
вручную невозможно. При желании:
b )Ввести промежуточное звено my-session.target
и объявить my.service
какPartOf=my-session.target
:
.xsessionrc:
STARTUP='systemd-run --user --scope --property Wants=my-session.target sleep inf'
мой.сервис:
[Unit]
Description=My service
PartOf=my-session.target
[Service]
Type=exec
ExecStart=/path/to/my/program
Restart=always
[Install]
WantedBy=my-session.target
мой -session.target:
[Unit]
Description=My session
StopWhenUnneeded=yes
RefuseManualStart=yes
RefuseManualStop=yes
c )Наконец, стоит отметить, что systemd-run
не запрещает использование "только автоматических -" свойств, таких как BoundBy
/ ConsistsOf
, в результате можно сделать:
.xsessionrc
STARTUP='systemd-run --user --scope --property BoundBy=my.service --property Wants=my.service sleep inf'
мой.сервис:
[Unit]
Description=My service
[Service]
Type=exec
ExecStart=/path/to/my/program
Restart=always
Я бы рассматривал использование этих свойств как хакерский и, вероятно, являющийся ошибкой.Но может кому пригодится.