Linuxカーネルはカスタムキーボードスキャンコードを削除します。

Linuxカーネルはカスタムキーボードスキャンコードを削除します。

私は最新のコンピューターで使用するために変更している古いIBM 122キーMキーボードを持っています。私はUSB側をエンコードして処理するためにTeensy 2.0を使用しています。 Humble Hackerキーボードプロジェクトからファームウェアを借りました(https://github.com/humblehacker/keyboard)、ビルド構成に追加のキーを追加しました。今まではそんなに良くなった。

すべての「一般」キーは機能しますが、カーネルが追加のキー(F13-F24など)を削除するようです。

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

wiresharkUSBポートパケットキャプチャ表示の実行キーボード転送中コードをスキャンしましたが、カーネルが原則としてそのコードを捨てているようです。

カーネルドライバのどの部分が予期しないスキャンコードを提供していないようです。

カーネルソースコードのどこかにファイルにある種の「基本」キーマッピングがあると思います.hが、これまでは正常に見つかりませんでした。

私よりも多くの人がしたように、Xで追加のキーをマッピングする方法を尋ねないことを強調する価値があります。これは低レベルのカーネル関連の問題のようです。しばらくXをまったく使用しないとしましょう。私にとって必要なのは、実行中にスキャンコードを表示することです。/lib/udev/keymap -iその後、そこで残りの作業を実行できます。

答え1

カーネルは奇妙なスキャンコードを見つけてそれを破棄します。これらのスキャンコード値を取得し、ハードウェアデータベースインデックスを更新しようとします。簡単に言えば、計画はこうです。

  • dmesg出力からコードを取得する - 不明なキーコードを押すと、dmesgは次の内容を出力する必要があります。

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

a0コード値です。

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

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

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

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

覗くよりアーチスウィキより詳細な説明のためのデフォルトのキーコードマッピングファイル(Arch以外の場合は配布文書にあります)

これはカーネルレベルでマッピングする信頼性が高くシンプルな方法なので、ディスプレイサーバー、DEなどが何であっても機能します。

答え2

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

ウェブサイトによると: http://deskthority.net/workshop-f7/xt-at-ps2-terminal-to-usb-converter-with-nkro-t2510.html

関連情報