Kyl*_*yle 13 mouse wayland libinput
我使用 10 键鼠标 (Logitech M705)。在 X11 下,我能够通过修改etc/X11/xorg.conf.d.
在 Wayland 下,这不再有效。我的研究表明我需要对libinput. 我认为这将是一个常见问题,但在任何地方都找不到答案。
有人可以解释如何重新映射鼠标按钮或解释为什么不能这样做吗?
MIc*_*ael 20
我花了 2 天的时间进行谷歌搜索,测试了我找到的数十种方法,并努力在 Wayland 下重新映射鼠标按钮......
所以分享我所学到的:
罗技 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
Run Code Online (Sandbox Code Playgroud)
您可以使用 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 ------------
Run Code Online (Sandbox Code Playgroud)
现在为 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
Run Code Online (Sandbox Code Playgroud)
是的,按钮确实被映射为键盘按键扫描码回鼠标中键。不要使用太通用的设备标识符,evdev:input:*因为它可能会干扰您的其他设备,例如在我的 Thinkpad T490 上,它会破坏麦克风静音按钮 (Fn+F4)。
保存文件并重新扫描 hwdb
[root@centos8 ~]# systemd-hwdb update
Run Code Online (Sandbox Code Playgroud)
我还必须从 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
Run Code Online (Sandbox Code Playgroud)
现在您可以再次测试 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
Run Code Online (Sandbox Code Playgroud)
如果一切正常,您应该能够在 Wayland 本机应用程序(如 gnome-terminal)中粘贴两个额外的按钮。
享受。
小智 13
现在有一种图形化的方法可以做到这一点。所有的命令行解决方案都会受到伤害。我找到的 GUI 程序称为 Key Mapper,它适用于 X11 和 Wayland。它使用 root 权限并解决所有问题:
我通过搜索找到了这个:鼠标按钮映射 gui ubuntu
我找到的文章对此做了更多介绍:Remap Keyboard And Mouse Buttons On Linux With The New Key Mapper GUI (Supports X11 And Wayland) February 23, 2021 on Linux Uprising
小智 10
如果您正在运行 Wayland,则可以像这样重新映射按钮:
运行xev | grep button以记录鼠标单击事件并通过在窗口中单击来获取事件编号。就我而言,中间按钮是:
state 0x10, button 2, same_screen YES
Run Code Online (Sandbox Code Playgroud)
我想把它映射到:
state 0x10, button 13, same_screen YES
Run Code Online (Sandbox Code Playgroud)然后运行xinput --list并找到您的指针设备,我的是:
Logitech Performance MX id=9 [slave pointer (2)]
Run Code Online (Sandbox Code Playgroud)xinput get-button-map 9 返回:
1 2 3 4 ... 20
Run Code Online (Sandbox Code Playgroud)xinput 设置按钮映射:
$ xinput set-button-map 9 1 13 3 4 .. 12 2 14 .. 20
Run Code Online (Sandbox Code Playgroud)注意:替换9返回的号码的号码id=
如果该键的行为已定义,则您的事件将被映射。如果不是,那是一个有点不同的问题。在 Wayland TBH 下,我还没有找到对事件执行命令的方法(这对于 Xorg 来说很容易xbindkeys),因此完全自定义键和鼠标事件的行为..我相信 Wayland 正在努力提高安全性并禁用此行为.
无论如何,您仍然有机会轻松切换到 Xorg 并享受其功能。
小智 5
我制作了一个小的 shell 脚本 + systemd 单元文件,我称之为wayland-mouse-mapper。
摘录mathportillo/wayland-mouse-mapper用于将鼠标按钮映射到 Wayland 上的击键的小脚本。
我为自己制作了使用我的鼠标额外按钮来获取有用的东西。它已经过测试,可在 Fedora 27 上使用 Gnome 与 Logitech MX Master 2S 一起使用,也可以在我的旧 Logitech Performance MX 上使用。它可能适用于任何 Wayland 和任何 Logitech 鼠标(或任何鼠标,如果您编辑映射),因为似乎没有其他方法(xdotools、xbindkeys 等)有效。
它的工作原理是从 libinput 调试事件中读取,并根据已识别设备的已识别按钮使用 evemu 触发关键事件。
纽扣
这些只是默认设置,您可以在 mousemapper.sh 脚本的开头自定义它们。
- 前进:移至上方的工作区 ( Super+ Page up)
- 返回:移至下方的工作区 ( Super+ Page down)
| 归档时间: |
|
| 查看次数: |
9129 次 |
| 最近记录: |