터미널에 집중하지 않을 때 '읽기' 작업을 수행하세요.

터미널에 집중하지 않을 때 '읽기' 작업을 수행하세요.

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는 다음에서 빌린 것입니다.제이콥P님의 답변은 다음과 같습니다. Linux 키보드 이벤트 캡처 /dev/inputX

관련 정보