web-dev-qa-db-ja.com

Linuxカーネルがカスタムキーボードスキャンコードをドロップ

私は、最新のコンピューターでの使用に適応しているビンテージのIBM122キーモデルMキーボードを持っています。私はTeensy2.0を使用して、エンコードを実行し、USB側を処理しています。 Humble Hackerキーボードプロジェクト( https://github.com/humblehacker/keyboard )からファームウェアを借りて、ビルド構成に追加のキーを追加しました。ここまでは順調ですね。

すべての「通常の」キーは機能しますが、カーネルは余分なキーをドロップしているようです(F13-F24など)。

/lib/udev/keymap -i input/event0を実行すると、すべての通常のキーのスキャンコードが表示されますが、追加のキーのスキャンコードは表示されません。

USBポートをパケットキャプチャするためにwiresharkを実行すると、キーボードIS送信)スキャンコードが表示されます。しかし、カーネルは原則としてそれらをドロップしているように見えます。

これは、カーネルドライバーにあるもので、予期しないスキャンコードを配信していないように感じます。

カーネルソースのどこかの.hファイルにある種の「マスター」キーマップがあると思いますが、これまでのところ、それを見つける努力は成功していません。

私の前にいる他の多くの人のように、Xで余分なキーをマッピングすることについて質問していないことを強調する価値があります。これは低レベルの、明らかにカーネルに関連する問題です。今のところ、Xをまったく使用しないと仮定します。必要なのは、/lib/udev/keymap -iを実行したときにスキャンコードが表示されることです。残りは、そこから実行できます。

16
user2543941

カーネルは奇妙なスキャンコードを見て、それらをドロップします。これらのスキャンコード値を取得してから、ハードウェアデータベースのインデックスを更新しようとします。つまり、計画は次のとおりです。

  • dmesg出力からコードを取得します-不明なキーコードが押されると、dmesgは次のようなものを出力するはずです。

    Unknown key pressed (translated set 2, code 0xa0 on isa0060/serio0)
    

a0はコード値です。

  • カスタムキーコードマッピングファイルを作成します。例とヘルプはデフォルトのファイルにあります
    /usr/lib/udev/hwdb.d/60-keyboard.hwdb Archの場合、他のディストリビューションでは異なる場合があります)。

  • 次のコマンドを実行して、ハードウェアデータベースを更新およびトリガーします。

    > udevadm hwdb --update
    > udevadm trigger /dev/input/eventXX
    

ここで、eventXXはキーボードに対応します(evtestを実行すると取得できます)。トリガーする代わりに再起動することもできます。

Arch wiki およびデフォルトのキーコードマッピングファイルで詳細な説明を確認してください(または、Archでない場合は配布ドキュメントを参照してください)。

これは信頼性が高くシンプルな方法であり、カーネルレベルでマッピングを行うため、ディスプレイサーバーやDEなどが何であれ機能します。

1
xbob

このウェブサイトはカスタムキーボード変換を提供しています http://straypoetry.com/ibm-model-m-keyboard/

このウェブサイトからの情報に基づく: http://deskthority.net/workshop-f7/xt-at-ps2-terminal-to-usb-converter-with-nkro-t2510.html

1
mark