¿Cómo se consigue que Ubuntu ejecute automáticamente un programa cada vez que se desbloquea la pantalla?

¿Cómo se consigue que Ubuntu ejecute automáticamente un programa cada vez que se desbloquea la pantalla?

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-monitory 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

información relacionada