Haga que la 'lectura' funcione cuando no esté enfocado en la terminal

Haga que la 'lectura' funcione cuando no esté enfocado en la terminal

Tengo el siguiente script que envía spam a un botón en un programa cuando se presiona el botón V

#!/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

Sin embargo, esto sólo funciona cuando el terminal está enfocado. ¿Hay alguna forma de hacer que escuche todas las pulsaciones de teclas?

Respuesta1

Esto funciona para elraízusuario:

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

Salida (hastaCtrl-C):

     1  ԥ
     2  �W
     3  ^
     4  
     5  

El código se lee desde cualquier/dev/entrada/evento*El archivo corresponde actualmente al teclado. Hace eco de cada pulsación de tecla en líneas separadas, luego numera cada línea; las pulsaciones de teclas se acumulan rápidamente, por lo que los números de línea ayudan a mostrar que la rutina está funcionando.

Intente abrir un editor de texto en una pequeña ventana de primer plano, ingrese algo de texto en el editor y observe los números que se desplazan en la terminal de fondo.


El grepcódigo anterior tomado prestado deJacobPLa respuesta de aquí: Captura de eventos de teclado de Linux /dev/inputX

información relacionada