
Tengo un script que me gustaría que se invocara automáticamente cada vez que se desbloquea la pantalla. ¿Ubuntu brinda algún soporte para los usuarios que desean hacer esto?
Respuesta1
Es posible, aunque un poco complicado.Documentación de GnomeScreensaverestados:
¿Existe alguna forma de realizar acciones cuando se activa o desactiva el salvapantallas? ¿O cuando la sesión queda inactiva?
Una forma es observar las señales D-Bus desde gnome-screensaver. A continuación se muestra un ejemplo de cómo realizar acciones cuando la sesión queda 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é el uso dbus-monitor
y procedí 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 guión 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ías hacerlo.
Respuesta2
Basándose en el script de 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
Respuesta3
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