
Tenho um script que gostaria que fosse invocado automaticamente sempre que a tela fosse desbloqueada. O Ubuntu fornece algum suporte para usuários que desejam fazer isso?
Responder1
É possível, embora um pouco complicado.Documentação do GnomeScreensaverafirma:
Existe uma maneira de executar ações quando o protetor de tela é ativado ou desativado? Ou quando a sessão fica ociosa?
Uma maneira é observar os sinais D-Bus do gnome-screensaver. Aqui está um exemplo de como executar ações quando a sessão fica ociosa ou não está mais ociosa usando a linguagem 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";
}
}
Embora quando examinei usando dbus-monitor
e procedi ao bloqueio/desbloqueio da tela o sinal emitido foi
path=/org/gnome/ScreenSaver; interface=org.gnome.ScreenSaver; member=ActiveChanged
boolean true
quando a tela estava 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');
}
}
deveria fazer isso.
Responder2
Com base no script bash shell, 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
Responder3
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