web-dev-qa-db-fra.com

Comment définir le taux d'interrogation USB correctement pour ma souris Logitech?

J'ai un besoin très spécifique de changer la valeur de mousepoll dans Ubuntu 15.04.

Dans Kerbal Space Program, il existe un bogue Linux selon lequel si vous faites glisser la vue avec le bouton droit de la souris alors que la valeur de la souris est supérieure à 125hz, le jeu sera suspendu pendant une seconde ou deux, ce qui le rendra très frustrant.

J'ai une souris Logitech G400 qui interroge jusqu'à 1000hz. Je ne peux pas trouver comment changer cela.

J'ai essayé:

  • Réglage de options usbhid mousepoll=8 dans /etc/modprobe.d/usbhid
  • Paramétrer usbhid.mousepoll=8 sur la ligne de commande lors du démarrage
  • Exécution de Sudo modprobe -r usbhid && Sudo modprobe usbhid mousepoll=8 à partir de la ligne de commande

Celles-ci sont assez efficaces en ce que cat /sys/module/usbhid/parameters/mousepoll renvoie 8 comme prévu. Mais le problème reste dans KSP, et lorsque je lance evhz à partir de https://github.com/ian-kelling/evhz , il enregistre toujours un taux d'interrogation de 1000hz.

Éventuellement pertinent:

  • Je suis sur un ordinateur portable. Le touchpad n'utilise pas usbhid et vote à 125hz selon evhz. Cela ne pose aucun problème de faire un panoramique avec le clic droit dans KSP.
  • Xfce 4.12 (essayé avec composition activée et désactivée, aucun changement)
  • Pilotes Nvidia 346.59
  • Les performances dans KSP sont autrement conformes aux attentes, en fonction du matériel de mon ordinateur portable
  • Les paquets (y compris le noyau) sont tous en stock
  • La souris est branchée sur un port USB 3.0
3
snafu109

J'ai trouvé une solution à ce problème.

J'ai installé Windows sur une machine virtuelle, connecté le périphérique de souris USB à la machine virtuelle, puis tracé le trafic USB avec Wireshark et isolé la commande de contrôle utilisée par le pilote Logitech officiel pour définir la fréquence d'interrogation. (Cela m'a été très utile pour me diriger dans la bonne direction: https://unix.stackexchange.com/questions/138742/how-to-dump-usb-traffic )

Ce code magique Ruby (doit être exécuté en tant que root ou par un utilisateur autorisé à écrire sur /dev/hidraw1) définit le taux d'interrogation sur 125Hz sur ma souris:

#!/bin/Ruby
HIDIOCSFEATURE = 0xC0024806

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

/dev/hidraw1 est le périphérique hidraw de ma souris. Ce chemin peut être différent selon le nombre de périphériques que vous avez connectés à votre ordinateur.

La séquence 0xC0024806 est la valeur ioctl requise pour "Envoyer un rapport de fonctionnalité" au périphérique hidraw. Je ne me souviens pas exactement comment j'ai obtenu cette valeur, malheureusement, et ce n'est peut-être pas techniquement correct à 100%. Travaille pour moi si!

La séquence "\x20\x03" correspond aux données que le pilote a envoyées dans le rapport de fonctionnalité à la souris. 20 semble être la valeur hexadécimale utilisée pour identifier une demande de modification d'interrogation, et 03 la règle sur 125hz. 02 le règle sur 250hz, 01 sur 500Hz et 00 sur 1000hz.

BE WARNED : Cela fonctionne pour moi sur une souris Logitech G400. Je pense qu’il n’ya qu’une variante matérielle de cette souris, elle devrait donc être sûre sur ce modèle. Elle n'a été testée sur aucun autre modèle et ne fonctionnera sur aucune souris Logitech utilisant le protocole HID ++ pour communiquer (cela inclut de nombreuses souris plus récentes et tous les modèles sans fil utilisant le récepteur Unifying).

Je savais aussi à peine ce que je faisais et tout ce que j'ai fait pour le comprendre a été appris pour la première fois, y compris cette phrase: Caveat lector (lecteur attention)!

3
snafu109

J'ai eu le même problème avec un Logitech G302.

problème de décalage de souris d'annihilation planétaire

Malheureusement, il semble que la souris Logitech ne prend pas en charge la réduction du taux d'interrogation de la souris.

Mais si cela est vraiment nécessaire, vous pouvez le réduire matériellement en connectant votre souris à un port USB plus lent.

En utilisant evhz , j’ai remarqué que le taux d’interrogation de la souris avait été réduit de 1000Hz à 250Hz avec un port USB différent.

1
leszek.hanusz