Linuxカーネルがカスタムキーボードスキャンコードを削除する


16

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

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

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

wiresharkUSBポートのパケットキャプチャを実行すると、キーボードがスキャンコードを送信していることがわかりますが、カーネルは原則としてスキャンコードをドロップしているようです。

これはカーネルドライバーに含まれているもので、予期しないスキャンコードを配信していないだけだと思います。

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

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


私はこれが役に立たないことを知っていますが、なぜあなたはTeensyを使用しているのですか?そのキーボードは、ストレートPS2 / USBアダプターで動作するはずです。
goldilocks 14

キーボードは古いIBM端末からのもので、PS / 2互換プロトコルを使用していません。
user2543941

ワオ。実際、ドライバーがイベントを渡していない可能性があります(最後の部分をご覧ください)。別の方法で出てくる場合evtest/lib/udev/keymap -i、dunnoの代わりに試すことができます。
goldilocks 14

1
evtestは、追加のキーが使用されている場合も何も表示しません。
user2543941 14

1
これらのキーを使用したい場合は、プロジェクトが少し大きくなったように見えます(笑)。キーボードドライバーの作成で最も難しいことは、APIを学習することです。それ以外の場合は、それほど複雑に見えません。私はしばらくの間、カーネルのことは何もしていませんが、これ:LDD3はまだ3.xで有効だと思います。
goldilocks 14

回答:


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 wikiとデフォルトのキーコードマッピングファイルを参照してください(Archでない場合は、配布資料を参照してください)。

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


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.