Keyboard
從定制的鍵盤獲取鍵的鍵碼
我正在嘗試將 Minitel 轉換為帶有 Raspberry Pi 的電腦。
這是一個迷你電話:
所以我將 minitel 鍵盤的矩陣焊接到 USB 鍵盤 PCB 上,如下所示:
一切正常,我從自定義鍵盤收到了一些鍵。我只需要適當地重新映射鍵。
所以我正在嘗試創建一個程序,要求我按下
a
並擷取相應的鍵碼,然後使用我的自定義鍵盤的所有鍵,最終生成一個 xmodmap 文件。我唯一的問題是我無法弄清楚如何獲得該鍵碼(僅此而已!)。我試過
xev
了,但是顯示的數據太多,無法過濾掉。我知道我可以手動跟踪所有鍵碼,但我會轉換 10 個 Minitel,所以我更喜歡更快的方法!
我假設您正在嘗試在 shell 或類似工具中執行此操作(否則,您只需直接使用 X 庫)。如果是這樣,您可能會發現
xinput --test «device-name»
更容易解析。不幸的是,它確實對 shell 腳本不友好。但是你可以讓它與
stdbuf
. 它會一直執行直到你殺死它,但你的 shell 腳本可以將它通過管道傳輸到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 更多的鍵。 )