Gostaria de executar uma tela se a sessão do Gnome estiver bloqueada e desbloqueada. Existe uma maneira de interceptar isso e executar determinadas ações quando a área de trabalho está bloqueada ou desbloqueada?
54
O Gnome-screensaver emite alguns sinais no dbus quando algo acontece.
Aqui a documentação (com alguns exemplos).
Você pode escrever um script que seja executado:
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'"
e isso faz o que você precisa a qualquer momento, dbus-monitor
imprime uma linha sobre a tela ser bloqueada / desbloqueada.
Aqui está um comando bash para fazer o que você precisa:
dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" |
while read x; do
case "$x" in
*"boolean true"*) echo SCREEN_LOCKED;;
*"boolean false"*) echo SCREEN_UNLOCKED;;
esac
done
Basta substituir echo SCREEN_LOCKED
e echo SCREEN_UNLOCKED
com o que você precisa.
gnome-screensaver-command
já está lá. Passando-a
paragnome-screensaver-command
você bloqueia a tela, enquanto a desbloqueia-d
. De qualquer forma, a maioria dos aplicativos gnome usa o dbus extensivamente, para que você possa fazer muitas coisas incríveis com ele.No ubuntu 14.04, o evento DBus para desbloqueio de bloqueio de tela foi alterado e o novo script para ligação aos eventos de bloqueio e desbloqueio de tela se parece com o seguinte
fonte
Hoje em dia, acho melhor ouvir as
LockedHint
mensagens do que proteger as telas. Dessa forma, você não está vinculado a uma implementação de proteção de tela.Aqui está um script simples para fazer isso:
Dá isto:
fonte
Ubuntu 16.04: a solução do ozma não funcionou para mim, mas esta funcionou:
fonte
Expandindo a resposta já dada.
Se você tentar executar um script a partir de uma sessão
screen
outmux
, precisará encontrar o correto$DBUS_SESSION_BUS_ADDRESS
primeiro e passá-lo como argumento para, emdbus-monitor
vez de--session
. Além disso, se você o estiver executando como um daemon, verifique se apenas uma instância está sendo executada por vez (por exemplo, com um arquivo de bloqueio) e se o script é limpo por si própriotrap
. O exemplo a seguir funcionará como um daemon na maioria dos ambientes atuais do Gnome (testado no Ubuntu GNOME 16.04):Se isso não funcionar para você, provavelmente é porque:
fonte
Se você estiver no Kubuntu ou estiver usando o KDE / Plasma como seu ambiente de área de trabalho, terá que ouvir a interface
org.freedesktop.ScreenSaver
, para que o script para ouvir esse evento fique assim:fonte
Personalization>Notifications>Notifications>Screensaver
.upstart
suporte a tarefasdesktop-lock
edesktop-unlock
eventos da sessão emstart on
estrofe. Basta criar um trabalho .conf para seu usuário com acionadores e comandos relevantes para chamar no exemplo$XDG_CONFIG_HOME/upstart/
ou$HOME/.config/upstart
abaixo, como abaixo:fonte
isto é o que funcionou para mim no ubuntu 16.04
fonte