更新 #1

更新 #1

我在 Ubuntu 18.10 LTS 上运行 Firefox 版本 67。

我有一个罗技M-UAG120鼠标带有滚轮。滚轮有向左和向右推的方法。我需要的是向左推的动作与 Firefox 的 Alt-LEFT 相同,可以返回上一页,而向右推滚轮则相反。目前,Firefox 不会响应任何滚轮推动操作的 X 事件。(我将这些称为“推动操作”,因为这与通过垂直向下推滚轮单击鼠标中键不同,后者可以正常工作)。滚动操作也正常工作。

我跑了并确定它正在生成以下 X 事件:

  1. 左滚轮按压操作:按钮 6
  2. 右滚轮按压操作:按钮 7

我调查了http://kb.mozillazine.org/About:config但未找到与这些事件有关的具体信息,在网上搜索后仍无所获。

我该如何配置鼠标或 Firefox,让 X 事件保持一致,从而产生相同的行为?如果可能的话,我不想为这个鼠标安装特殊的驱动程序。

更新 #1

在我的 Ubuntu 18.10 LTS 桌面上,有一个罗技 M525 蓝牙鼠标,左右滚轮推动操作产生不同的一组 X 事件比我的笔记本电脑上使用的有线鼠标多,从

  1. 左滚轮按压操作:按钮 8
  2. 右滚轮按压操作:按钮 9

并且这款特殊鼠标的左/右滚轮推压操作正如我预期的那样工作。

更新 #2:

我测试了罗技M-UAG120鼠标在两台机器上(我的笔记本电脑和台式机,都运行 Ubuntu 18.10 LTS)再次检查,生成的 X 事件始终一致不同的罗技 M525 蓝牙鼠标

我推测特定的 X 事件在不同的鼠标设备上并没有标准化,但这令人惊讶,因为两种鼠标设备都是来自 Logitech。

答案1

解决方案

我找到了以下解决方案:

我补充道/usr/share/X11/xorg.conf.d/71-Logitech-Optical-Tilt-Wheel-Mouse-M-UAG120.conf

Section "InputClass"
        Identifier "Logitech Optical Tilt Wheel Mouse M-UAG120"
        MatchUSBID "046d:c019" 
        MatchDevicePath "/dev/input/event*"
        # I found that using this command:
        #
        #   xinput --set-button-map 10 1 2 3 4 5 8 9 8 9
        #                                        ^ ^
        # The "^" above are the numbers I changed from 6 and 7 to 8 and 9, respectively.
        # That does the same thing as this ButtonMapping below:
        #
        Option "ButtonMapping" "1 2 3 4 5 8 9 8 9"
EndSection

并重新启动。

令我感到困惑的是,使用sudo service gdm restart做过不是工作:它阻止我登录(即使我没有打开 CAPSLOCK 或任何其他功能,它仍然会弹回到密码提示),所以我不得不重新启动。


TL;DR 参考资料

我发现有助于理解上述内容的参考资料:

xinput 查找设备id和按钮参数

设备 ID 指的是下面的数字。“按钮参数”指的是文件id=10中使用的参数的含义。ButtonMapping/usr/share/X11/xorg.conf.d/71-Logitech-Optical-Tilt-Wheel-Mouse-M-UAG120.conf

插入设备后,使用 grep 查找设备:

$ xinput --list | grep -i logit
⎜   ↳ Logitech USB Optical Mouse                id=10   [slave  pointer  (2)]

看看系统认为这些按钮的含义:

$ xinput --list 10 | grep -i 'Button labels'
        Button labels: "Button Left" "Button Middle" "Button Right" "Button Wheel Up" "Button Wheel Down" "Button Horiz Wheel Left" "Button Horiz Wheel Right" "Button Side" "Button Extra" "Button Forward" "Button Back" None

我推测那里的引号字符串是对应于的基于 1 的枚举值ButtonMapping,但我还没有证据。因此,假设这是正确的,我们可以对它们进行编号:

$ xinput --list 10 | grep -i 'Button labels' | sed 's%: %:\n%g; s%" "%"\n"%g' | sed '1d' | cat -n
     1  "Button Left"
     2  "Button Middle"
     3  "Button Right"
     4  "Button Wheel Up"
     5  "Button Wheel Down"
     6  "Button Horiz Wheel Left"
     7  "Button Horiz Wheel Right"
     8  "Button Side"
     9  "Button Extra"
    10  "Button Forward"
    11  "Button Back" None
$ 

这种猜测似乎也符合Logitech_Marble_Mouse -- 基本功能

因此,ButtonMapping8 和 9 的位置对应于我希望系统传递给 Firefox X 应用程序的“浏览器后退”和“浏览器前进”操作。由于我想保留所有其他行为,因此文件中的关键行/usr/share/X11/xorg.conf.d/71-Logitech-Optical-Tilt-Wheel-Mouse-M-UAG120.conf是:

Option "ButtonMapping" "1 2 3 4 5 8 9 8 9"
#                                 ^ ^

^仅标记了 6 和 7 个参数被更改)。

按钮映射

libinput(4) 手册页按钮映射部分描述了该机制。

我偶然发现了“libinput”,因为Ubuntu 16.04 和 Logitech M570它指出:

Ubuntu 18.04 默认不再使用 evdev 驱动程序。它已被 Libinput 取代

使用 xinput 命令动态更改按钮映射

输入(1)手册页有一个选项可以直接验证按钮参数,ButtonMapping而无需重新启动显示管理器或 X 服务器:

--set-button-map device map_button_1 [map_button_2 [...]]
        Change the button mapping of device. The buttons are specified in physical order (starting with button 1) and are mapped to the logical button provided. 0 disables a but‐
        ton. The default button mapping for a device is 1 2 3 4 5 6 etc.

因此,无需重新启动/重启任何东西,我可以使用的命令是:

$ xinput --set-button-map 10 1 2 3 4 5 8 9 8 9
$

分配按钮

Logitech_Marble_Mouse——分配按钮是 ArchLinux 特定且特定于设备的,但仍然非常有用,特别是它指出:

您可能希望为按钮按下分配新操作。这可以通过设置位置参数来完成。可以更改按钮 1、2、3、8 和 9 的值。(按钮 2 只是两个大按钮的组合按下。)不要更改参数 4、5、6 或 7。

但实际上我确实必须更改我的ButtonMapping鼠标设备的 6 和 7 个参数。上面没有解释为什么它显示“请勿更改”。

xorg.conf(5) 手册页

xorg.conf(5) 手册页显示了 conf 文件的工作方式,但请注意,由于行为会随着版本的不同而变化,请确保您使用正确的版本,如在其网页顶部所示:

xorg.conf(5) 注释截图

lsusb -d 供应商:设备

运行 lsusb 命令(lsusb(8) 手册页)帮助我识别了供应商和设备ID:

$ lsusb -d 046d:c019
Bus 001 Device 009: ID 046d:c019 Logitech, Inc. Optical Tilt Wheel Mouse

这就是我最终在部分中MatchUSBID的选项中使用的内容。请参阅InputClass71-Logitech-Optical-Tilt-Wheel-Mouse-M-UAG120.confGovelius 对 Linux 中为多个同时输入设备分配不同布局的问题的解答

/var/log/Xorg*.log 文件

查找最近修改的/var/log/Xorg.*.log文件:

$ ls -ladtr /var/log/X*
-rw-r--r-- 1 root root 18922 Mar 17  2017 /var/log/Xorg.failsafe.log.old
-rw-r--r-- 1 root root 18922 Mar 19  2017 /var/log/Xorg.failsafe.log
-rw-r--r-- 1 root root 26019 Jun  8 12:20 /var/log/Xorg.2.log.old
-rw-r--r-- 1 root root 26019 Jun  8 12:21 /var/log/Xorg.2.log
-rw-r--r-- 1 root root 28910 Jun  8 12:45 /var/log/Xorg.0.log.old
-rw-r--r-- 1 root root 38010 Jun  8 12:45 /var/log/Xorg.1.log.old
-rw-r--r-- 1 root root 27869 Jun  8 12:57 /var/log/Xorg.0.log
-rw-r--r-- 1 root root 34901 Jun  8 12:57 /var/log/Xorg.1.log
$ 

然后通过 grep 命令查看ButtonMapping是否出现了以下内容:

$ grep -n -B10 -i -H -e 'ButtonMapping' /var/log/Xorg.1.log
/var/log/Xorg.1.log-292-[   665.912] (**) Logitech USB Optical Mouse: Applying InputClass "libinput pointer catchall"
/var/log/Xorg.1.log-293-[   665.912] (**) Logitech USB Optical Mouse: Applying InputClass "Logitech Optical Tilt Wheel Mouse M-UAG120"
/var/log/Xorg.1.log-294-[   665.912] (II) Using input driver 'libinput' for 'Logitech USB Optical Mouse'
/var/log/Xorg.1.log-295-[   665.912] (II) systemd-logind: got fd for /dev/input/event5 13:69 fd 46 paused 0
/var/log/Xorg.1.log-296-[   665.913] (**) Logitech USB Optical Mouse: always reports core events
/var/log/Xorg.1.log-297-[   665.913] (**) Option "Device" "/dev/input/event5"
/var/log/Xorg.1.log-298-[   665.913] (**) Option "_source" "server/udev"
/var/log/Xorg.1.log-299-[   665.914] (II) event5  - Logitech USB Optical Mouse: is tagged by udev as: Mouse
/var/log/Xorg.1.log-300-[   665.914] (II) event5  - Logitech USB Optical Mouse: device is a pointer
/var/log/Xorg.1.log-301-[   665.914] (II) event5  - Logitech USB Optical Mouse: device removed
/var/log/Xorg.1.log:302:[   665.914] (**) Option "ButtonMapping" "1 2 3 4 5 8 9 8 9"
$ 

Logitech Optical Tilt Wheel Mouse M-UAG120出现以及随后的ButtonMapping

InputClass 配置

libinput(4) 手册页 InputClass 部分描述包括选项在内的所有选项MatchUSBID

相关内容