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

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

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

관련 정보