Como você faz com que o Ubuntu execute automaticamente um programa toda vez que a tela é desbloqueada?

5

Eu tenho um script que gostaria de invocar automaticamente toda vez que a tela é desbloqueada. O Ubuntu fornece algum suporte para usuários que desejam fazer isso?

    
por Corey T Foote 31.10.2010 / 03:18

3 respostas

8

É possível, embora um pouco complicado. A documentação do GnomeScreensaver afirma:

Is there a way to perform actions when the screensaver activates or deactivates? Or when the session becomes idle?

One way is to watch for the D-Bus signals from gnome-screensaver. Here's an example of how to perform actions when the session becomes idle or is no longer idle using the Perl language:

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

Embora quando eu examinei usando dbus-monitor e continuei a bloquear / desbloquear a tela, o sinal emitido foi

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

quando a tela está bloqueada e

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

Quando desbloqueado.

Então, alterando o script acima,

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

deve fazer isso.

    
por 31.10.2010 / 04:23
4

Com base no script de shell bash, Michael escreveu:

#!/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
    
por 11.04.2012 / 13:15
3

Fazendo isso no bash para compartilhar o mesmo script externo:

#!/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
    
por 09.01.2012 / 14:55