Wystarczy zmusić wskaźnik do pomijania pikseli, oto jak:
Pierwsza lista urządzeń wejściowych:
$ xinput list
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ PixArt USB Optical Mouse id=10 [slave pointer (2)]
⎜ ↳ ETPS/2 Elantech Touchpad id=15 [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)]
↳ Video Bus id=7 [slave keyboard (3)]
↳ Sleep Button id=8 [slave keyboard (3)]
↳ USB2.0 UVC 2M WebCam id=9 [slave keyboard (3)]
↳ Asus Laptop extra buttons id=13 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=14 [slave keyboard (3)]
↳ USB Keyboard id=11 [slave keyboard (3)]
↳ USB Keyboard id=12 [slave keyboard (3)]
W przykładzie widzimy, że identyfikator myszy to 10. Następnie wypisz jego właściwości:
$ xinput list-props 10
Device 'PixArt USB Optical Mouse':
Device Enabled (140): 1
Coordinate Transformation Matrix (142): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
Device Accel Profile (265): 0
Device Accel Constant Deceleration (266): 1.000000
Device Accel Adaptive Deceleration (267): 1.000000
Device Accel Velocity Scaling (268): 10.000000
Device Product ID (260): 2362, 9488
Device Node (261): "/dev/input/event5"
Evdev Axis Inversion (269): 0, 0
Evdev Axes Swap (271): 0
Axis Labels (272): "Rel X" (150), "Rel Y" (151), "Rel Vert Wheel" (264)
Button Labels (273): "Button Left" (143), "Button Middle" (144), "Button Right" (145), "Button Wheel Up" (146), "Button Wheel Down" (147), "Button Horiz Wheel Left" (148), "Button Horiz Wheel Right" (149)
Evdev Middle Button Emulation (274): 0
Evdev Middle Button Timeout (275): 50
Evdev Third Button Emulation (276): 0
Evdev Third Button Emulation Timeout (277): 1000
Evdev Third Button Emulation Button (278): 3
Evdev Third Button Emulation Threshold (279): 20
Evdev Wheel Emulation (280): 0
Evdev Wheel Emulation Axes (281): 0, 0, 4, 5
Evdev Wheel Emulation Inertia (282): 10
Evdev Wheel Emulation Timeout (283): 200
Evdev Wheel Emulation Button (284): 4
Evdev Drag Lock Buttons (285): 0
Chcemy «Matrycy transformacji współrzędnych», pamiętajmy jej nr 142.
Zmieniając tę właściwość, możemy zwiększyć prędkość wskaźnika. Jest to macierz transformacji używana do obliczania ruchu wskaźnika . Z linku:
Domyślnie CTM dla każdego urządzenia wejściowego w X jest macierzą tożsamości. Na przykład załóżmy, że dotykasz ekranu dotykowego w punkcie (400, 197) na ekranie:
⎡ 1 0 0 ⎤ ⎡ 400 ⎤ ⎡ 400 ⎤
⎜ 0 1 0 ⎥ · ⎜ 197 ⎥ = ⎜ 197 ⎥
⎣ 0 0 1 ⎦ ⎣ 1 ⎦ ⎣ 1 ⎦
Współrzędne X i Y zdarzenia urządzenia są wprowadzane do drugiej macierzy obliczeń. Wynik obliczeń polega na odwzorowaniu współrzędnych X i Y zdarzenia na ekran. Jak pokazano, macierz tożsamości odwzorowuje współrzędne urządzenia na współrzędne ekranu bez żadnych zmian.
Tak, chcemy zwiększyć wartości zgodnie z X i Y , zwiększając w ten sposób szybkość wskaźnika. Przykład z mojego komputera:
$ xinput set-prop 10 142 2.400000, 0.000000, 0.000000, 0.000000, 2.400000, 0.000000, 0.000000, 0.000000, 1.000000
Jest xinput set-prop <device-id> <property-number> <property-values>
. Zagraj w to, dopóki nie znajdziesz odpowiedniego. Uwaga: nie zmieniaj ostatniej wartości macierzy. To był mój błąd, kiedy próbowałem go dostać do pracy - w tym przypadku po prostu nie zobaczysz żadnej różnicy.
Podziękowania: Jestem wdzięczny Simonowi Thumowi z listy mailingowej Xorg, on był tym, który dał wskazówkę dotyczącą matrycy.
UPD : zauważ, że niektóre gry Windows działające z Wine mogą mieć dziwne zachowanie wskaźnika (np. Zauważyłem, że cel w starym Counter Strike 1.6 spada, dopóki nie spojrzy na podłogę, niezależnie od tego, jak poruszasz myszą) , w tym przypadku po prostu zresetuj x i y CTM do 1 przed uruchomieniem gry.