Gnome-screensaver emite algunas señales en dbus cuando sucede algo.
Aquí la documentación (con algunos ejemplos).
Podrías escribir un script que ejecute:
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'"
y eso hace lo que necesitas en cualquier momento dbus-monitor
imprime una línea sobre el bloqueo/desbloqueo de la pantalla.
Aquí un comando bash para hacer lo que necesitas:
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" |
while read x; do
case "$x" in
*"boolean true"*) echo SCREEN_LOCKED;;
*"boolean false"*) echo SCREEN_UNLOCKED;;
esac
done
Simplemente reemplace echo SCREEN_LOCKED
y echo SCREEN_UNLOCKED
con lo que necesitas.
En ubuntu 14.04, el evento DBus para el desbloqueo de bloqueo de pantalla ha cambiado y la nueva secuencia de comandos para vincular eventos de bloqueo y desbloqueo de pantalla tiene el siguiente aspecto
dbus-monitor --session "type='signal',interface='com.ubuntu.Upstart0_6'" | \
(
while true; do
read X
if echo $X | grep "desktop-lock" &> /dev/null; then
SCREEN_LOCKED;
elif echo $X | grep "desktop-unlock" &> /dev/null; then
SCREEN_UNLOCKED;
fi
done
)
Hoy en día creo que es mejor escuchar el LockedHint
en lugar de mensajes de salvapantallas. De esa manera, no está atado a una implementación de protector de pantalla.
Aquí hay un script simple para hacer eso:
gdbus monitor -y -d org.freedesktop.login1 | grep LockedHint
Da esto:
/org/freedesktop/login1/session/_32: org.freedesktop.DBus.Properties.PropertiesChanged ('org.freedesktop.login1.Session', {'LockedHint': <true>}, @as [])
/org/freedesktop/login1/session/_32: org.freedesktop.DBus.Properties.PropertiesChanged ('org.freedesktop.login1.Session', {'LockedHint': <false>}, @as [])