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

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

Ich habe ein Skript, das ich bei jedem Entsperren des Bildschirms automatisch aufrufen lassen möchte. Bietet Ubuntu Unterstützung für Benutzer, die dies tun möchten?

Antwort1

Es ist möglich, wenn auch etwas schwierig.GnomeScreensaver-DokumentationZustände:

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 vom Gnome-Bildschirmschoner zu achten. Hier ist ein Beispiel, wie Aktionen ausgeführt werden, wenn die Sitzung inaktiv wird oder nicht mehr inaktiv ist, und zwar mit der Sprache 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";
    }
}

Als ich jedoch dbus-monitorden Bildschirm sperrte/entsperrte, wurde das 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.

Antwort2

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

Antwort3

Führen Sie dies in Bash aus, um dasselbe externe Skript gemeinsam zu nutzen:

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

verwandte Informationen