Zatímco u normální myši je akcelerace přijemná, protože dosáhneme na celou obrazovku a přitom se dá kurzor umístit celkem přesně, tak u robotické myši je dost nevýhodná, protože chybí zpětná vazba a velice záleží na délce pohybů, pauzách mezi nimi a i jejich řazení.
Myš umožňuje pohyb jen o +/- 127 v každém směru v jedné akci, přitom přes celou obrazovku to může být i několik tisíc – jednoduché řešení je si napsat funkci, která delší požadovaný pohyb rozloží na několik menších, které SW zvládne.
Nejjednodušší funkce vezme cíl, ořízne nějakou hodnotou (127, 100, …), udělá tento pohyb a odečte od cíle, takto pokračuje, dokud nezbude 0,0 a má hotovo.
Problém je, že s výjimkou pohybu po osách a úhlopříčkách se cesta tam a zpátky liší a kvůli urychlení se nevrátíte do počátečního bodu. Nemluvě o tom, že skládání pohybů obecně vede k dost nepředvidatelným výsledkům – nejde například jednoduše proskákat a proklikat pravoúhlou síť tlačítek. Myš totiž neumožňuje zjištění aktuální polohy, ani pohyb na absolutní souřadnice.
Řešením je akceleraci vypnout, ale jen pro robotickou myš (ta si bude muset jet lineární rychlostí, tedy víc úseků, ale zato budou přesně dlouhé), normální nechat pohodlnou, akcelerovanou.
Nejdřív je potřeba zjistit, jak se nám robomyš hlásí v systému:
xinput --list
- Virtual core pointer id=2 [master pointer (3)]
- - Virtual core XTEST pointer id=4 [slave pointer (2)]
- - SONiX USB DEVICE Consumer Control id=11 [slave pointer (2)]
- - SONiX USB DEVICE Mouse id=12 [slave pointer (2)]
- - BY Tech Usb Gaming Keyboard Consumer Control id=15 [slave pointer (2)]
- - BY Tech Usb Gaming Keyboard Mouse id=17 [slave pointer (2)]
- - USB Optical Mouse id=20 [slave pointer (2)]
- - Arduino LLC Arduino Micro Mouse id=19 [slave pointer (2)]
- Virtual core keyboard id=3 [master keyboard (2)]
- Virtual core XTEST keyboard id=5 [slave keyboard (3)]
- Power Button id=6 [slave keyboard (3)]
- Power Button id=7 [slave keyboard (3)]
- SONiX USB DEVICE id=8 [slave keyboard (3)]
- SONiX USB DEVICE Keyboard id=9 [slave keyboard (3)]
- SONiX USB DEVICE System Control id=10 [slave keyboard (3)]
- BY Tech Usb Gaming Keyboard id=13 [slave keyboard (3)]
- BY Tech Usb Gaming Keyboard System Control id=14 [slave keyboard (3)]
- BY Tech Usb Gaming Keyboard id=16 [slave keyboard (3)]
- SONiX USB DEVICE Consumer Control id=21 [slave keyboard (3)]
- BY Tech Usb Gaming Keyboard Consumer Control id=22 [slave keyboard (3)]
- Arduino LLC Arduino Micro Keyboard id=18 [slave keyboard (3)]
Myš je zjevně Arduino LLC Arduino Micro Mouse a má id=19. V názvu je první slovo do mezery Vendor, zbytek Produkt, takže vytvoříme soubor /etc/X11/xorg.conf.d/mouse-acceleration.conf, který ji akceleraci zakáže a restartujeme Xka
# Stop acceleration on mouse
Section "InputClass"
Identifier "My Mouse"
MatchIsPointer "yes"
MatchVendor "Arduino"
MatchProduct "LLC Arduino Micro Mouse"
Option "AccelerationProfile" "-1"
Option "AccelerationScheme" "none"
Option "AccelSpeed" "-1"
EndSection