#!/bin/sh
#
# Stefan Tomanek <stefan@pico.ruhr.de>
#
# /etc/pm/sleep.d/99xscreensaver
#
# lock any running xscreensaver process

. "${PM_FUNCTIONS}"

${LOCK_XSCREENSAVER:="no"}

find_xscreensavers() {
    ps -C xscreensaver -o user=,pid= | \
    while read USER PID; do
        xargs -0 -a /proc/$PID/environ -n1 | \
        while IFS='=' read KEY VALUE; do
            if [ x"$KEY" = x"DISPLAY" ]; then
                echo -e "$USER\t$PID\t$VALUE"
            fi
        done
    done
}

suspend_xscreensaver() {
    find_xscreensavers | while read USER PID KEY; do
        echo "Locking $USER's xscreensaver on display $DISPLAY"
        su $USER -c "/usr/bin/xscreensaver-command -display $DISPLAY -lock"
    done
    # continue and don't look back
    true
}

resume_xscreensaver() {
    true
}

case "$1" in
	hibernate|suspend)
            if [ x"$LOCK_XSCREENSAVER" = x"yes" ]; then
                suspend_xscreensaver
            fi
        ;;
	thaw|resume)
            resume_xscreensaver
        ;;
	*)
            exit $NA
        ;;
esac
