Sorgen Sie dafür, dass „Lesen“ funktioniert, wenn der Fokus nicht auf dem Terminal liegt

Sorgen Sie dafür, dass „Lesen“ funktioniert, wenn der Fokus nicht auf dem Terminal liegt

Ich habe das folgende Skript, das eine Schaltfläche in einem Programm spammt, wenn die V-Taste gedrückt wird

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

Dies funktioniert jedoch nur, wenn das Terminal fokussiert ist. Gibt es eine Möglichkeit, es auf alle Tastendrücke reagieren zu lassen?

Antwort1

Dies funktioniert für dieWurzelBenutzer:

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

Ausgabe (bisStrg-C):

     1  ԥ
     2  �W
     3  ^
     4  
     5  

Der Code liest von dem/dev/Eingabe/Ereignis*Datei entspricht derzeit der Tastatur. Gibt jeden Tastendruck in einer separaten Zeile wieder und nummeriert dann jede Zeile – Tastendrücke häufen sich schnell, sodass die Zeilennummern dabei helfen, zu zeigen, dass die Routine funktioniert.

Öffnen Sie in einem kleinen Vordergrundfenster einen Texteditor, geben Sie einen Text in den Editor ein und beobachten Sie, wie auf dem Hintergrundterminal die Zahlen vorbeilaufen.


Der grepobige Code stammt vonJacobPDie Antwort hier: Erfassung von Linux-Tastaturereignissen /dev/inputX

verwandte Informationen