Torna o trabalho de 'leitura' quando não está focado no terminal

2

Eu tenho o seguinte script que envia 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

No entanto, isso só funciona quando o terminal está focado, existe alguma maneira de fazê-lo ouvir todas as teclas pressionadas?

    
por MightyAlex200 02.10.2016 / 05:22

1 resposta

1

Isso funciona para o usuário raiz :

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 arquivo / dev / input / event * que atualmente corresponde ao teclado. Cada tecla é pressionada em linhas separadas e, em seguida, numera cada linha - as teclas se acumulam rapidamente, de modo que os números de linha 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 percorrendo o terminal de segundo plano.

O código grep acima emprestado da resposta de JacobP aqui: Captura de evento de teclado do Linux / dev / inputX

    
por 02.10.2016 / 08:25