Es posible, aunque un poco complicado. La documentación de GnomeScreensaver dice:
¿Hay alguna forma de realizar acciones cuando el protector de pantalla se activa o desactiva? ¿O cuando la sesión se vuelve inactiva?
Una forma es observar las señales D-Bus desde gnome-screensaver. Este es un ejemplo de cómo realizar acciones cuando la sesión se vuelve inactiva o ya no está inactiva utilizando el lenguaje 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";
}
}
Aunque cuando examiné usando dbus-monitor
y procedió a bloquear/desbloquear la pantalla la señal emitida fue
path=/org/gnome/ScreenSaver; interface=org.gnome.ScreenSaver; member=ActiveChanged
boolean true
cuando la pantalla estaba bloqueada y
path=/org/gnome/ScreenSaver; interface=org.gnome.ScreenSaver; member=ActiveChanged
boolean false
Cuando está desbloqueado.
Entonces, alterando el script anterior,
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');
}
}
debería hacerlo.
Basándose en el script bash Shell, Michael escribió:
#!/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
Haciéndolo en bash para compartir el mismo script externo:
#!/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