GNU/Linux >> Tutoriels Linux >  >> Linux

Comment faire en sorte qu'Ubuntu exécute automatiquement un programme à chaque fois que l'écran est déverrouillé ?

C'est possible, bien qu'un peu délicat. La documentation de GnomeScreensaver indique :

Existe-t-il un moyen d'effectuer des actions lorsque l'économiseur d'écran s'active ou se désactive ? Ou lorsque la session devient inactive ?

Une façon consiste à surveiller les signaux D-Bus de gnome-screensaver. Voici un exemple de la façon d'effectuer des actions lorsque la session devient inactive ou n'est plus inactive en utilisant le langage 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";
    }
}

Bien que lorsque j'ai examiné en utilisant dbus-monitor et a procédé au verrouillage/déverrouillage de l'écran le signal émis était

path=/org/gnome/ScreenSaver; interface=org.gnome.ScreenSaver; member=ActiveChanged
boolean true

lorsque l'écran était verrouillé et

path=/org/gnome/ScreenSaver; interface=org.gnome.ScreenSaver; member=ActiveChanged
boolean false

Une fois déverrouillé.

Donc, en modifiant le script ci-dessus,

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');
    } 
}

devrait le faire.


S'appuyant sur le script shell bash, Michael a écrit :

#!/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

Le faire en bash pour partager le même script externe :

#!/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. À quand remonte la dernière fois que vous avez utilisé Windows ?

  2. Comment compiler et exécuter le programme C dans Ubuntu

  3. Comment exécuter une commande lorsque le contenu d'un répertoire est mis à jour ?

  4. Comment mettre en miroir la sortie standard d'un terminal à un autre ?

  5. Linux - Comment obtenir l'heure de l'horloge murale d'un processus en cours d'exécution ?

Comment obtenir la date et l'heure actuelles en Python

Comment exécuter des programmes Java dans Ubuntu

Comment installer et utiliser la commande d'écran Ubuntu 20.04

Comment puis-je exécuter une tâche cron toutes les 30 minutes ?

Comment programmer un programme Java pour qu'il s'exécute tous les jours ?

Comment exécuter automatiquement un script lorsque le contenu d'un répertoire change sous Linux ?