GNU/Linux >> Linux Esercitazione >  >> Linux

Come si ottiene Ubuntu per eseguire automaticamente un programma ogni volta che lo schermo è sbloccato?

È 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

Linux
  1. Come eseguire un comando quando il contenuto di una directory viene aggiornato?

  2. Come scoprire gli eseguibili delle librerie dinamiche caricati durante l'esecuzione?

  3. Come rispecchiare lo Stdout di un terminale su un altro?

  4. Linux:come misurare il tempo in cui arriva un pacchetto?

  5. Come trovare quando lo Spfile è stato creato su un server Linux

Come ottenere la data e l'ora correnti in Python

Come eseguire programmi Java in Ubuntu

Come installare e utilizzare il comando dello schermo Ubuntu 20.04

Come posso ottenere un cron job da eseguire ogni 30 minuti?

Come programmare un programma Java da eseguire ogni giorno?

Come eseguire automaticamente uno script quando il contenuto di una directory cambia in Linux?