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 suspendche 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 -locknowblocca 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.serviceeseguo 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 $HOMEper 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/systemper evitare di inserire qualcosa /usrmanualmente. Come menzionato da @jasonwryan, le sessioni utente non sono ancora considerate di qualità produttiva; ma si stanno avvicinando.