Como executar um comando ou script no bloqueio / desbloqueio de tela?

19

Estou procurando uma maneira de armazenar os tempos de bloqueio / desbloqueio da tela.

A=$(date)
echo $A >> $HOME/time_xprofile

O que eu tentei:

$HOME/.bashrc
$HOME/.bash_logout
$HOME/.bash_prompt
$HOME/.xprofile

Então, tranquei a tela e verifiquei se o arquivo aparecia e falhava sempre. Como posso verificar a hora?

Benjamin
fonte
Ao ler esta pergunta, pensei que você não estivesse executando um servidor X. A resposta que você selecionou está puramente funcionando durante a execução de um servidor X. Talvez você possa descrever melhor sua situação ...
ExploWare
FWIW, esta pergunta também foi feita no Unix / Linux stackexchange .
joeytwiddle

Respostas:

20

O script a seguir gravará o tempo de bloqueio / desbloqueio em um arquivo time_xprofileem sua casa.

#!/bin/bash

dbus-monitor --session "type='signal',interface='org.gnome.ScreenSaver'" | \
( while true
    do read X
    if echo $X | grep "boolean true" &> /dev/null; then
        echo "locking at $(date)" >> $HOME/time_xprofile
    elif echo $X | grep "boolean false" &> /dev/null; then
        echo "unlocking at $(date)" >> $HOME/time_xprofile
    fi
    done )

salve o script. Dê permissão de execução.

chmod +x script.sh

Como executar

./script.sh &

Nota O script deve ser executado em segundo plano. Não o mate. Se você ativar / desativar o bloqueio de tela enquanto o script estiver em execução em segundo plano, seu tempo de bloqueio / desbloqueio será registrado em um time_xprofilearquivo em sua casa. Pode-se usá-lo para executar algum comando ou script no bloqueio / desbloqueio da tela.

Lembre-se de que, se você fechar o terminal atual, seu script será eliminado. Você pode usar

nohup ./script.sh &

Em seguida, ele continuará funcionando mesmo após o fechamento do terminal.

Como matar o script

Para matar o processo, use no terminal

ps ax| grep "[s]cript.sh" | cut -d' ' -f2 | xargs kill

O script acima é inspirado nesta resposta

souravc
fonte
Ainda funciona no ubuntu 17.10 com o XServer? Eu não sei por que não está trabalhando para mim ..
eddieferetro
Mais do que isso: ele só funciona algumas vezes ...
eddieferetro
1
@eddieferetro Ainda estou no 16.04 não posso testá-lo para você. Por que você não faz uma nova pergunta especificando seus problemas? Evento Dbus para bloqueio de tela podem ser alteradas em 17.10
souravc
6

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

dbus-monitor --session "type='signal',interface='com.ubuntu.Upstart0_6'" | \
(
  while true; do
    read X
    if echo $X | grep "desktop-lock" &> /dev/null; then
      SCREEN_LOCKED;
    elif echo $X | grep "desktop-unlock" &> /dev/null; then
      SCREEN_UNLOCKED;
    fi
  done
)

Substitua SCREEN_LOCKED e SCREEN_UNLOCKED pelo que você precisa fazer.

Luv Agarwal
fonte