Sulla base di varie fonti ho messo insieme ~/.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
L'ho abilitato usando systemctl --user enable screenlock.service
. Ma dopo il riavvio, il login, la sospensione e la ripresa (testati sia con systemctl suspend
che chiudendo il coperchio) lo schermo non viene bloccato e non c'è nulla dentrojournalctl --user-unit screenlock.service
. Che cosa sto facendo di sbagliato?
L'esecuzione DISPLAY=:0 /usr/bin/xautolock -locknow
blocca lo schermo come previsto.
$ 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
Se systemctl --user start screenlock.service
eseguo immediatamente i blocchi dello schermo e ottengo un messaggio di accesso journalctl --user-unit screenlock.service
, ExecStart
è chiaramente corretto.
xautolock -locker slock &
La creazione di un servizio di sistema con lo stesso file funziona (vale a dire che slock
è attiva quando si riprende):
# ln -s "${HOME}/.config/systemd/user/screenlock.service" /usr/lib/systemd/system/screenlock.service
# systemctl enable screenlock.service
$ systemctl suspend
Ma non voglio aggiungere un file specifico dell'utente all'esterno $HOME
per diversi motivi:
- I servizi utente devono essere chiaramente separati dai servizi di sistema
- I servizi utente devono essere controllati senza utilizzare i privilegi di superutente
- La configurazione dovrebbe essere facilmente controllata dalla versione
systemd-user
è ancora molto traballante; farla funzionare come parte della sessione attraverso l'approccio che ho delineato contribuirebbe a restringere il problema; questo è tutto ciò che posso suggerire.
/etc/systemd/system/
o $HOME/.local/systemd/system
per evitare di inserire qualcosa /usr
manualmente. Come menzionato da @jasonwryan, le sessioni utente non sono ancora considerate di qualità produttiva; ma si stanno avvicinando.