How to fix microsoft mouse scrolling speed on ubuntu

Open a prompt

List your devices, pay attention to the id from the device you want to fix, if there are 2 of them, it's ok.

$ xinput list

Mine was 9 and 10

⎡ Virtual core pointer                      id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ Microsoft Microsoft® 2.4GHz Transceiver v8.0  id=9    [slave  pointer  (2)]
⎜   ↳ Microsoft Microsoft® 2.4GHz Transceiver v8.0  id=10   [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)]
    ↳ Power Button                              id=7    [slave  keyboard (3)]
    ↳ Microsoft Microsoft® 2.4GHz Transceiver v8.0  id=8    [slave  keyboard (3)]

Now do this, x being your id

$ xinput list-props x | grep 'Scrolling Distance'
Evdev Scrolling Distance (255): 1, 1, 1

Finally, the trick is to find your ideal values, mine were 10, 10, 10

$ xinput set-prop x 'Evdev Scrolling Distance' 10, 10, 10

To permanently set the change (source):

A hidden file in your directory is ".profile" (Ctrl+H to see hidden files) Double click on it and open it. Copy paste the previous command at the end. That's it!

P.S. to apply the same command for all users you can edit the file /etc/profile (not an hidden file).

You are now good to go!


It's a hack, but un-/re-pluggin the USB transceiver lets Ubuntu properly set the resolution and you get a very reasonable scroll speed. I've been using this trick on every Ubuntu release for the last few years. I rarely reboot my machine so it's the easiest solution for me :)

Perhaps someone can explain why this works.


A solution that works for me for the wireless mouse scroll speed problem:

The order when enabling Linux modules is very important.

Add a file named /etc/modprobe.d/mshid.conf containing:

install hid-generic /sbin/modprobe hid ; /sbin/modprobe usbhid ; /sbin/modprobe -i hid-generic ; true

This ensures the correct loading order and the scroll speed is then normal. This is what happens in the background when the system is on, when removing and adding back the transceiver. This works in other distributions than Ubuntu. A reboot is required for this to work.