为什么 Microsoft Comfort Mouse 4500 的 xinput 中的滚动速度与滚动速度无关

Pet*_*vel 8 mouse mouse-scroll scrolling 18.04

在我随机安装任何其他软件之前,我想了解 xinput 的工作原理以及为什么与我的鼠标滚动速度无关。

你能帮我解惑吗?

Ubuntu 18.04.1 LTS x64,GNOME 3.28.2(不确定是否重要)。最新。

$ xinput list
? Virtual core pointer                      id=2    [master pointer  (3)]
?   ? Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
?   ? ETPS/2 Elantech Touchpad                  id=11   [slave  pointer  (2)]
?   ? Microsoft Microsoft® Comfort Mouse 4500   id=14   [slave  pointer  (2)]
? Virtual core keyboard                     id=3    [master keyboard (2)]
    ? Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ? Power Button                              id=6    [slave  keyboard (3)]
    ? Video Bus                                 id=7    [slave  keyboard (3)]
    ? HP TrueVision HD Camera: HP Tru           id=8    [slave  keyboard (3)]
    ? Intel Virtual Button driver               id=9    [slave  keyboard (3)]
    ? AT Translated Set 2 keyboard              id=10   [slave  keyboard (3)]
    ? HP Wireless hotkeys                       id=12   [slave  keyboard (3)]
    ? HP WMI hotkeys                            id=13   [slave  keyboard (3)]
    ? Microsoft Microsoft® Comfort Mouse 4500   id=15   [slave  keyboard (3)]
    ? Chicony USB Keyboard                      id=16   [slave  keyboard (3)]
    ? Chicony USB Keyboard                      id=17   [slave  keyboard (3)]
Run Code Online (Sandbox Code Playgroud)

“指针”下鼠标的详细信息:

$ xinput list-props 14
Device 'Microsoft Microsoft® Comfort Mouse 4500':
    Device Enabled (142):   1
    Coordinate Transformation Matrix (144): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    libinput Natural Scrolling Enabled (289):   0
    libinput Natural Scrolling Enabled Default (290):   0
    libinput Scroll Methods Available (293):    0, 0, 1
    libinput Scroll Method Enabled (294):   0, 0, 0
    libinput Scroll Method Enabled Default (295):   0, 0, 0
    libinput Button Scrolling Button (727): 2
    libinput Button Scrolling Button Default (728): 2
    libinput Middle Emulation Enabled (729):    0
    libinput Middle Emulation Enabled Default (730):    0
    libinput Accel Speed (296): -0.258993
    libinput Accel Speed Default (297): 0.000000
    libinput Accel Profiles Available (731):    1, 1
    libinput Accel Profile Enabled (732):   1, 0
    libinput Accel Profile Enabled Default (733):   1, 0
    libinput Left Handed Enabled (298): 0
    libinput Left Handed Enabled Default (299): 0
    libinput Send Events Modes Available (266): 1, 0
    libinput Send Events Mode Enabled (267):    0, 0
    libinput Send Events Mode Enabled Default (268):    0, 0
    Device Node (269):  "/dev/input/event16"
    Device Product ID (270):    1118, 1900
    libinput Drag Lock Buttons (300):   <no items>
    libinput Horizontal Scroll Enabled (301):   1
Run Code Online (Sandbox Code Playgroud)

仅与滚动相关的部分:

$ xinput 列表道具 14 | grep -i '滚动'启用
    libinput 自然滚动(289): 0
    libinput 自然滚动启用默认值 (290): 0
    libinput滚动方法可用 (293): 0, 0, 1启用
    libinput滚动方法 (294): 0, 0, 0
    libinput滚动方法启用默认值 (295): 0, 0, 0
    libinput 按钮滚动按钮 (727): 2
    libinput 按钮滚动按钮默认值 (728):2启用
    libinput 水平滚动(301): 1

“键盘”下鼠标的详细信息:

$ xinput list-props 15
Device 'Microsoft Microsoft® Comfort Mouse 4500':
    Device Enabled (142):   1
    Coordinate Transformation Matrix (144): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
    libinput Send Events Modes Available (266): 1, 0
    libinput Send Events Mode Enabled (267):    0, 0
    libinput Send Events Mode Enabled Default (268):    0, 0
    Device Node (269):  "/dev/input/event16"
    Device Product ID (270):    1118, 1900
Run Code Online (Sandbox Code Playgroud)

use*_*.dz 3

至少不会修复,这是当前状态libinput

\n\n
    \n
  • 上游错误报告:freedesktop - libinput - 支持设置滚动速度 #185

    \n\n
      \n
    1. 鼠标制造商使用不同的高分辨率滚动实现
    2. \n
    3. 滚动速度需要可变并由应用程序根据上下文进行控制
    4. \n
  • \n
  • 旧解决方案正在使用evdev

  • \n
  • 设置方法:xinput,xorg.conf.d
  • \n
\n\n

解决方法,使用 Udev HWDB(低级修复)

\n\n
    \n
  • (1)udev针对特定鼠标型号的 HWDB 设置。

    \n\n

    来源:U&L:使用 libinput 更改滚动速度

    \n\n

    我确认,这是 udev 上游代码存储库的当前解决方案

    \n\n
      \n
    1. 检查您的鼠标标识:供应商 ID、产品 ID、设备名称

      \n\n

      当鼠标插入时

      \n\n
      sudo lsusb\n
      Run Code Online (Sandbox Code Playgroud)\n\n

      运行以下命令之一,然后重新连接鼠标

      \n\n
      sudo udevadm monitor -u\nsudo journalctl -k -b -f\n
      Run Code Online (Sandbox Code Playgroud)\n\n

      并检查systemd/hwdb.d/70-mouse.hwdb/lib/udev/hwdb.d/70-mouse.hwdb或在系统中查找本地文件。搜索相同或相似的设备。

    2. \n
    3. 打开终端,创建71-mouse-local.hwdb文件

      \n\n
      sudo nano /etc/udev/hwdb.d/71-mouse-local.hwdb\n
      Run Code Online (Sandbox Code Playgroud)
    4. \n
    5. 复制步骤 (1) 中的这些行并将其附加到新文件中,添加滚轮单击角度条目并根据需要设置角度(默认=15 度/单击,作为整数值),如下所示:

      \n\n
      # Microsoft Comfort Mouse 4500\nmouse:usb:v045ep076c:name:Microsoft Microsoft\xc2\xae Comfort Mouse 4500:\n MOUSE_DPI=1000@125\n MOUSE_WHEEL_CLICK_ANGLE=15\n
      Run Code Online (Sandbox Code Playgroud)\n\n

      如果您在 中找不到您的设备70-mouse.hwdb,请使用步骤 (1) 中收集的信息以此格式创建它

      \n\n
      mouse:usb:v <VendorID> p <ProductID> :name: <DeviceName> :\n
      Run Code Online (Sandbox Code Playgroud)
    6. \n
    7. 保存并关闭

      \n\n

      Ctrl+ O, Ctrl+X

    8. \n
    9. 更新udev硬件数据库,触发对应事件节点的变化

      \n\n
      sudo systemd-hwdb update\nsudo udevadm trigger /dev/input/event16\n
      Run Code Online (Sandbox Code Playgroud)\n\n

      event16如输出中报告的那样xinput

    10. \n
    \n\n

    笔记

    \n\n

    该答案是针对 OP 案例定制的,但可以针对其他模型进行调整。已经将其扩展为更通用。

    \n\n
      \n
    • 完整的上游说明位于:systemd/hwdb.d/70-mouse.hwdb70-mouse.hwdb或在系统中查找本地文件。您还可以在那里查看其他高级功能。

    • \n
    • MOUSE_WHEEL_CLICK_COUNT一个 overrides MOUSE_WHEEL_CLICK_ANGLE,当角度参数不够精确时使用它。

      \n\n

      MOUSE_WHEEL_CLICK_COUNT默认=24 单击/旋转或单击/360deg,接受整数值

      \n\n

      例子:

      \n\n
      # Microsoft Comfort Mouse 4500\nmouse:usb:v045ep076c:name:Microsoft Microsoft\xc2\xae Comfort Mouse 4500:\n MOUSE_DPI=1000@125\n MOUSE_WHEEL_CLICK_ANGLE=15\n MOUSE_WHEEL_CLICK_COUNT=24\n
      Run Code Online (Sandbox Code Playgroud)\n\n

      MOUSE_WHEEL_CLICK_ANGLE出于兼容性原因,这是必须的,即使它的值对声明无效MOUSE_WHEEL_CLICK_COUNT

    • \n
  • \n
\n\n

未来,GUI 工具包(高级修复)

\n\n
    \n
  • (2) 可能在 GUI 工具包级别实现。Fair 希望大型免费社区项目之间的协作(就像任意 Unicode 输入的情况一样)仅在 GTK 中实现。

    \n\n

    有些应用程序不会等待,例如某些浏览器和游戏(Firefox、Chromium、SDL 游戏等)。

    \n\n

    上面链接的错误报告中有来自 GUI 套件的错误报告列表。

  • \n
\n

  • +1。它适用于任何鼠标吗?我应该如何将其自定义为我的鼠标(Microsoft 无线鼠标 5000)。 (2认同)