![如何在暂停时锁定 xscreensaver](https://linux22.com/image/1033845/%E5%A6%82%E4%BD%95%E5%9C%A8%E6%9A%82%E5%81%9C%E6%97%B6%E9%94%81%E5%AE%9A%20xscreensaver.png)
嗨!
我用 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 锁。
答案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
然后尝试暂停以查看恢复时它是否有效。