Faça a 'leitura' funcionar quando não estiver focado no terminal

Faça a 'leitura' funcionar quando não estiver focado no terminal

Eu tenho o seguinte script que envia spam para um botão em um programa quando o botão V é pressionado

#!/bin/bash
winid=$(xdotool search "application name here" | head -n1)
while true; do
read -rsn1 input
if [ "$input" = "v" ]; then
    xdotool keydown --window $winid "button"
    xdotool keyup --window $winid "button"
fi
done

Porém, isso só funciona quando o terminal está focado. Existe alguma maneira de fazer com que ele ouça todas as teclas pressionadas?

Responder1

Isso funciona para oraizdo utilizador:

cat /dev/input/$(grep -E  'Handlers|EV=' /proc/bus/input/devices | \
                 grep -B1 'EV=120013' |  grep -Eo 'event[0-9]+') | \
while read -rsn1 foo ; do echo "$foo" ; done | nl

Saída (atéCtrl-C):

     1  ԥ
     2  �W
     3  ^
     4  
     5  

O código lê de qualquer/dev/entrada/evento*arquivo atualmente corresponde ao teclado. Ecoa cada pressionamento de tecla em linhas separadas e, em seguida, numera cada linha - os pressionamentos de tecla se acumulam rapidamente, de modo que os números das linhas ajudam a mostrar que a rotina está funcionando.

Tente abrir um editor de texto em uma pequena janela em primeiro plano, insira algum texto no editor e observe os números rolando no terminal em segundo plano.


O grepcódigo acima emprestado deJacobPa resposta aqui: Captura de evento de teclado Linux /dev/inputX

informação relacionada