Keyboard

從定制的鍵盤獲取鍵的鍵碼

  • June 30, 2014

我正在嘗試將 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 更多的鍵。 )

引用自:https://unix.stackexchange.com/questions/81030