쉘이나 이와 비슷한 작업을 수행하려고한다고 가정합니다 (그렇지 않으면 X 라이브러리를 직접 사용하십시오). 그렇다면 xinput --test «device-name»
구문 분석이 훨씬 쉬울 수 있습니다 .
불행히도, 실제로 쉘 스크립팅이 아닙니다. 그러나 당신은 그것을 사용할 수 있습니다 stdbuf
. 당신이 그것을 죽일 때까지 실행되지만 쉘 스크립트는 그것을 파이프 할 수 read
있습니다.
따라서 다음과 같이 할 수 있습니다.
stty -echo
stdbuf -oL xinput test 'AT Translated Set 2 keyboard' \
| perl -nE 'BEGIN {$| = 1} m/^key press\s+(\d+)/ and say $1' \
| for key in q w e r t y; do
echo -n "Please press $key: "
read -r keycode
echo "key $key = $keycode"
done
stty echo
"AT Translated Set 2 keyboard"대신 올바른 키보드 이름을 사용해야합니다. 당신은 그것을 찾을 수 있습니다 xinput list
:
anthony@Zia:~$ xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Logitech USB-PS/2 Optical Mouse id=8 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Power Button id=7 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=9 [slave keyboard (3)]
불행히도 특정 장치를 사용해야합니다. 코어 키보드를 사용할 수 없습니다.
(또한 위의 xinput을 죽일 방법을 찾거나 모든 키를 입력했을 때 Control-C를 누르기 위해 콘텐츠를 작성해야하며 qwerty보다 많은 키를 나열하고 싶을 것입니다. )