ฉันคิดว่าคุณกำลังพยายามทำสิ่งนี้ในเชลล์หรือสิ่งที่คล้ายกัน (อย่างอื่นคุณแค่ใช้ไลบรารี 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 Set 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 )