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 grep
código acima emprestado deJacobPa resposta aqui:
Captura de evento de teclado Linux /dev/inputX