Bunu kabuk veya benzeri bir şekilde yapmaya çalıştığınızı varsayıyorum (aksi takdirde doğrudan X kütüphanelerini kullanırsınız). Eğer öyleyse, xinput --test «device-name»
ayrıştırmak çok daha kolay olabilir .
Ne yazık ki, gerçekten kabuk komut dosyası dostu değil. Ama onunla çalışmasını sağlayabilirsiniz stdbuf
. Öldürene kadar çalışır, ama kabuk betiğiniz onu harekete geçirebilir read
.
Yani, böyle bir şey yapabilirsiniz:
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 klavye" yerine doğru klavye adını kullanmanız gerekecektir. Şununla bulabilirsiniz 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)]
Maalesef belirli bir cihaz kullanmanız gerekiyor; ana klavyeyi kullanamazsınız.
(Ayrıca, yukarıdaki xinput'u öldürmenin bir yolunu bulmanız veya tüm anahtarları girdiğinizde Control-C'ye basmanız için kendinizi memnun etmeniz gerekir. Ve muhtemelen qwerty'den daha fazla anahtar listelemek isteyeceksiniz. )