カスタムキーボードからキーのキーコードを取得する

カスタムキーボードからキーのキーコードを取得する

MinitelをRaspberry Piを搭載したコンピュータに変換しようとしています。

このホテルは小さなホテルです。

ここに画像の説明を入力してください。

そこで、ミニテルキーボードのマトリックスをUSBキーボードPCBに次のようにはんだ付けしました。 ここに画像の説明を入力してください。

すべてがうまくいきます。カスタムキーボードでキーを数回押すことがあります。キーを適切に再マッピングするだけです。

aそのため、対応するキーコードを押してキャプチャし、カスタムキーボードのすべてのキーを使用して最終的にxmodmapファイルを生成するプログラムを作成しようとしました。

私の唯一の問題は、そのキーコードを取得する方法がわからないということです(それはすべてです!)。試してみましたxevが、フィルタリングできないほど多くのデータが表示されました。

すべてのキーコードを手動で追跡できることを知っていますが、10個のミニテレグラムを変換するので、より速い方法を好みます!

答え1

私はあなたがシェルや同様の場所でこれをやろうとしていると仮定します(それ以外の場合は、Xライブラリを直接使用できます)。もしそうなら、xinput --test «device-name»解析ははるかに簡単になります。

残念ながら、シェルスクリプトには適していません。しかし、stdbufread

したがって、次のようにすることができます。

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よりも多くのキーを一覧表示することもできます。)

関連情報