Using the Motorola 68000 CPU, it was a very popular. Supported multiple screens for the absolute movement of a mouse cursor. GIS viewer control which allows developers to create interactive mapping application on the web browser.
So this has been bugging the hell out of me since I swapped my surface book 2 over to linux months ago. I have been through many distros, display managers, desktop environments, etc. and it has all been the same thing: I am unable to figure out how to COMPLETELY disable mouse acceleration.
(- sorry if i sound heated, this has been frustrating lol)
Now, what do I mean when I say that? I mean that I want my actions on the touchpad to translate to what I see on the screen in such a way that if I move my finger on the touchpad from the left side of the touchpad to the right side of the touchpad, I want my cursor on the screen to move the same amount of distance regardless of whether I do it at 1mm/s or 1000mm/s.
I was able to have this functionality in windows, so it is mind boggling to me that I have been searching for so long as to how to do it in Linux that I cannot yet find a solution. Here's what I've been able to figure out so far:
- xinput and libinput actually work really well together, wayland isn't absolutely necessary (yet)
- using libinput gestures gets me all the gesture functionality I had in windows, if not more
- libinput sensitivity is made for pressure sensitive touchpads, not the glass ones like the Surface books or macs
- as it does not detect pressure, this value is useless
- there is no acceleration profile for my libinput device (listed as "none")
- I have tried forcing libinput to use the "flat" profile with a .conf file (similar to the ones in tutorials if you search the issue)
- I have set the xinput value "libinput Accel speed" to every value between -1 and 1
- I have modified the "Coordinate Transformation Matrix" from [1 0 0 0 1 0 0 0 1] to [1 0 0 0 1 0 0 0 0.05] and this is an acceptable means of altering the actual speed (velocity) of the cursor
The "acceleration profile" of either flat or adaptive insinuates that even setting the acceleration to its lowest value will still apply some amount of acceleration, as it is only a constant value, while adaptive will let that acceleration value change. This is the part that is driving me insane- PLEASE tell me it is possible to somehow get rid of ANY acceleration being applied to the cursomouse/whateveritis?? I have motor coordination issues as it is, and this just makes it so much harder to use my laptop.
Here's my stuff:
libinput stuff (here are the relevant ones):
:~$ libinput list-devices Device: Microsoft Surface Keyboard Mouse Kernel: /dev/input/event3 Group: 3 Seat: seat0, default Capabilities: pointer Tap-to-click: n/a Tap-and-drag: n/a Tap drag lock: n/a Left-handed: disabled Nat.scrolling: disabled Middle emulation: disabled Calibration: n/a Scroll methods: button Click methods: none Disable-w-typing: n/a Accel profiles: flat *adaptive Rotation: n/a Device: Microsoft Surface Keyboard Consumer Control Kernel: /dev/input/event4 Group: 3 Seat: seat0, default Capabilities: keyboard pointer Tap-to-click: n/a Tap-and-drag: n/a Tap drag lock: n/a Left-handed: n/a Nat.scrolling: disabled Middle emulation: n/a Calibration: n/a Scroll methods: none Click methods: none Disable-w-typing: n/a Accel profiles: n/a Rotation: n/a Device: Microsoft Surface Keyboard Touchpad Kernel: /dev/input/event6 Group: 3 Seat: seat0, default Size: 101x66mm Capabilities: pointer gesture Tap-to-click: disabled Tap-and-drag: enabled Tap drag lock: disabled Left-handed: disabled Nat.scrolling: disabled Middle emulation: disabled Calibration: n/a Scroll methods: *two-finger edge Click methods: *button-areas clickfinger Disable-w-typing: enabled Accel profiles: none Rotation: n/a
xinput (whole output):
:~$ xinput ⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎜ ↳ Microsoft Surface Keyboard Mouse id=8 [slave pointer (2)] ⎜ ↳ Microsoft Surface Keyboard Consumer Control id=9 [slave pointer (2)] ⎜ ↳ Microsoft Surface Keyboard Touchpad id=10 [slave pointer (2)] ⎜ ↳ IPTS Touch id=13 [slave pointer (2)] ⎣ Virtual core keyboard id=3 [master keyboard (2)] ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)] ↳ Video Bus id=6 [slave keyboard (3)] ↳ Microsoft Surface Keyboard id=7 [slave keyboard (3)] ↳ gpio-keys id=11 [slave keyboard (3)] ↳ gpio-keys id=12 [slave keyboard (3)] ↳ IPTS Stylus id=14 [slave keyboard (3)] ↳ Microsoft Surface Keyboard Consumer Control id=15 [slave keyboard (3)]
and then here are the individual device configs:
:~$ xinput list-props 2 Device 'Virtual core pointer': Device Enabled (179): 1 Coordinate Transformation Matrix (181): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000 :~$ xinput list-props 4 Device 'Virtual core XTEST pointer': Device Enabled (179): 1 Coordinate Transformation Matrix (181): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000 XTEST Device (298): 1 :~$ xinput list-props 8 Device 'Microsoft Surface Keyboard Mouse': Device Enabled (179): 1 Coordinate Transformation Matrix (181): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000 libinput Natural Scrolling Enabled (314): 0 libinput Natural Scrolling Enabled Default (315): 0 libinput Scroll Methods Available (316): 0, 0, 1 libinput Scroll Method Enabled (317): 0, 0, 0 libinput Scroll Method Enabled Default (318): 0, 0, 0 libinput Button Scrolling Button (319): 2 libinput Button Scrolling Button Default (320): 2 libinput Middle Emulation Enabled (321): 0 libinput Middle Emulation Enabled Default (322): 0 libinput Accel Speed (323): 0.057554 libinput Accel Speed Default (324): 0.000000 libinput Accel Profiles Available (325): 1, 1 libinput Accel Profile Enabled (326): 1, 0 libinput Accel Profile Enabled Default (327): 1, 0 libinput Left Handed Enabled (328): 0 libinput Left Handed Enabled Default (329): 0 libinput Send Events Modes Available (299): 1, 0 libinput Send Events Mode Enabled (300): 0, 0 libinput Send Events Mode Enabled Default (301): 0, 0 Device Node (302): "/dev/input/event3" Device Product ID (303): 1118, 2338 libinput Drag Lock Buttons (330): libinput Horizontal Scroll Enabled (331): 1 :~$ xinput list-props 9 Device 'Microsoft Surface Keyboard Consumer Control': Device Enabled (179): 1 Coordinate Transformation Matrix (181): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000 libinput Natural Scrolling Enabled (314): 0 libinput Natural Scrolling Enabled Default (315): 0 libinput Send Events Modes Available (299): 1, 0 libinput Send Events Mode Enabled (300): 0, 0 libinput Send Events Mode Enabled Default (301): 0, 0 Device Node (302): "/dev/input/event4" Device Product ID (303): 1118, 2338 libinput Drag Lock Buttons (330): libinput Horizontal Scroll Enabled (331): 1 :~$ xinput list-props 10 Device 'Microsoft Surface Keyboard Touchpad': Device Enabled (179): 1 Coordinate Transformation Matrix (181): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 0.050000 libinput Tapping Enabled (332): 1 libinput Tapping Enabled Default (333): 0 libinput Tapping Drag Enabled (334): 1 libinput Tapping Drag Enabled Default (335): 1 libinput Tapping Drag Lock Enabled (336): 0 libinput Tapping Drag Lock Enabled Default (337): 0 libinput Tapping Button Mapping Enabled (338): 1, 0 libinput Tapping Button Mapping Default (339): 1, 0 libinput Natural Scrolling Enabled (314): 0 libinput Natural Scrolling Enabled Default (315): 0 libinput Disable While Typing Enabled (340): 0 libinput Disable While Typing Enabled Default (341): 1 libinput Scroll Methods Available (316): 1, 1, 0 libinput Scroll Method Enabled (317): 1, 0, 0 libinput Scroll Method Enabled Default (318): 1, 0, 0 libinput Click Methods Available (342): 1, 1 libinput Click Method Enabled (343): 0, 1 libinput Click Method Enabled Default (344): 1, 0 libinput Middle Emulation Enabled (321): 0 libinput Middle Emulation Enabled Default (322): 0 libinput Accel Speed (323): -1.000000 libinput Accel Speed Default (324): 0.000000 libinput Left Handed Enabled (328): 0 libinput Left Handed Enabled Default (329): 0 libinput Send Events Modes Available (299): 1, 1 libinput Send Events Mode Enabled (300): 0, 0 libinput Send Events Mode Enabled Default (301): 0, 0 Device Node (302): "/dev/input/event6" Device Product ID (303): 1118, 2338 libinput Drag Lock Buttons (330): libinput Horizontal Scroll Enabled (331): 1 :~$ xinput list-props 13 Device 'IPTS Touch': Device Enabled (179): 1 Coordinate Transformation Matrix (181): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000 libinput Calibration Matrix (347): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000 libinput Calibration Matrix Default (348): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000 libinput Send Events Modes Available (299): 1, 0 libinput Send Events Mode Enabled (300): 0, 0 libinput Send Events Mode Enabled Default (301): 0, 0 Device Node (302): "/dev/input/event20" Device Product ID (303): 1118, 32
And then finally, the config files I have listed inside of /usshare/X11/xorg.conf.d/
:~$ cat /usshare/X11/xorg.conf.d/40-libinput.conf Section "InputClass" Identifier "libinput pointer catchall" MatchIsPointer "on" MatchDevicePath "/dev/input/event*" Driver "libinput" EndSection Section "InputClass" Identifier "libinput keyboard catchall" MatchIsKeyboard "on" MatchDevicePath "/dev/input/event*" Driver "libinput" EndSection Section "InputClass" Identifier "libinput touchpad catchall" MatchIsTouchpad "on" MatchDevicePath "/dev/input/event*" Driver "libinput" EndSection Section "InputClass" Identifier "libinput touchscreen catchall" MatchIsTouchscreen "on" MatchDevicePath "/dev/input/event*" Driver "libinput" EndSection Section "InputClass" Identifier "libinput tablet catchall" MatchIsTablet "on" MatchDevicePath "/dev/input/event*" Driver "libinput" EndSection
This one I added based on tutorials I have read:
:~$ cat /usshare/X11/xorg.conf.d/50-mouse-accel.conf Section "Input Class" Identifier "My Touchpad" Driver "libinput" MatchIsPointer "yes" Option "AccelProfile" "flat" Option "AccelSpeed" "-1" EndSection
I don't think this one is relevant but I could be wrong:
:~$ cat /usshare/X11/xorg.conf.d/70-wacom.conf # Some of the below input classes appear 3x times, once for each of # "tablet", "touchscreen", and "touchpad" to ensure that the Wacom # driver is not accidentally bound to other types of hardware that # Wacom has made which are not handled by the wacom driver (e.g the # Wacom Bluetooth Keyboard) # # https://sourceforge.net/p/linuxwacom/bugs/294/ Section "InputClass" Identifier "Wacom USB tablet class" MatchUSBID "056a:*" MatchDevicePath "/dev/input/event*" MatchIsTablet "true" Driver "wacom" EndSection Section "InputClass" Identifier "Wacom USB touchscreen class" MatchUSBID "056a:*" MatchDevicePath "/dev/input/event*" MatchIsTouchscreen "true" Driver "wacom" EndSection Section "InputClass" Identifier "Wacom USB touchpad class" MatchUSBID "056a:*" MatchDevicePath "/dev/input/event*" MatchIsTouchpad "true" Driver "wacom" EndSection Section "InputClass" Identifier "Wacom tablet class" MatchProduct "Wacom|WACOM|PTK-540WL|ISD-V4" MatchDevicePath "/dev/input/event*" MatchIsTablet "true" Driver "wacom" EndSection Section "InputClass" Identifier "Wacom touchscreen class" MatchProduct "Wacom|WACOM|PTK-540WL|ISD-V4" MatchDevicePath "/dev/input/event*" MatchIsTouchscreen "true" Driver "wacom" EndSection Section "InputClass" Identifier "Wacom touchpad class" MatchProduct "Wacom|WACOM|PTK-540WL|ISD-V4" MatchDevicePath "/dev/input/event*" MatchIsTouchpad "true" Driver "wacom" EndSection # Serial Wacom devices should always be one of tablet, touchscreen, or # touchpad so we can safely get away with just one match section in # these cases Section "InputClass" Identifier "Wacom PnP device class" MatchPnPID "WACf*|WCOM*|WACM*|FUJ02e5|FUJ02e7|FUJ02e9" MatchDevicePath "/dev/input/event*" Driver "wacom" EndSection Section "InputClass" Identifier "Wacom serial class" MatchProduct "Serial Wacom Tablet" Driver "wacom" EndSection Section "InputClass" Identifier "Wacom serial class identifiers" MatchProduct "WACf|FUJ02e5|FUJ02e7|FUJ02e9" Driver "wacom" EndSection # Hanwang tablets Section "InputClass" Identifier "Hanwang class" MatchProduct "Hanwang" MatchDevicePath "/dev/input/event*" Driver "wacom" EndSection # Waltop tablets Section "InputClass" Identifier "Waltop class" MatchProduct "WALTOP" MatchIsTablet "on" MatchDevicePath "/dev/input/event*" Driver "wacom" EndSection # N-Trig Duosense Electromagnetic Digitizer Section "InputClass" Identifier "Wacom N-Trig class" MatchProduct "HID 1b96:0001|N-Trig Pen|N-Trig DuoSense" MatchDevicePath "/dev/input/event*" Driver "wacom" Option "Button2" "3" EndSection # Dell Canvas 27 (touch part is an Advanced Silicon, pen part a Wacom) Section "InputClass" Identifier "Dell Canvas 27 Touch" MatchUSBID "2575:0204" MatchDevicePath "/dev/input/event*" MatchIsTouchscreen "true" Driver "wacom" EndSection # Surface Go Section "InputClass" Identifier "SurfaceGo Touch" MatchProduct "ELAN9038:00 04F3:261A" MatchDevicePath "/dev/input/event*" Driver "wacom" EndSection # Nuvision Solo 10 Draw (Supports Surface Pens) Section "InputClass" Identifier "Nuvision Solo 10 Draw" MatchProduct "04F3200A:00 04F3:22F7" MatchDevicePath "/dev/input/event*" Driver "wacom" EndSection
I also don't know if this one is relevant but I'm sharing it nonetheless:
:~$ cat /usshare/X11/xorg.conf.d/10-quirks.conf # Collection of quirks and blacklist/whitelists for specific devices. # Accelerometer device, posts data through ABS_X/ABS_Y, making X unusable # http://bugs.freedesktop.org/show_bug.cgi?id=22442 Section "InputClass" Identifier "ThinkPad HDAPS accelerometer blacklist" MatchProduct "ThinkPad HDAPS accelerometer data" Option "Ignore" "on" EndSection # https://bugzilla.redhat.com/show_bug.cgi?id=523914 # Mouse does not move in PV Xen guest # Explicitly tell evdev to not ignore the absolute axes. Section "InputClass" Identifier "Xen Virtual Pointer axis blacklist" MatchProduct "Xen Virtual Pointer" Option "IgnoreAbsoluteAxes" "off" Option "IgnoreRelativeAxes" "off" EndSection # https://bugs.freedesktop.org/show_bug.cgi?id=55867 # Bug 55867 - Doesn't know how to tag XI_TRACKBALL Section "InputClass" Identifier "Tag trackballs as XI_TRACKBALL" MatchProduct "trackball" MatchDriver "evdev" Option "TypeName" "TRACKBALL" EndSection # https://bugs.freedesktop.org/show_bug.cgi?id=62831 # Bug 62831 - Mionix Naos 5000 mouse detected incorrectly Section "InputClass" Identifier "Tag Mionix Naos 5000 mouse XI_MOUSE" MatchProduct "La-VIEW Technology Naos 5000 Mouse" MatchDriver "evdev" Option "TypeName" "MOUSE" EndSection
So yeah, sorry this is so long, but I wanted to get as much info as to all the troubleshooting I've done so far with this. Really, any help at this point would be so freaking awesome as this has been a huge hamper for me. I have read pretty much everything I could find on the arch wiki that isn't buried somewhere abstract, and I have poked everything I felt safe to poke (and some not so much, use backups kids). Is there something I can install to get rid of acceleration? I'll try anything at this point. Thank you so freaking much if you have read this far, it means a lot that you're even willing to read it all.
Cheers,