Es ist möglich, wenn auch etwas knifflig. In der GnomeScreensaver-Dokumentation heißt es:
Gibt es eine Möglichkeit, Aktionen auszuführen, wenn der Bildschirmschoner aktiviert oder deaktiviert wird? Oder wenn die Sitzung inaktiv wird?
Eine Möglichkeit besteht darin, auf die D-Bus-Signale von gnome-screensaver zu achten. Hier ist ein Beispiel dafür, wie Sie mit der Perl-Sprache Aktionen ausführen, wenn die Sitzung inaktiv wird oder nicht mehr inaktiv ist:
my $cmd = "dbus-monitor --session \"type='signal',interface='org.gnome.ScreenSaver',member='SessionIdleChanged'\"";
open (IN, "$cmd |");
while (<IN>) {
if (m/^\s+boolean true/) {
print "*** Session is idle ***\n";
} elsif (m/^\s+boolean false/) {
print "*** Session is no longer idle ***\n";
}
}
Obwohl ich mit dbus-monitor
untersucht habe und fuhr fort, den Bildschirm zu sperren/entsperren, war das ausgegebene Signal
path=/org/gnome/ScreenSaver; interface=org.gnome.ScreenSaver; member=ActiveChanged
boolean true
wenn der Bildschirm gesperrt war und
path=/org/gnome/ScreenSaver; interface=org.gnome.ScreenSaver; member=ActiveChanged
boolean false
Wenn entsperrt.
Ändern Sie also das obige Skript,
my $cmd = "dbus-monitor --session \"type='signal',interface='org.gnome.ScreenSaver',member='ActiveChanged'\"";
open (IN, "$cmd |");
while (<IN>) {
if (m/^\s+boolean false/) {
exec('/path/to/your/script');
}
}
sollte es tun.
Aufbauend auf dem Bash-Shell-Skript schrieb Michael:
#!/usr/bin/env bash
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver',member='ActiveChanged'" | while read line ; do
if [ x"$(echo "$line" | grep 'boolean true')" != x ] ; then
# runs once when screensaver comes on...
fi
if [ x"$(echo "$line" | grep 'boolean false')" != x ] ; then
# runs once when screensaver goes off...
fi
done
Tun Sie es in Bash, um dasselbe externe Skript zu teilen:
#!/usr/bin/env bash
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver',member='ActiveChanged'" | while read line ; do
if [ x"$(echo "$line" | grep 'boolean false')" != x ] ; then
# do whatever you want here
fi
done