У меня есть xscreensaver, работающий как пользовательская служба, и я вижу, что часто он не запускается. Статус показывает DISPLAY not set.

Я изменил определение службы, чтобы повторить попытку, и это, похоже, работает.

 [Unit]
 Description=XScreenSaver
 StartLimitInterval=200
 StartLimitBurst=5

 [Service]
 ExecStart=/usr/local/bin/xscreensaver -nosplash
 Restart=always
 RestartSec=30


 [Install]
 WantedBy=default.target

Есть лучший способ сделать это? Я предполагаю, что, поскольку это пользовательский сервис, он иногда запускается до того, как пользовательская среда полностью настроена. В идеале запуск будет ожидать установки DISPLAY.

Стратегия перезапуска кажется грубой, но, возможно, это лучшее, что я могу сделать.

0
Stephen Boston 18 Фев 2020 в 17:02

1 ответ

Я нашел ваш вопрос, как по мне, он терпит неудачу в половине случаев.

[Service]
Environment=DISPLAY=:0
ExecStart=/usr/bin/xscreensaver -nosplash

ОБНОВИТЬ:

Это содержимое моего пользовательского модуля xscreensaver systemd, и теперь оно работает на 100%. // ~/.config/systemd/пользователь/xscreensaver.service

[Unit]
Description=XScreenSaver
After=graphical.target

[Service]
Environment=DISPLAY=:0
ExecStart=/usr/bin/xscreensaver -nosplash
Restart=on-failure
RestartSec=30s

[Install]
WantedBy=graphical.target

Я думаю, что это не удалось, потому что он попытался запустить его один раз, и ни одна графическая сессия еще не была готова (иногда это было, насколько я помню, в половине случаев).

1
Jose Miguel 14 Окт 2020 в 13:35
Я не понимаю. Вы имеете в виду, что с этой настройкой Environment он терпит неудачу в половине случаев? Или что эта настройка исправляет сбои.
 – 
Stephen Boston
7 Окт 2020 в 17:44