GNU/Linux >> Tutoriales Linux >  >> Linux

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

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

Linux
  1. Cómo compilar y ejecutar un programa C en Ubuntu

  2. ¿Cómo averiguar las cargas ejecutables de las bibliotecas dinámicas cuando se ejecutan?

  3. ¿Cómo duplicar la salida estándar de una terminal a otra?

  4. Linux:¿cómo medir el tiempo cuando llega un paquete?

  5. Cómo saber cuándo se creó el Spfile en un servidor Linux

Cómo obtener la fecha y hora actuales en Python

Cómo ejecutar programas Java en Ubuntu

¿Cómo ejecutar un comando cuando se actualizan los contenidos de un directorio?

Linux:¿cómo obtener la hora del reloj de pared de un proceso en ejecución?

Cómo instalar y usar el comando de pantalla Ubuntu 20.04

¿Cómo puedo hacer que un trabajo cron se ejecute cada 30 minutos?