È possibile, anche se un po' complicato. La documentazione di GnomeScreensaver afferma:
C'è un modo per eseguire azioni quando il salvaschermo si attiva o si disattiva? O quando la sessione diventa inattiva?
Un modo è guardare i segnali D-Bus da gnome-screensaver. Ecco un esempio di come eseguire azioni quando la sessione diventa inattiva o non lo è più utilizzando il linguaggio 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";
}
}
Anche se quando ho esaminato utilizzando dbus-monitor
e proceduto a bloccare/sbloccare lo schermo era il segnale emesso
path=/org/gnome/ScreenSaver; interface=org.gnome.ScreenSaver; member=ActiveChanged
boolean true
quando lo schermo era bloccato e
path=/org/gnome/ScreenSaver; interface=org.gnome.ScreenSaver; member=ActiveChanged
boolean false
Quando sbloccato.
Quindi alterando lo script precedente,
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');
}
}
dovrebbe farlo.
Basandosi sullo script della bash shell che Michael ha scritto:
#!/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
Farlo in bash per condividere lo stesso script esterno:
#!/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