Заставить «читать» работать, когда терминал не активен

Заставить «читать» работать, когда терминал не активен

У меня есть следующий скрипт, который спамит кнопку в программе при нажатии кнопки 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

Однако это работает только тогда, когда терминал находится в фокусе. Есть ли способ заставить его слушать все нажатия клавиш?

решение1

Это работает длякореньпользователь:

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

Вывод (доCtrl-C):

     1  ԥ
     2  �W
     3  ^
     4  
     5  

Код считывается из любого/dev/вход/событие*Файл в настоящее время соответствует клавиатуре. Отображает каждое нажатие клавиши на отдельных строках, затем нумерует каждую строку — нажатия клавиш быстро накапливаются, поэтому номера строк помогают показать, что процедура работает.

Попробуйте открыть текстовый редактор в небольшом окне на переднем плане, ввести текст в редакторе и обратите внимание на прокручивающиеся на фоновом терминале цифры.


Код grepвыше заимствован изJacobPответ здесь: Перехват событий клавиатуры Linux /dev/inputX

Связанный контент