Основываясь на различных источниках, которые я собрал вместе ~/.config/systemd/user/screenlock.service
:
[Unit]
Description=Lock X session
Before=sleep.target
[Service]
Environment=DISPLAY=:0
ExecStart=/usr/bin/xautolock -locknow
[Install]
WantedBy=sleep.target
Я включил это используя systemctl --user enable screenlock.service
. Но после перезагрузки, входа в систему, приостановки и возобновления (проверено как с systemctl suspend
закрытием крышки, так и при закрытии крышки) экран не блокируется и в нем ничего нетjournalctl --user-unit screenlock.service
. Что я делаю неправильно?
Запуск DISPLAY=:0 /usr/bin/xautolock -locknow
блокирует экран, как и ожидалось.
$ systemctl --version
systemd 215
+PAM -AUDIT -SELINUX -IMA -SYSVINIT +LIBCRYPTSETUP +GCRYPT +ACL +XZ +SECCOMP -APPARMOR
$ awesome --version
awesome v3.5.5 (Kansas City Shuffle)
• Build: Apr 11 2014 09:36:33 for x86_64 by gcc version 4.8.2 (nobody@)
• Compiled against Lua 5.2.3 (running with Lua 5.2)
• D-Bus support: ✔
$ slim -v
slim version 1.3.6
Если я сразу запускаю systemctl --user start screenlock.service
блокировки экрана и получаю сообщение журнала journalctl --user-unit screenlock.service
, значит, ExecStart
это правильно.
Соответствующий .xinitrc
раздел :
xautolock -locker slock &
Создание системного сервиса с тем же файлом работает (то slock
есть активно при возобновлении):
# ln -s "${HOME}/.config/systemd/user/screenlock.service" /usr/lib/systemd/system/screenlock.service
# systemctl enable screenlock.service
$ systemctl suspend
Но я не хочу добавлять пользовательский файл снаружи $HOME
по нескольким причинам:
- Пользовательские сервисы должны быть четко отделены от системных сервисов
- Пользовательские сервисы должны контролироваться без использования привилегий суперпользователя
- Конфигурация должна легко контролироваться версией
systemd-user
все еще очень облупленный; заставить его работать как часть сессии с помощью подхода, который я изложил, поможет сузить проблему; это все, что я могу предложить.
/etc/systemd/system/
или $HOME/.local/systemd/system
не вводить что-либо /usr
вручную. Как отметил @jasonwryan, пользовательские сессии все еще не считаются производственными качествами; но они становятся ближе.