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


12

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

これはミニテルです:

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

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

すべて正常に動作しています。カスタムキーボードからいくつかのキーを受け取ります。キーを適切に再マップする必要があります。

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

私が持っている唯一の問題は、そのキーコードを取得する方法がわからないことです(そしてそれだけです!)。試してみましたxevが、表示するデータが多すぎて除外できません。

手作業ですべてのキーコードを追跡できることは知っていますが、10個のMinitelを変換するので、より迅速な方法を好むでしょう!


MESSプロジェクトのために、お持ちのMinitelからROMをダンプできますか?そのハードウェアは現在ダンプされておらず、確かに歴史的に重要です。
sendmoreinfo

なぜそうではありませんが、私はそれを行う方法について何も知りません!
xavier.seignard

回答:


6

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


ありがとうデロバート!それは完全に私のニーズに合っています!id2つの同じ名前と競合するため、キーボードの名前の代わりにキーボードを使用しました。だから、xinput test 1818は私のキーボードのIDです。
xavier.seignard

長時間実行されていないコマンド(つまり、最初のキーが押された後に停止し、キーコードを返す)で同じことができたら、それは一種の夢です:)
xavier.seignard

@ xavier.seignard試しましたが、それを行うユーティリティが見つかりませんでした。しかし、xinputソースを取得してそのように動作させるのはかなり簡単でしょう...チェックしてくださいtest.c、関連する関数はのようですprint_events。xorgは、n個のイベントの後に停止するフラグを追加するパッチを取るでしょうか?
デロバート

@ xavier.seignard私はちょうどそれをソートする方法に出くわしました... xinput --query-state現在の状態を与え、すぐに終了します。あなたはそれをビジーループすることができます。
デロバート
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.