Execute o comando quando a interação do usuário é detectada (ex: mover o mouse, pressionar a tecla)

0

Estou tentando criar um script básico para reduzir o brilho para o menor quando ocioso por um determinado período, mas reverte para o brilho anterior quando detecta a interação do usuário, seja do mouse ou do teclado. Eu sei como fazer a primeira parte usando xautolock mas não sei como executar a segunda parte. Obrigado

    
por user311659 16.06.2016 / 04:21

2 respostas

1

Presumivelmente, você sabe sobre xset dpms que fornece gerenciamento de energia da exibição e brightd que faz alterações de luz de fundo progressivas, mas se isso não for suficiente, você poderá detectar o movimento quando estiver no modo ocioso usando xinput da seguinte forma.

Relacione os dispositivos de entrada com apenas xinput e encontre os ids do mouse e do teclado que você deseja ouvir. No meu caso foi 11 e 9.

Logitech USB Optical Mouse               id=11   [slave  pointer  (2)]
HID 05f3:0007                            id=9    [slave  keyboard (3)]

Você pode esperar por qualquer saída de xinput --test em cada ID:

xinput --test 9 | read stuff &  pid1=$!
xinput --test 11 | read stuff & pid2=$!
wait -n
kill -hup $pid1 $pid2 2>/dev/null
echo 'ready'
    
por 16.06.2016 / 12:08
1

Você pode tentar usar o dbus . Especificamente, use dbus-send para invocar o método GetSessionIdleTime em org.freedesktop.ScreenSaver :

dbus-send --session --dest=org.freedesktop.ScreenSaver --type=method_call --print-reply=literal /ScreenSaver org.freedesktop.ScreenSaver.GetSessionIdleTime

Isso imprimirá 4 espaços, depois "uint32", depois o número de milissegundos desde a última vez em que o usuário pressionou uma tecla ou moveu o mouse. Você pode extrair o número usando o comando cut :

echo $result | cut -d ' ' -f 5

Isso requer sondagem dbus em intervalos regulares, portanto, haverá um atraso entre a entrada do usuário e a resposta do seu script, dependendo da frequência de pesquisa.

    
por 16.06.2016 / 07:13