web-dev-qa-db-ja.com

Linux MintでMS Natural Ergonomic 4000スライダーを機能させる方法は?

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年に機能させるために他に何かできることはありますか?

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

7
user3033648

背景:キーボードは [〜#〜] hid [〜#〜] USBデバイスであり、カーネルはスライダーキーのHID USBイベントを正しく認識し、それらをキーコード(KEY_ZOOMINおよびKEY_ZOOMOUT)。つまり、その点では、すでに「機能」しています。イベントを受け取って、何か便利なことができます。

ただし、Xキーボード変換は最大255のキーコードのみをサポートします( この回答 を参照してください。これはXプロトコルの制限です)。したがって、それらをXキーシムに変換することはできません。 (そして、とにかくそれはあなたが望んでいることではないかもしれません。なぜなら、ズームは通常、アプリケーションのマウスボタンイベント、つまりボタン4と5によって処理されるためです。したがって、キーシムに変換したとしても、ズームインまたはズームアウトしません。).

しかし、あなたがやろうとしたことから、それらを再マッピングしたいようです up そして down キー。これは、キーボードの他のキーとしてすでに使用可能な上下矢印キーと同じです。

  1. answer で既にリンクされているように、Xが255より大きいキーコードを再マッピングできるようにするには、 somebody が作成されました パッチされたバリアント のX evdevドライバ。したがって、このパッチが適用されたバリアントをコンパイルしてインストールする必要がありますthenオプションevent_key_remapが認識されます。標準のevdevドライバーでは認識されないため、xorg.confエントリが何も実行しなかったのも当然です。

    それがおそらく最もクリーンな方法です。

  2. すべてのLinuxを引き継ぐ過程で、systemdは明らかに独自のハードウェアデータベースも持っており、キーボードマッピングを上書きできるようです。これが機能しているカーネルのレベルがよくわからないので、それがまったく役立つかどうかはわかりません。また、「ハードウェアデータベース」の形式も文書化されていないようです。だから私はこの点であなたをあまり助けることができません。

    ただし、一致するための形式 変更されたようです なので、説明のとおり、バス番号を含めると運が高まるかもしれません。

    Edit:カーネルソースを読み取ると、各入力デバイスに独自のスキャンコードがあることがわかりました(ハードウェアによって異なりますが、最大8バイトですが、多くの場所では1つしかありません)。カーネルの/ 2/4バイトは)キーコード(evtestで表示されるもの)変換マッピングに転送されます。大きなコード値を設定して、デバイスのEVIOCGKEYCODE_V2およびEVIOCSKEYCODE_V2 ioctlで取得できます。 xmodmaploadkeys/dumpkeysのような一般的なツールは存在しないようですが、IRレシーバー関連のツールの中には、これらのioctlを使用しているものがあります。それがsystemdデータベースが機能する方法である場合、より柔軟な代替策は、udevルールでこのようなツールを使用することです(これもテストの方が簡単です)。マッピングをダンプする簡単なCプログラムを作成しましたが、githubに配置する必要があるかもしれません...

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

5
dirkt