GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie bringt man Ubuntu dazu, jedes Mal, wenn der Bildschirm entsperrt wird, automatisch ein Programm auszuführen?

Es ist möglich, wenn auch etwas knifflig. In der GnomeScreensaver-Dokumentation heißt es:

Gibt es eine Möglichkeit, Aktionen auszuführen, wenn der Bildschirmschoner aktiviert oder deaktiviert wird? Oder wenn die Sitzung inaktiv wird?

Eine Möglichkeit besteht darin, auf die D-Bus-Signale von gnome-screensaver zu achten. Hier ist ein Beispiel dafür, wie Sie mit der Perl-Sprache Aktionen ausführen, wenn die Sitzung inaktiv wird oder nicht mehr inaktiv ist:

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";
    }
}

Obwohl ich mit dbus-monitor untersucht habe und fuhr fort, den Bildschirm zu sperren/entsperren, war das ausgegebene Signal

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

wenn der Bildschirm gesperrt war und

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

Wenn entsperrt.

Ändern Sie also das obige Skript,

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

sollte es tun.


Aufbauend auf dem Bash-Shell-Skript schrieb Michael:

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

Tun Sie es in Bash, um dasselbe externe Skript zu teilen:

#!/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. Wann haben Sie das letzte Mal Windows verwendet?

  2. Wie bringen Sie Ihre Steam-Spiele dazu, auf Ubuntu über Wine oder ähnliches zu laufen?

  3. Wie kann ich ein Java-Programm so planen, dass es jeden Tag ausgeführt wird?

  4. Wie kann man das Ubuntu-System dazu bringen, vollständig im RAM zu booten und zu laufen?

  5. Wie wird ein Skript automatisch ausgeführt, wenn sich der Inhalt eines Verzeichnisses in Linux ändert?

So erhalten Sie das aktuelle Datum und die aktuelle Uhrzeit in Python

So führen Sie Java-Programme in Ubuntu aus

Wie wird ein Befehl ausgeführt, wenn der Inhalt eines Verzeichnisses aktualisiert wird?

So installieren und verwenden Sie den Bildschirmbefehl Ubuntu 20.04

Wie würde ich einen Cron-Job dazu bringen, alle 30 Minuten ausgeführt zu werden?

Wie bekomme ich nur den Benutzer, die PID und den Befehl, der für einen bestimmten Prozess ausgeführt wird? (Ubuntu 11.10)