web-dev-qa-db-ja.com

サスペンド時にxscreensaverをロックする方法

やあ!

私はgnome-screensaverをxscreensaverに置き換えました。これまでのところはうまく動作しますが、ラップトップをサスペンドするとセッションをロックできません。

それを行う方法はありますか?

Ubuntu 10.10 Dell Vostro 1310

ありがとう!

4
u-foka

最後に、/ etc/acpi/sleep.sh(未使用のままのようです)で見つけた部分を組み合わせてこれを行う正しい方法を見つけました。Scaineは/ usr/lib/pm-utilsを指しています...

だから私のために働く最終的なスクリプトは次のとおりです:/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

実際のxscreensaverコマンドは、(sudoの代わりに)suを介して次のように呼び出すこともできます。

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

しかし、ログイン時にpam_mountを使用して暗号化されたホームをマウントし、suを使用するとpamがスクリプトでpam_mountのパスワードを要求するため、これは機能しません。

4
u-foka

上記の回答は、systemdの導入以来古くなっていることに注意してください。ここで、xscreensaverをロックするには、systemd-sleep(8)呼び出し規約のヘルパースクリプトを移動して変更するか、 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

私は専門家ではありませんが、/usr/lib/pm-utils/sleep.d/00powersaveを編集して最初にxscreensaver-command --lockコマンドを追加できると思います。

ただし、これは2回実行されます。一時停止したときに1回、再開したときに再び実行されます。

編集:これはもう少し複雑です(それほどではありません)が、 このスレッド から、/ usr/lib/pm-utils/sleep.dにファイルを作成した方が良いようです実行するコマンド。そのため、端末からのコマンドは次のとおりです。

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

次に、これをファイルに入れて保存します。

#!/bin/sh

# Lock xscreensaver on resume from a suspend.

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

そして最後に、

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

次に、一時停止を試みて、再開時に機能するかどうかを確認します。

1
Scaine