web-dev-qa-db-fra.com

Comment verrouiller xscreensaver lors de la suspension

Hy!

J'ai remplacé gnome-screensaver par xscreensaver, cela fonctionne très bien jusqu'à présent, mais je ne parviens pas à verrouiller ma session lorsque je suspends mon ordinateur portable.

Des idées comment faire cela?

Ubuntu 10.10 Dell Vostro 1310

Merci!

4
u-foka

Finalement, j'ai trouvé le bon moyen de faire cela en combinant les parties que j'ai trouvées dans /etc/acpi/sleep.sh (qui semble y rester inutilisées), et Scaine a pointé dans/usr/lib/pm-utils ...

Le script final qui fonctionne pour moi est donc: /usr/lib/pm-utils/sleep.d/00xscreensaver

#!/bin/sh

# Lock xscreensaver on resume from a suspend.

# getXuser gets the X user belonging to the display in $displaynum.
# If you want the foreground X user, use getXconsole!
getXuser() {
        user=`pinky -fw | awk '{ if ($2 == ":'$displaynum'" || $(NF) == ":'$displaynum'" ) { print $1; exit; } }'`
        if [ x"$user" = x"" ]; then
                startx=`pgrep -n startx`
                if [ x"$startx" != x"" ]; then
                        user=`ps -o user --no-headers $startx`
                fi
        fi
        if [ x"$user" != x"" ]; then
                userhome=`getent passwd $user | cut -d: -f6`
                export XAUTHORITY=$userhome/.Xauthority
        else
                export XAUTHORITY=""
        fi
        export XUSER=$user
}

if pidof xscreensaver > /dev/null; then
    for x in /tmp/.X11-unix/*; do
        displaynum=`echo $x | sed s#/tmp/.X11-unix/X##`
        getXuser;
        if [ x"$XAUTHORITY" != x"" ]; then
            export DISPLAY=":$displaynum"
            case "$1" in
                resume|thaw)
                    Sudo -u $XUSER xscreensaver-command -unthrottle
                ;;
                suspend|hibernate)
                    Sudo -u $XUSER xscreensaver-command -throttle
                    Sudo -u $XUSER xscreensaver-command -lock
                ;;
            esac
        fi
    done
fi

Les commandes réelles xscreensaver peuvent aussi être appelées via su (au lieu de Sudo) comme

su $XUSER -c "(xscreensaver-command -lock)"

mais cela ne fonctionnera pas pour moi car j'utilise pam_mount pour monter ma maison cryptée lors de la connexion, et pam me demande mon mot de passe pour pam_mount dans le script lorsque j'utilise su ...

4
u-foka

Il convient de noter que les réponses ci-dessus sont obsolètes depuis l’introduction de systemd. Maintenant, pour verrouiller xscreensaver, il faut soit déplacer et modifier le script d'assistance pour les conventions d'appel systemd-sleep(8), soit utiliser un programme d'assistance tel que xss-lock .

Cf. https://unix.stackexchange.com/questions/149959/how-to-run-systemd-user-service-to-trigger-on-sleep-aka-suspend-hibernate

2
Josip Rodin

Je ne suis pas un expert, mais je pense que vous pourriez éditer /usr/lib/pm-utils/sleep.d/00powersave pour ajouter la commande xscreensaver-command --lock au début.

Toutefois, cela sera exécuté deux fois - une fois lorsque vous suspendez, puis à nouveau lorsque vous reprenez.

Edit: C’est un peu plus compliqué (pas beaucoup), mais à partir de ce fil , il semble que vous feriez mieux de créer votre fichier dans /usr/lib/pm-utils/sleep.d avec la commande que vous voulez exécuter. Donc, en entier, voici les commandes du terminal:

Sudo gedit /usr/lib/pm-utils/sleep.d/000LockScreensaver

Ensuite, mettez ceci dans le fichier et enregistrez:

#!/bin/sh

# Lock xscreensaver on resume from a suspend.

case "$1" in resume|thaw)
    xscreensaver-command --lock ;
esac

Et enfin,

Sudo chmod +x /usr/lib/pm-utils/sleep.d/000LockScreensaver

Ensuite, essayez une suspension pour voir si cela fonctionne lorsque vous reprenez.

1
Scaine