これをシェルなどで実行しようとしていると仮定します(そうでない場合は、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よりも多くのキーをリストする必要があります。 )