Paksa saja pointer untuk melewati piksel, begini caranya:
Perangkat input daftar pertama:
$ 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)]
Pada contoh ini kita melihat id mouse adalah 10. Selanjutnya daftar propertinya:
$ 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
Kami ingin «Matriks Transformasi Koordinat», ingat №142-nya.
Dengan mengubah properti ini, kami dapat meningkatkan kecepatan penunjuk. Ini adalah matriks transformasi, yang digunakan untuk menghitung gerakan pointer . Dari tautan:
Secara default, CTM untuk setiap perangkat input dalam X adalah matriks identitas. Sebagai contoh, katakanlah Anda menyentuh layar sentuh pada titik (400, 197) pada layar:
⎡ 1 0 0 ⎤ ⎡ 400 ⎤ ⎡ 400 ⎤
⎜ 0 1 0 ⎥ · ⎜ 197 ⎥ = ⎜ 197 ⎥
⎣ 0 0 1 ⎦ ⎣ 1 ⎦ ⎣ 1 ⎦
Koordinat X dan Y dari kejadian perangkat adalah input dalam matriks kedua dari perhitungan. Hasil perhitungan adalah di mana koordinat X dan Y acara dipetakan ke layar. Seperti yang ditunjukkan, matriks identitas memetakan koordinat perangkat ke koordinat layar tanpa perubahan apa pun.
Jadi, kami ingin meningkatkan nilai sesuai dengan x dan y , sehingga meningkatkan kecepatan penunjuk. Contoh dari PC saya:
$ xinput set-prop 10 142 2.400000, 0.000000, 0.000000, 0.000000, 2.400000, 0.000000, 0.000000, 0.000000, 1.000000
Itu xinput set-prop <device-id> <property-number> <property-values>
. Mainkan sedikit dengan ini sampai Anda menemukan yang sesuai. Catatan: jangan mengubah nilai terakhir dari matriks. Itu kesalahan saya ketika saya mencoba untuk mendapatkan pekerjaan - dalam hal ini Anda tidak akan melihat perbedaan.
Ucapan terima kasih: Saya berterima kasih kepada Simon Thum dari milis xorg, dia adalah orang yang memberi petunjuk tentang matriks.
UPD : perhatikan, beberapa game Windows yang berjalan dengan Wine mungkin memiliki perilaku pointer aneh (mis. Perhatikan, bahwa tujuan di Counter Strike 1.6 lama menurun, hingga menatap lantai, tidak peduli bagaimana Anda menggerakkan mouse) , dalam hal ini hanya reset x dan y dari CTM ke 1 sebelum menjalankan game.