Gnome-screensaver emette dei segnali su dbus quando succede qualcosa.
Qui la documentazione (con alcuni esempi).
Potresti scrivere uno script che esegua:
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'"
e questo fa ciò di cui hai bisogno in qualsiasi momento dbus-monitor
stampa una riga sullo schermo bloccato/sbloccato.
Ecco un comando bash per fare ciò di cui hai bisogno:
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
Basta sostituire echo SCREEN_LOCKED
e echo SCREEN_UNLOCKED
con ciò di cui hai bisogno.
In Ubuntu 14.04 l'evento DBus per lo sblocco del blocco dello schermo è cambiato e il nuovo script per l'associazione agli eventi di blocco e sblocco dello schermo è simile al seguente
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
)
Oggi penso che sia meglio ascoltare il LockedHint
piuttosto che messaggi salvaschermo. In questo modo non sei legato all'implementazione di un salvaschermo.
Ecco un semplice script per farlo:
gdbus monitor -y -d org.freedesktop.login1 | grep LockedHint
Dà questo:
/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 [])