如何正确设置 Logitech 鼠标的 USB 轮询率?

如何正确设置 Logitech 鼠标的 USB 轮询率?

我有一个非常具体的需求,需要更改 Ubuntu 15.04 中的 mousepoll 值。

在 Kerbal Space Program 中,有一个 Linux 错误,如果您在 mousepoll 值高于 125hz 时使用鼠标右键拖动视图,游戏将挂起一两秒钟,这会让您玩起来非常沮丧。

我有一款 Logitech G400 鼠标,其轮询频率最高可达 1000hz。我不知道如何更改它。

我努力了:

  • 设置options usbhid mousepoll=8/etc/modprobe.d/usbhid
  • usbhid.mousepoll=8启动时在命令行上设置
  • sudo modprobe -r usbhid && sudo modprobe usbhid mousepoll=8从命令行运行

这些在某种程度上是有效的,因为它cat /sys/module/usbhid/parameters/mousepoll返回的结果8与预期一致。但问题仍然存在于 KSP 中,当我evhzhttps://github.com/ian-kelling/evhz它仍然报告轮询率为 1000hz。

可能相关:

  • 我在笔记本电脑上。触摸板不使用 usbhid,并根据 evhz 以 125hz 轮询。使用此触摸板在 KSP 中进行右键单击平移没有问题。
  • Xfce 4.12(尝试启用和禁用合成,没有变化)
  • Nvidia 346.59 驱动程序
  • 根据我的笔记本电脑硬件,KSP 的性能符合预期
  • 软件包(包括内核)均为原装
  • 鼠标插入 USB 3.0 端口

答案1

我确实找到了解决这个问题的方法。

我在虚拟机中安装了 Windows,将 USB 鼠标设备连接到 VM,然后使用 Wireshark 跟踪 USB 流量并隔离官方 Logitech 驱动程序用于设置轮询速率的控制命令。(这对我指明正确的方向非常有帮助:https://unix.stackexchange.com/questions/138742/how-to-dump-usb-traffic

这个神奇的 Ruby 代码(必须以 root 身份运行,或者由具有写入权限的用户运行/dev/hidraw1)将在我的鼠标上将轮询率设置为 125Hz:

#!/bin/ruby
HIDIOCSFEATURE = 0xC0024806

f = File.open("/dev/hidraw1", "w+")
f.ioctl(HIDIOCSFEATURE,"\x20\x03")

/dev/hidraw1是我的鼠标的 hidraw 设备。根据您插入到机器中的设备数量,此路径可能会有所不同。

0xC0024806序列是向 hidraw 设备“发送功能报告”所需的 ioctl 值。不幸的是,我不记得我是如何获得这个值的,而且它可能不是 100% 技术正确。不过对我来说还是有用的!

"\x20\x03"序列是驱动程序在功能报告中发送给鼠标的数据。20似乎是用于识别轮询更改请求的十六进制值,并将03其设置为 125hz。02将其设置为 250hz、01500Hz 和001000hz。

被警告:这对我来说适用于 Logitech G400 鼠标。我认为这款鼠标只有一个硬件版本,因此它在该型号上应该是安全的。它尚未在任何其他型号上进行测试,并且不适用于使用 HID++ 协议进行通信的任何 Logitech 鼠标(这包括许多较新的鼠标以及使用 Unifying 接收器的任何无线型号)。

我几乎都不知道自己在做什么,我做的每一件事都是一路上第一次学到的,包括这句话:Caveat lector(读者当心)!

答案2

我在使用 Logitech G302 时也遇到了同样的问题。

行星毁灭鼠标延迟问题

不幸的是,罗技鼠标似乎不支持降低鼠标轮询率。

但如果确实有必要,您可以通过将鼠标连接到较慢的 USB 端口来通过硬件减少它。

使用埃夫赫兹,我注意到使用不同的 USB 端口后鼠标轮询率从 1000Hz 降低到了 250Hz。

相关内容