Mouse Sensitivity – How to Decrease Beyond Settings Limit

16.0418.04mouse

I have a generic gaming mouse with a minimum dpi of 1000dpi. I am using a 0.5 multiplier on windows, but I'm having trouble trying to do the same on Ubuntu. The minimum speed in the settings app is just the same as a 1x multiplier, so I need to lower it beyond the default minimum.

I have disabled mouse acceleration by creating a 90-mouse.config file in /usr/share/x11/xorg-conf.d but this only disables acceleration. I want to decrease the sensitivity by half. All of the solutions I've seen so far didn't work for me. Any ideas? Thanks!

Best Answer

THIS DOESN'T WORK ON 18.04. Read update below.

In the end I figured this out on my own. So this is what you have to do if you encounter the same problem. Any suggestions to further refine this process is welcome.

1 - Create a config file

sudo nano /usr/share/X11/xorg.conf.d/90-mouse.conf

2 - Paste this inside:

Section "InputClass"
    Identifier "mouse"
    MatchIsPointer "on"
    Option "AccelerationProfile" "-1"
    Option "ConstantDeceleration" "2"
EndSection

Save with Ctrl+O and exit with Ctrl+X.

AccelerationProfile Disables acceleration, so if you like having acceleration on change that to "0".

ConstantDeceleration is the factor by which you wish to decrease the sensitivity. In my case I had a 1000dpi mouse and I wanted to have 500dpi sensitivity so I decelerated it by a factor of 2.

UPDATE FOR 18.04

On newer releases we use libinput props, and the way to increase or decrease pointer speed is by using the transformation matrix, with a command that looks like this:

xinput set-prop 10 144 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000

The "10" in the command stands for the pointer device ID, which you get by using xinput list, and the 144 is the matrix prop ID, which you get by using xinput list-props 10 (changing 10 by the device ID you want to change)

To decrease speed, you must change the first and second "1.000000" values in the matrix, corresponding to x and y axis speed respectively. They work as multiplies, so i.e setting those values to 2.000000 will cause your pointer to move twice as fast by means of point skipping. Changing it to 0.000000 will cause your pointer to not move at all.