我有一个非常具体的需求,需要更改 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 中,当我evhz
从https://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、01
500Hz 和00
1000hz。
被警告:这对我来说适用于 Logitech G400 鼠标。我认为这款鼠标只有一个硬件版本,因此它在该型号上应该是安全的。它尚未在任何其他型号上进行测试,并且不适用于使用 HID++ 协议进行通信的任何 Logitech 鼠标(这包括许多较新的鼠标以及使用 Unifying 接收器的任何无线型号)。
我几乎都不知道自己在做什么,我做的每一件事都是一路上第一次学到的,包括这句话:Caveat lector(读者当心)!
答案2
我在使用 Logitech G302 时也遇到了同样的问题。
不幸的是,罗技鼠标似乎不支持降低鼠标轮询率。
但如果确实有必要,您可以通过将鼠标连接到较慢的 USB 端口来通过硬件减少它。
使用埃夫赫兹,我注意到使用不同的 USB 端口后鼠标轮询率从 1000Hz 降低到了 250Hz。