Change mouse sensitivity (not acceleration) in Linux
When I got a trackball, I wanted to have a precision/accurate mouse mode that I could toggle on. In my search, all I could find were settings to change the acceleration, which is not the same thing.
In the end, I stumbled upon the
Coordinate Transformation Matrix property of
xinput, which can be abused to get the results we want.
I don’t fully understand how it works, but I assume we transform the inputs from mouse to a matrix of a larger/smaller size so the input represents smaller/larger cursor movements on screen. At least, that’s how it seems to work.
To set this property, use:
ctmVal=2.5 xinput set-prop "pointer:<replace with your device>" "Coordinate Transformation Matrix" 1, 0, 0, 0, 1, 0, 0, 0, $ctmVal
The larger you make the
ctmVal variable, the more precision (smaller cursor
movement for larger mouse movement) you will get.
You can see the script I use to set this in my dotfiles.
Side note: you need to replace that
<replace with your device> placeholder
with the name of your device from
xinput list. As an example, I use
ELECOM TrackBall Mouse DEFT Pro TrackBall here.
This script runs
2.5 as my “normal” value. When coupled with a high-ish
acceleration, it suits me well. The script can also toggle to a super-precision
mode (value of
10) using a button bound on the trackball.
The only known flaw with this system is sometimes the cursor jumps around the screen. To replicate this bug:
- use i3wm
- make sure you have two monitors
- place your cursor anywhere on screen A that is not the exact centre
- jump to another i3 workspace on screen B
- jump back to the workspace on screen A
- you’ll see i3 sets your cursor to the exact centre of screen A
- move your cursor
- the cursor will jump to where you last left it
It’s a small thing and it doesn’t bother me.