Thursday, April 25, 2013

How to Slow Down your Mouse Pointer

Quite frankly, this post shouldn't even exist. Every operating system, except some recent Linux flavors, has always had a mouse speed option so that you can speed up or slow down your mouse. However, the recent KDE's (and from reading a bunch of forum posts, it looks like Gnome may also be affected) do not have this option.

Instead there is an option for "Mouse Acceleration" in the KDE Control Panel. As I understand it, once your mouse moves more than a certain number of pixels (which is also adjustable), the acceleration kicks in and speeds up the mouse. The idea is that normally, your mouse moves at a 1-to-1 ratio, which is usually too slow for large screens, but it is good for clicking on icons, selecting text, and other fine detail work. Once your mouse moves more than the threshold number of pixels, acceleration kicks in and now it moves at a faster 2-to-1  ratio (or whatever you set it to) and you can quickly move from one side of the screen to the other.

But since there is no velocity (or speed or resolution) control, if your mouse doesn't move at the right speed in the 1-to-1 mode, what you have to do is turn the threshold down to 1 pixel (so it's always on) and then adjust the acceleration. The problem is that if you have a high DPI mouse (mine is 5700dpi), KDE will let you set an acceleration down to a 0.1-to-1 ratio, but the setting has no effect whatsoever.

There are quite a few forums posts out there with "solutions" that don't work. One involves modifying xorg.conf, which doesn't even exist on most systems anymore thanks to auto-detection and it requires root permissions. But even so, I couldn't make it work. Another suggestion is to use xset, but again, I made no headway.

The solution is to use xinput. Open up a console and just run xinput with no options:


You'll see a list of all of the input devices on your system, along with their ID's. My mouse showed up with two different ID's, so if this happens to you, here's how to figure out which one to change. Execute the following for each ID:

xinput set-prop ID 'Evdev Axes Swap' 1

where ID is the numeric ID you want to try. Move the mouse after each time you run the command. When pushing the mouse up makes the pointer move left, you've found the right one. Reset the axes swap using:

xinput set-prop ID 'Evdev Axes Swap' 0

Now, you need to set the deceleration. Do this with:

xinput set-prop ID 'Device Accel Constant Deceleration' N.N

where N.N is the slowdown to apply. 1.0 is the minimum (fastest) and you can go as large as you like. For me, 1.5 was just about perfect. Try several values until you find one that you like.

Finally, you need to make sure this command runs every time you log in, so add it to the end of ~/.profile . Note that this will only run after you log in, so if you use a log in screen, the mouse pointer speed will be unaffected there.