Der Gnome-Bildschirmschoner gibt einige Signale auf dbus aus, wenn etwas passiert.
Hier die Dokumentation (mit einigen Beispielen).
Sie könnten ein Skript schreiben, das Folgendes ausführt:
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'"
und das tut, was Sie jederzeit brauchen dbus-monitor
gibt eine Zeile darüber aus, ob der Bildschirm gesperrt/entsperrt ist.
Hier ein Bash-Befehl, um das zu tun, was Sie brauchen:
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
Ersetzen Sie einfach echo SCREEN_LOCKED
und echo SCREEN_UNLOCKED
mit dem, was Sie brauchen.
In Ubuntu 14.04 hat sich das DBus-Ereignis zum Entsperren der Bildschirmsperre geändert und das neue Skript zum Binden an Ereignisse zum Sperren und Entsperren des Bildschirms sieht wie folgt aus
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
)
Heutzutage denke ich, dass es besser ist, die LockedHint
zu hören statt Bildschirmschonermeldungen. Auf diese Weise sind Sie nicht an eine Bildschirmschoner-Implementierung gebunden.
Hier ist ein einfaches Skript dafür:
gdbus monitor -y -d org.freedesktop.login1 | grep LockedHint
Ergibt dies:
/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 [])