
Ich habe ein Skript, das ich bei jedem Entsperren des Bildschirms automatisch aufrufen lassen möchte. Bietet Ubuntu Unterstützung für Benutzer, die dies tun möchten?
Antwort1
Es ist möglich, wenn auch etwas schwierig.GnomeScreensaver-DokumentationZustände:
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 vom Gnome-Bildschirmschoner zu achten. Hier ist ein Beispiel, wie Aktionen ausgeführt werden, wenn die Sitzung inaktiv wird oder nicht mehr inaktiv ist, und zwar mit der Sprache Perl:
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";
}
}
Als ich jedoch dbus-monitor
den Bildschirm sperrte/entsperrte, wurde das 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.
Antwort2
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
Antwort3
Führen Sie dies in Bash aus, um dasselbe externe Skript gemeinsam zu nutzen:
#!/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