如何在暂停时锁定 xscreensaver

如何在暂停时锁定 xscreensaver

嗨!

我用 xscreensaver 替换了 gnome-screensaver,到目前为止效果很好,但是当我挂起笔记本电脑时,我无法让它锁定我的会话。

有什么想法可以做到这一点吗?

Ubuntu 10.10 戴尔 Vostro 1310

谢谢!

答案1

最后,我找到了正确的方法,结合我在 /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 命令也可以通过 su(而不是 sudo)调用,例如

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

但这对我来说不起作用,因为我在登录时使用 pam_mount 来挂载我的加密主页,而当我使用 su 时,pam 会在脚本中要求我输入 pam_mount 的密码...

答案2

需要注意的是,自从引入 systemd 以来,上述答案已经过时了。现在,要锁定 xscreensaver,必须移动并修改调用systemd-sleep(8)约定的辅助脚本,或者使用类似xss 锁

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

答案3

我不是专家,但我认为您可以编辑以在开始时/usr/lib/pm-utils/sleep.d/00powersave添加命令。xscreensaver-command --lock

但是,这将执行两次 - 一次在您暂停时,然后再次在您恢复时执行。

编辑:这有点复杂(不多),但从此主题,看来您最好在 /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

然后尝试暂停以查看恢复时它是否有效。

相关内容