私は10ボタンマウス(Logitech M705)を使います。 X11ではetc/X11/xorg.conf.d
。
Waylandではもう機能しません。私の調査は私が何かをしなければならないという事実を明らかにしましたlibinput
。よくある質問だと思いましたが、どこでも答えを見つけることができません。
誰かがマウスボタンを再マップする方法、またはこれを実行できない理由を説明できますか?
答え1
私は2日間インターネットを検索し、私が見つけた何十もの方法をテストし、Waylandでマウスボタンを再マッピングするのに苦労しました。
だから私が学んだことを共有します:
Logitech M570トラックボールには2つの追加ボタンがあります。 libinput から BTN_SIDE と BTN_EXTRA を生成します。
[root@centos8 ~]# libinput debug-events --device /dev/input/event21
-event21 DEVICE_ADDED Logitech M570
seat0 default group1 cap:p left scroll-nat scroll-button
event21 POINTER_BUTTON +16.93s BTN_EXTRA (276) pressed, seat count: 1
event21 POINTER_BUTTON +17.09s BTN_EXTRA (276) released, seat count: 0
event21 POINTER_BUTTON +17.89s BTN_SIDE (275) pressed, seat count: 1
event21 POINTER_BUTTON +17.99s BTN_SIDE (275) released, seat count: 0
evtestを使用して確認でき、ボタンスキャンコードも表示されます。
[root@centos8 ~]# evtest
No device specified, trying to scan all of /dev/input/event*
Available devices:
...
/dev/input/event21: Logitech M570
Select the device event number [0-21]: 21
Event: time 1589974995.415405, -------------- SYN_REPORT ------------
Event: time 1589974996.969613, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90004
Event: time 1589974996.969613, type 1 (EV_KEY), code 275 (BTN_SIDE), value 1
Event: time 1589975000.165574, -------------- SYN_REPORT ------------
Event: time 1589975000.611570, type 4 (EV_MSC), code 4 (MSC_SCAN), value 90005
Event: time 1589975000.611570, type 1 (EV_KEY), code 276 (BTN_EXTRA), value 1
Event: time 1589975002.369616, -------------- SYN_REPORT ------------
スキャンコードを目的のボタンに再マップするために、udev hwdbのルールファイルを作成します/etc/udev/hwdb.d/70-mouse-remap.hwdb
。たとえば、次のようになります。
# remap buttons on Logitech M570 trackball
evdev:name:Logitech M570:*
ID_INPUT_KEY=1
KEYBOARD_KEY_90004=btn_middle
KEYBOARD_KEY_90005=btn_middle
うん、そのボタンは本物キーボードキースキャンコードをマウスの中央ボタンに再マップします。あまりにも一般的なデバイス識別子はevdev:input:*
他のデバイスを妨げる可能性があるため、使用しないでください。たとえば、私のThinkpad T490では、マイクミュートボタン(Fn + F4)は機能しません。
ファイルを保存してhwdbをもう一度検索してください。
[root@centos8 ~]# systemd-hwdb update
また、変更を確認するには、USBからマウス(この場合はワイヤレス受信機)を物理的に取り外す必要がありました。再接続してルールが適用されていることを確認してください。
[root@centos8 ~]# udevadm info /dev/input/event21
P: /devices/pci0000:00/0000:00:14.0/usb1/1-4/1-4.4/1-4.4:1.2/0003:046D:C52B.0097/0003:046D:1028.0098/input/input84/event21
...
E: KEYBOARD_KEY_90004=btn_middle
E: KEYBOARD_KEY_90005=btn_middle
これで libinput を再テストでき、BTN_MIDDLE イベントを生成する両方のボタンが表示されます。
[root@centos8 ~]# libinput debug-events --device /dev/input/event21
-event21 DEVICE_ADDED Logitech M570 seat0 default group1 cap:kp left scroll-nat scroll-button
event21 POINTER_BUTTON +1.45s BTN_MIDDLE (274) pressed, seat count: 1
event21 POINTER_BUTTON +1.59s BTN_MIDDLE (274) released, seat count: 0
event21 POINTER_BUTTON +2.20s BTN_MIDDLE (274) pressed, seat count: 1
event21 POINTER_BUTTON +2.28s BTN_MIDDLE (274) released, seat count: 0
すべてが正常に動作したら、gnome-terminalなどのWaylandの基本アプリケーションに2つの追加ボタンを貼り付けることができます。
楽しんでください。
答え2
これでこれを行うグラフィカルな方法があります。すべてのコマンドラインソリューションが破損する可能性があります。私が見つけたGUIプログラムはKey Mapperと呼ばれ、X11とWaylandで動作します。 root権限を使用してすべての問題を解決します。
- インストーラ(例:debパッケージ)解放するGitHubのページ(または以下の記事で説明するように、アーチベースのディストリビューション用のAURパッケージもあるか、pipを使用できます)
- キーマッパーを開く
- 目的のマウスを選択してください。
- 「ここをクリック」をクリック
- 変更したいボタンをクリックします。 「キーを押す」が止まった場合は、まず、下のポップアップの指示に従って「デフォルトの復元」を実行してください。以前にマップされた変更が適用され、「デフォルトの復元」ボタンは削除されません。それらを) 。
- ボタンが承認されると、ボタン名が左の列に表示されます。その後、右側の列をクリックして、ボタンで実行するアクションの入力を開始できます。たとえば、前の手順でクリックしたLogitech Marbleマウスサイドボタンを中央クリックとして指定するには、「middle」と入力してから「BTN_MIDDLE」を選択します。
- 「適用」をクリックするとすぐに適用されます!
私はこれを検索して見つけました:マウスボタンマッピングgui ubuntu
私が見つけた記事では、これに関する詳細について説明しています。新しいキーマッパーGUI(X11およびWaylandをサポート)を使用して、Linuxでキーボードとマウスボタンを再マップします。2021年2月23日Linux反乱について
答え3
Waylandを実行している場合は、次のようにボタンを再マップできます。
xev | grep button
マウスクリックイベントを記録し、ウィンドウをクリックしてイベント数を取得するには実行します。私の場合、中央のボタンは次のようになります。state 0x10, button 2, same_screen YES
私はそれを次にマッピングしたいと思います:
state 0x10, button 13, same_screen YES
次に、実行して
xinput --list
ポインティングデバイスを見つけます。私のものは次のとおりです。Logitech Performance MX id=9 [slave pointer (2)]
xinput get-button-map 9
返品:1 2 3 4 ... 20
xinput はボタンマッピングを設定します。
$ xinput set-button-map 9 1 13 3 4 .. 12 2 14 .. 20
メモ:番号を9
返された番号に置き換えます。id=
そのキーの動作が定義されると、イベントがマッピングされます。そうでなければ、問題は少し異なります。 Wayland TBHはイベントに対してコマンドを実行する方法を見つけることができず(Xorgでは非常に簡単ですxbindkeys
)、キー押下とマウスイベントの動作を完全にカスタマイズしました。私はウェイランドがもっと努力していると信じています。安全この動作を無効にします。
それにもかかわらず、まだXorgに簡単に切り替えてその機能を楽しむ機会があります。
答え4
hwdb udevルールを修正してみてください。これにより、マウスボタンがキーボードキー(Launch8 / F16など)として登録され、すべてのプログラム、ウェイランド、または他のプログラムの機能が無効になります。
# /usr/lib/udev/hwdb.d/71-mouse-local.hwdb
evdev:input:*
KEYBOARD_KEY_90004=key_f16
KEYBOARD_KEY_90005=key_f17
その後、マウスをルートで切断し、systemd-hwdb update; udevadm trigger
再接続します。
追加の完全性チェック:sudo udevadm info /dev/input/by-path/*-usb-*-mouse | grep -A3 -P3 KEYBOARD_KEY
またはこのように照会します。systemd-hwdb query "evdev:input:v046dp406a*
ID抽出の詳細については、ソースコードを参照してください。
源泉:https://yulistic.gitlab.io/2017/12/linux-keymapping-with-udev-hwdb/