GNU/Linux >> Znalost Linux >  >> Linux

Jak přimět Ubuntu, aby automaticky spustilo program pokaždé, když je obrazovka odemčena?

Je to možné, i když trochu ošemetné. Dokumentace GnomeScreensaver uvádí:

Existuje způsob, jak provádět akce, když se spořič obrazovky aktivuje nebo deaktivuje? Nebo když se relace stane nečinnou?

Jedním ze způsobů je sledovat signály D-Bus ze spořiče obrazovky gnome. Zde je příklad toho, jak provést akce, když se relace stane nečinnou nebo již není nečinná pomocí jazyka 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";
    }
}

Ačkoli když jsem zkoumal pomocí dbus-monitor a pokračovali k zamknutí/odemknutí obrazovky, jejíž signál byl

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

když byla obrazovka uzamčena a

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

Při odemčení.

Takže změnou výše uvedeného skriptu

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

měl by to udělat.


Na základě bash shell skriptu Michael napsal:

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

Dělat to v bash pro sdílení stejného externího skriptu:

#!/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. Kdy jste naposledy použili Windows?

  2. Jak zkompilovat a spustit program C v Ubuntu

  3. Jak zjistit zatížení spustitelných souborů dynamických knihoven při spuštění?

  1. Linux – jak získat čas nástěnných hodin běžícího procesu?

  2. Získejte čas provádění programu v shellu

  3. Jak zajistíte, aby vaše hry na Steamu běžely na Ubuntu přes Wine nebo něco podobného?

  1. Jak získáte aktuální čas na serveru?

  2. Jak dosáhnout toho, aby se pro konkrétní proces spustil pouze uživatel, pid a příkaz? (Ubuntu 11.10)

  3. Jak přimět systém Ubuntu, aby se spustil a běžel zcela v paměti RAM?