MS Natural Ergonomic 4000スライダをLinux Mintで動作させるにはどうすればよいですか?

MS Natural Ergonomic 4000スライダをLinux Mintで動作させるにはどうすればよいですか?

MSキーボードのスライダーを操作しようとしていますが、それでも機能しません。

私が試したこと:

存在する/etc/udev/hwdb.d/61-keyboard-local.hwdb

keyboard:usb:v045Ep00DB*
  KEYBOARD_KEY_c022d=up
  KEYBOARD_KEY_c022e=down

そして

evdev:input:b0003v045Ep00DB*
 KEYBOARD_KEY_c022d=up
 KEYBOARD_KEY_c022e=down

次のような

sudo udevadm hwdb --update
sudo udevadm control --reload

再起動しても何も起こりませんでした。

存在する/lib/udev/keymaps/microsoft-ergonomic-keyboard

0xC022D 0xC1 # Zoom Up which we wish to be Scroll up
0xC022E 0xC2 # Zoom Down which we wish to be Scroll down

再起動しても何も起こりませんでした。

存在する/etc/X11/xorg.conf.d/10-keyboard.conf

Section "InputDevice"
    Identifier  "Keyboard1"
    Driver      "evdev"
    Option      "Device" "/dev/input/event9"
    Option      "event_key_remap" "418=185 419=186 423=101 425=156 421=157"
EndSection

再起動しても何も起こりませんでした。

私が持っているもの

> sudo evtest /dev/input/event9             
Input driver version is 1.0.1
Input device ID: bus 0x3 vendor 0x45e product 0xdb version 0x111
Input device name: "Microsoft Natural® Ergonomic Keyboard 4000"
...
Testing ... (interrupt to exit)
Event: time 1478692111.766327, type 4 (EV_MSC), code 4 (MSC_SCAN), value c022d
Event: time 1478692111.766327, type 1 (EV_KEY), code 418 (KEY_ZOOMIN), value 1
Event: time 1478692111.766327, -------------- SYN_REPORT ------------
Event: time 1478692111.886318, type 4 (EV_MSC), code 4 (MSC_SCAN), value c022d
Event: time 1478692111.886318, type 1 (EV_KEY), code 418 (KEY_ZOOMIN), value 0
Event: time 1478692111.886318, -------------- SYN_REPORT ------------
Event: time 1478692112.678287, type 4 (EV_MSC), code 4 (MSC_SCAN), value c022e
Event: time 1478692112.678287, type 1 (EV_KEY), code 419 (KEY_ZOOMOUT), value 1
Event: time 1478692112.678287, -------------- SYN_REPORT ------------
Event: time 1478692112.798370, type 4 (EV_MSC), code 4 (MSC_SCAN), value c022e
Event: time 1478692112.798370, type 1 (EV_KEY), code 419 (KEY_ZOOMOUT), value 0
Event: time 1478692112.798370, -------------- SYN_REPORT ------------

スライダーが機能してevtestイベントを表示できますが、xev何も表示されません。 2016年に私ができることはもうありますか?

私は4.4.0-34-genericカーネルでLinux Mint 18 Sarahを使用しています。

答え1

背景:あなたのキーボード高圧ガス放電管USBデバイスの場合、カーネルはスライダキーのHID USBイベントを正しく認識し、それをキーコード(KEY_ZOOMINsums KEY_ZOOMOUT)に変換します。したがって、その点ではすでに「動作」しています。イベントを受け取って役に立つタスクを実行できます。

ただし、Xキーボードトランスレータは最大255個のキーコードのみをサポートします(参照:この回答、これはXプロトコルの制限です)。したがって、X キー記号に変換できません。 (とにかくこれはあなたが望むものではないかもしれません。

しかし、あなたがやろうとしているのは、キーボードの別のキーとしてすでに使用されている上下の矢印キーと同様に、キーupに再マップしたいようです。down

  1. のように回答Xが255を超えるキーコードを再マッピングできるようにリンク作成済みパッチの変形Xevdevドライバ。したがって、このパッチされたバリアントをコンパイルしてインストールする必要があります。それからオプションevent_key_remapが認識されます。標準ドライバはこれを認識しないので、入力が何もしないことは驚くべきことではありませんevdevxorg.conf

    おそらくこれが最もきれいな方法です。

  2. すべてのLinuxを買収する過程で、systemd独自のハードウェアデータベースも持ち、キーマップを無視できるようになりました。これがカーネルのどのレベルで動作するのかよく分からないので、役に立つかわからず、「ハードウェアデータベース」の形式が文書化されていないようです。だから私はその点ではあまり役に立ちません。

    ただし、一致する形式は変わったようです。、説明されているように、バス番号を含めると運が良いかもしれません。

    編集する:カーネルソースを読みながら、各入力デバイスには独自のスキャンコード(ハー​​ドウェアに応じて最大8バイト、多くの場合カーネルの1/2/4バイトのみが送信されます)とキーコード(あなたが望むものは何ですか?)がありますを発見しました。 )翻訳マッピングを参照してくださいevtest。オンデバイスとioctlを使用してEVIOCGKEYCODE_V2大きなコード値を設定して取得できます。一部のIRレシーバ関連ツールはこれらのioctlを使用しているように見えますが、EVIOCSKEYCODE_V2同様の一般的なツールxmodmaploadkeys/dumpkeys存在しないようです。これがsystemdデータベースがどのように機能するかである場合、より柔軟な方法はルールudevでそのようなツールを使用することです(テストするのも簡単です)。地図をダンプするためのクイックCプログラムを作成しました。おそらくgithubにアップロードする必要があるようです...

  3. 原則として、すでに独自のプログラムまたはスクリプトを使用してイベントを処理し、必要な操作を実行できます。たとえば、evtestこれを実行してbashスクリプトを使用して出力を解析し、ボタンをxdotool4〜5回押して呼び出すと、スライダボタンを持つマウスホイールと同じ効果が得られます。など(似た目的の基本スクリプトでstackexchangeの質問がありますが、今は見つかりません。必要に応じてさらに検索してみます。)

関連情報