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

sna*_*109 3 mouse games logitech usbhid

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

在《坎巴拉太空计划》中,有一个 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。

可能相关:

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

sna*_*109 5

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

我在虚拟机中安装了 Windows,将 USB 鼠标设备连接到虚拟机,然后使用 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")
Run Code Online (Sandbox Code Playgroud)

/dev/hidraw1是我的鼠标的 hidraw 设备。该路径可能会有所不同,具体取决于您插入计算机的设备数量。

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

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

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

我也几乎不知道自己在做什么,而我为弄清楚这一点所做的每一件事都是一路上第一次学到的,包括这句话:Caveat lector(读者注意)!