suspendre ET verrouiller l'écran lors de la fermeture du couvercle dans l'arc / le système

22

quelle est la manière la plus simple de verrouiller l'écran ET de suspendre la fermeture du couvercle? J'utilise des crochets d'événement /etc/systemd/logind.confet suspend avec succès lors de la fermeture du couvercle. Cependant, je suis perdu en ce qui concerne la partie verrouillage - suis-je censé activer un service d'économiseur d'écran et comment puis-je déclencher deux événements à la fois logind.conf?

pldimitrov
la source
En dehors de la portée, je commente: dans i3, il est très facile d'attribuer des raccourcis clavier aux commandes. Comme j'étais mod+Ldéjà assigné à blurlockmoi, c'était facile de l' mod+Sêtre à la blurlock && systemctl suspend -iplace. Donc, pas lors de la fermeture du couvercle, mais fonctionne très bien pour choisir si je veux simplement verrouiller ou verrouiller et suspendre.
pzkpfw

Réponses:

17

Il y a quelques exemples dans Arch Wiki .

Fondamentalement, il consiste à créer un fichier de service pour votre casier à l' écran et assurant qu'il est accroché soit à la suspend, hibernateou des sleepcibles.

Si vous utilisez un simple casier d'écran comme slock , /etc/systemd/system/lock.servicecela ressemblerait à ceci:

[Unit]
Description=Lock the screen on resume from suspend

[Service]
User=jason
Environment=DISPLAY=:0
ExecStart=/usr/bin/slock

[Install]
WantedBy=suspend.target

D'autres exemples sur le wiki ont des options plus complexes, y compris l'arrêt et le lancement d'autres services, etc.

jasonwryan
la source
Merci, j'ai vu cet exemple mais je n'ai pas réalisé que le ExecStart=/usr/bin/slockbit se réfère au verrouillage à première vue.
pldimitrov
Si je suspend et reviens, mon gestionnaire d'affichage X a un verrouillage d'écran, c'est super. Mais qu'en est-il de mes ttys? Que se passe-t-il si je suis connecté et que j'ai suspendu et que j'ai oublié de quitter mes ttys, les gens pourraient y basculer et continuer leurs opérations.
CMCDragonkai
@CMCDragonkai vous voulez du physlock alors ...
jasonwryan
1
Cela fonctionne, mais uniquement si vous êtes le seul utilisateur du système. Une solution plus propre consiste à utiliser xss-lock(disponible dans Debian, Arch Linux; également Fedora la semaine prochaine) et à l'exécuter en tant qu'utilisateur avec i3lockou slock.
Martin Ueding
1
@MartinUeding et @jasonwryan, Userest codé en dur. L'hypothèse que cette machine ne sera utilisée que par jason(ou quelqu'un qui connaît son mot de passe, comme sa petite amie, par exemple). Idéalement, nous voudrions Userêtre celui qui a initié la suspension, mais je n'ai pas encore trouvé de solution pour cela.
Rolf
1

Si vous utilisez openrcavec, elogindexiste-t-il une solution alternative (qui ne dépend pas de systemd):

#!/bin/sh
#
# /lib/elogind/system-sleep/lock.sh
# Lock before suspend integration with elogind

username=lerax
userhome=/home/$username
export XAUTHORITY="$userhome/.Xauthority"
export DISPLAY=":0.0"

case "${1}" in
        pre)
            su $username -c "/usr/bin/slock" &
            sleep 1s;
            ;;
esac

réf: https://gist.github.com/ryukinix/bd0c1ddcbbafdb4149ae70e41b7c822b

Je poste cela parce qu'il était très difficile de le trouver correctement et que ce fil apparaît sur les premiers résultats de Google sur "verrouiller après suspendre" ou autre chose.

Manoel Vilela
la source
0

Bien que la réponse de Jasonwryan soit correcte, elle est incomplète. Pour verrouiller en toute sécurité après la suspension, au lieu d'avant - où un processus non-racine peut empêcher le noyau de suspension, vous devez ajouter une avant = instance où les forces systemd attendre la ExecStart appel à slock pour commencer avant de suspendre. L'utilisation de sleep.target couvre la suspension, l'hibernation et le sommeil hybride.

[Unit]
 Description=Lock
+Before=sleep.target

 [Service]
 User=mustapha
 Environment=DISPLAY=:0
 ExecStart=/usr/local/bin/slock

 [Install]
-WantedBy=suspend.target
+WantedBy=sleep.target
Mustapha Abiola
la source