Gnome-screensaver vysílá nějaké signály na dbus, když se něco stane.
Zde dokumentace (s několika příklady).
Můžete napsat skript, který se spustí:
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'"
a to dělá to, co kdykoli potřebujete dbus-monitor
vytiskne řádek o zamykání/odemykání obrazovky.
Zde bash příkaz k provedení toho, co potřebujete:
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
Stačí nahradit echo SCREEN_LOCKED
a echo SCREEN_UNLOCKED
s tím, co potřebujete.
V ubuntu 14.04 se událost DBus pro odemknutí zámku obrazovky změnila a nový skript pro vazbu na události zámku a odemknutí obrazovky vypadá následovně
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
)
V dnešní době si myslím, že je lepší poslouchat LockedHint
spíše než zprávy spořiče obrazovky. Tímto způsobem nejste vázáni na implementaci spořiče obrazovky.
Zde je jednoduchý skript, jak to udělat:
gdbus monitor -y -d org.freedesktop.login1 | grep LockedHint
Dává toto:
/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 [])