Наконец, я нашел правильный способ сделать это, объединив части, найденные в /etc/acpi/sleep.sh (которые, похоже, остались там неиспользованными), и Скайна указала в / usr / lib / pm-utils ... [ ! d0]
Итак, окончательный скрипт, который работает для меня, это: /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 для монтирования моего зашифрованного дома во время входа в систему, а pam запрашивает мой пароль для pam_mount в скрипте, когда я использую su ...