Finalmente eu encontrei o jeito certo de fazer isso combinando as partes que eu encontrei em /etc/acpi/sleep.sh (que parece não ser usado lá), e Scaine apontou em / usr / lib / pm-utils ...
Então o roteiro final que funciona para mim é: /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
Os comandos reais do xscreensaver também podem ser chamados através do su (ao invés de sudo) como
su $XUSER -c "(xscreensaver-command -lock)"
mas isso não funciona para mim porque eu uso pam_mount para montar minha casa criptografada durante o login, e pam pede minha senha para pam_mount no script quando eu uso su ...