Как правильно установить частоту опроса USB для моей мыши Logitech?

У меня есть особая необходимость изменить значение mousepoll в Ubuntu 15.04.

В программе Kerbal Space есть ошибка в Linux, когда при перетаскивании вида правой кнопкой мыши, когда значение mousepoll выше 125 Гц, игра зависает на секунду или две, что делает ее очень разочаровывающей.

У меня есть мышь Logitech G400, которая опрашивает до 1000 Гц. Я не могу понять, как это изменить.

Я пытался:

  • настройка 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 как и ожидалось. Но проблема остается в КСП, и когда я бегу evhz с https://github.com/ian-kelling/evhz он по-прежнему сообщает скорость опроса 1000 Гц.

Возможно актуально:

  • Я на ноутбуке. Тачпад не использует usbhid и опрашивает на 125hz согласно evhz. Без проблем, используя панорамирование правой кнопкой мыши в KSP, используя это.
  • Xfce 4.12 (пробовал с включенным и отключенным композитингом, без изменений)
  • Nvidia 346.59 водителей
  • Производительность в KSP остальная, как и ожидалось, в зависимости от оборудования моего ноутбука
  • Пакеты (включая ядро) все в наличии
  • Мышь подключена к порту USB 3.0

2 ответа

Решение

Я нашел решение этой проблемы.

Я установил Windows на виртуальной машине, подключил USB-устройство мыши к виртуальной машине, затем проследил трафик USB с помощью Wireshark и изолировал управляющую команду, которую официальный драйвер Logitech использовал для установки частоты опроса. (Это было очень полезно, чтобы указать мне правильное направление: https://unix.stackexchange.com/questions/138742/how-to-dump-usb-traffic)

Этот волшебный код Ruby (должен запускаться от имени пользователя root или пользователем с правами на запись в /dev/hidraw1) установит частоту опроса на 125 Гц для моей мыши:

#!/bin/ruby
HIDIOCSFEATURE = 0xC0024806

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

/dev/hidraw1 это устройство hidraw для моей мыши. Этот путь может отличаться в зависимости от того, сколько устройств вы подключили к своей машине.

0xC0024806 sequence - это значение ioctl, необходимое для отправки отчета о функциях на устройство hidraw. Я не могу точно вспомнить, как я получил это значение, к сожалению, и оно не может быть на 100% технически правильным. Работает на меня, хотя!

"\x20\x03" Последовательность - это данные, которые драйвер отправил в отчете о возможностях мыши. 20 представляется в шестнадцатеричном виде значение, используемое для идентификации запроса на изменение опроса, и 03 устанавливает его на 125 Гц. 02 устанавливает его на 250 Гц, 01 до 500 Гц и 00 до 1000 Гц.

ВНИМАНИЕ: это работает для меня на мыши Logitech G400. Я думаю, что есть только один аппаратный вариант этой мыши, поэтому она должна быть безопасной для этой модели. Он не был протестирован ни на одной другой модели и не будет работать на мышах Logitech, использующих для связи протокол HID++ (включая многие новые мыши и любые беспроводные модели, использующие приемник Unifying).

Я также почти не знал, что я делаю, и все, что я делал, чтобы понять это, было изучено впервые, включая эту фразу: Caveat lector (читатель, будьте осторожны)!

У меня была такая же проблема с Logitech G302.

Планетарная аннигиляция мышиного отставания

К сожалению, кажется, что мышь Logitech не поддерживает снижение частоты опроса мыши.

Но если это действительно необходимо, вы можете уменьшить его аппаратно, подключив мышь к более медленному USB-порту.

Используя evhz, я заметил, что частота опроса мыши снизилась с 1000 Гц до 250 Гц с другим USB-портом.

Другие вопросы по тегам