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カーネルを使用しています。
背景:キーボードは [〜#〜] hid [〜#〜] USBデバイスであり、カーネルはスライダーキーのHID USBイベントを正しく認識し、それらをキーコード(KEY_ZOOMIN
およびKEY_ZOOMOUT
)。つまり、その点では、すでに「機能」しています。イベントを受け取って、何か便利なことができます。
ただし、Xキーボード変換は最大255のキーコードのみをサポートします( この回答 を参照してください。これはXプロトコルの制限です)。したがって、それらをXキーシムに変換することはできません。 (そして、とにかくそれはあなたが望んでいることではないかもしれません。なぜなら、ズームは通常、アプリケーションのマウスボタンイベント、つまりボタン4と5によって処理されるためです。したがって、キーシムに変換したとしても、ズームインまたはズームアウトしません。).
しかし、あなたがやろうとしたことから、それらを再マッピングしたいようです up そして down キー。これは、キーボードの他のキーとしてすでに使用可能な上下矢印キーと同じです。
answer で既にリンクされているように、Xが255より大きいキーコードを再マッピングできるようにするには、 somebody が作成されました パッチされたバリアント のX evdev
ドライバ。したがって、このパッチが適用されたバリアントをコンパイルしてインストールする必要がありますthenオプションevent_key_remap
が認識されます。標準のevdev
ドライバーでは認識されないため、xorg.conf
エントリが何も実行しなかったのも当然です。
それがおそらく最もクリーンな方法です。
すべてのLinuxを引き継ぐ過程で、systemd
は明らかに独自のハードウェアデータベースも持っており、キーボードマッピングを上書きできるようです。これが機能しているカーネルのレベルがよくわからないので、それがまったく役立つかどうかはわかりません。また、「ハードウェアデータベース」の形式も文書化されていないようです。だから私はこの点であなたをあまり助けることができません。
ただし、一致するための形式 変更されたようです なので、説明のとおり、バス番号を含めると運が高まるかもしれません。
Edit:カーネルソースを読み取ると、各入力デバイスに独自のスキャンコードがあることがわかりました(ハードウェアによって異なりますが、最大8バイトですが、多くの場所では1つしかありません)。カーネルの/ 2/4バイトは)キーコード(evtest
で表示されるもの)変換マッピングに転送されます。大きなコード値を設定して、デバイスのEVIOCGKEYCODE_V2
およびEVIOCSKEYCODE_V2
ioctlで取得できます。 xmodmap
やloadkeys/dumpkeys
のような一般的なツールは存在しないようですが、IRレシーバー関連のツールの中には、これらのioctlを使用しているものがあります。それがsystemd
データベースが機能する方法である場合、より柔軟な代替策は、udev
ルールでこのようなツールを使用することです(これもテストの方が簡単です)。マッピングをダンプする簡単なCプログラムを作成しましたが、githubに配置する必要があるかもしれません...
原則として、独自のプログラムまたはスクリプトで既にイベントを処理し、やりたいことを何でも行うことができます。たとえば、その上でevtest
を実行し、bashスクリプトで出力を解析し、4または5のボタンを押してxdotool
を呼び出すと、スライダーボタンのマウススクロールホイールと同じ効果が得られます。その他、pp(同様の目的で基本的なスクリプトを使用したstackexchangeの質問がありましたが、今は見つかりません。必要に応じて、さらに検索できます)。