Linuxのゼリーコームキーボード

Linuxのゼリーコームキーボード

だからクリスマスプレゼントとしてJelly Combキーボードを購入しました。しかし、メーカーによると、キーボードはWindowsで使用するように設計されています。今、次の質問があります。

  1. Num Lockを押すと、キーボードが奇妙に機能し始め、数字として機能する数字と数文字を除いて、ほとんどのキーが機能しなくなり、Num Lockをオフにすることはできません。numlockx offキーボードをコンピュータに接続するときにNum Lockが開かないようにしてみましたが、時には数字パッドを使用するのが好きですが、それはできません。

  2. F1〜F12が機能しません。 Fnを押すと、Fキーはマルチメディアキーとしても機能します。少なくともそれをしなければなりません。しかし、私の場合は、Fキーの1つを押すとランダムなマルチメディアジョブ(キーに印刷されたものとランダムと異なる)が発生しますが、Fnキーを押すと効果が別のマルチメディアジョブに変更され、再印刷されます。キー以外のものに。

  3. 出力を確認したところ、xev一部のキーに同じキーコードがあることがわかりました。たとえば、F11はFn + F4と同じ出力を印刷します。サンプル出力は次のとおりです。

KeyRelease event, serial 28, synthetic NO, window 0x3e00001,
    root 0x5c4, subw 0x0, time 2572602, (456,941), root:(521,1045),
    state 0x0, keycode 33 (keysym 0x70, p), same_screen YES,
    XLookupString gives 1 bytes: (70) "p"
    XFilterEvent returns: False

KeymapNotify event, serial 28, synthetic NO, window 0x0,
    keys:  4294967236 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   
           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

KeymapNotify event, serial 28, synthetic NO, window 0x0,
    keys:  4294967236 0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   
           0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   

最初はランダムな文字で、最後の2つはF11とFn + F4です。

詳細については、GnomeでUbuntu 20.04を実行しています。

だから私の質問は、Linuxでこのキーボードを正常に使用する方法があるかどうかということです。 Windowsのようにキーボードを解釈するようにOSに「指示」する方法があると思いますが、似たようなものが見つかりませんでした。

編集する:

したがって、@dirktの提案に従って出力を確認し、evtestそれぞれFn + F11とF4に対して次の行を得ました。

Event: time 1609244073.713496, type 1 (EV_KEY), code 113 (KEY_MUTE), value 1
Event: time 1609244073.713496, -------------- SYN_REPORT ------------
Event: time 1609244073.738779, type 1 (EV_KEY), code 113 (KEY_MUTE), value 0
Event: time 1609244073.738779, -------------- SYN_REPORT ------------
Event: time 1609244076.661538, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00e2
Event: time 1609244076.661538, type 1 (EV_KEY), code 113 (KEY_MUTE), value 1
Event: time 1609244076.661538, -------------- SYN_REPORT ------------
Event: time 1609244076.687504, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00e2
Event: time 1609244076.687504, type 1 (EV_KEY), code 113 (KEY_MUTE), value 0
Event: time 1609244076.687504, -------------- SYN_REPORT ------------

Event: time 1609244076.687504, type 4 (EV_MSC), code 4 (MSC_SCAN), value c00e2どちらも同じコード(113 KEY_MUTE)を持っていてもFnを押さないと、追加の行が表示されます。文字や数字など、すべての共通キーにも同じように適用されます。ところで、F1~F12をFnキーと一緒に使用すると線が消えます。したがって、私の後続の質問は、Linuxが同じキーコードを持つキーを区別できるように、追加の行を利用できますか?それでは、違いをどのように知ることができますか?

答え1

部分的な答え:

メーカーによると、このキーボードはWindowsに適しています。

これは、キーボードの非標準部分を処理するためのWindows専用ドライバがあることを意味できます。

このドライバはLinuxでは利用できないため、そのまま使用するか、違いをリバースエンジニアリングし、それを処理するためにLinuxを調整するオプションがあります。後者は時間と労力が必要です。

Google for Jelly Combは、これがUSBレシーバー付きのワイヤレスキーボードである可能性があることを示しています(あなたは言っていませんが、推測する必要があります)。

Linuxでキーボードスタックがどのように機能するかについてのクイックガイド:

USBデバイスには、キーボードなどのデバイスとの通信をエンコードするための標準的なHID(Human Interface Device)プロトコルがあります。lsusbキーボードを識別し、lsusb -vHIDがサポートされていることを確認するために使用される1つ以上のUSBエンドポイント(一部のキーボードには2つ以上があります)

カーネルはHIDイベントをデコードします(これらのイベントを説明するHID記述子を確認し、このスタック交換またはスーパーユーザースタック交換で詳細な回答を取得できます)。その後、カーネルはそれを入力層に渡します。

入力階層デバイスはで表示されます/dev/event/input*。それを実行し、dmesgキーボードが何を得るかを確認してください。evtestそのイベントから来るイベントを確認するために使用できます。

入力レイヤーであるXまたはWaylandのイベントを解釈し、対応するキーマップを使用してイベントを処理します。

evtestしたがって、両方が機能しないキーの組み合わせを確認し、興味深いことが進行中であるxevことを確認してください。

あなたのKeymapNotifyイベントは、キーマップを変更させるコードがあることを意味します。これは、使用しているキーマップまたはデスクトップにインストールされている項目が原因である可能性があります。

それがうまくいくとは思わないでくださいFn。キーは非標準であり、ノートブックメーカーまたはキーボードメーカーごとにキーを処理する方法が異なります。

関連情報