12

This is the Linux version of my Disabling mouse acceleration in Mac OS X question. Hopefully I'll get an answer this time.

I am tired of mouse acceleration and want to have a completely linear mouse response. This is easily achievable through any of the 5 or so methods (some subtly implied) on the X.Org wiki page on pointer acceleration. However, they also disable velocity scaling.

I don't want a 1:1 mapping between device and screen coordinates. I want a 1:N mapping where N is a constant. Any ideas?

3 Answers 3

16

The only way I have found that works (and I have only tried on Ubuntu) is with the xinput command.

First you have to identify the device number for the mouse you want to change:

# xinput list
â¡ Virtual core pointer                         id=2    [master pointer  (3)]
â   â³ Virtual core XTEST pointer               id=4    [slave  pointer  (2)]
â   â³ Microsoft Microsoft 5-Button Mouse with IntelliEye(TM)   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)]
    â³ CHICONY USB Keyboard                     id=8    [slave  keyboard (3)]
    â³ CHICONY USB Keyboard                     id=9    [slave  keyboard (3)]
    â³ IR-receiver inside an USB DVB receiver   id=11   [slave  keyboard (3)]

Now, in this example I will be playing with my Microsoft mouse. id=10

Now let's see what properties this device can handle:

# xinput list-props 10
Device 'Microsoft Microsoft 5-Button Mouse with IntelliEye(TM)':
    ... cruft cut ...
    Device Accel Profile (259):     3
    ... cruft cut ...

This value is how the driver handles the acceleration:

-1: none no velocity-dependent pointer acceleration or deceleration. If constant deceleration is also unused, motion processing is suppressed, saving some cycles.

0: classic (the default) similar to old behaviour, but more predictable. Selects between 'polynomial' and 'simple' based on threshold =/!= 0.

1: device-dependent available if the hardware driver installs it. May be coming for synaptics.

2: polynomial Scales polynomial: velocity serves as the coefficient, acceleration being the exponent. Very useable, the recommended profile.

3: smooth linear scales mostly linear, but with a smooth (non-linear) start.

4: simple Transitions between accelerated/unaccelerated, but with a smooth transition range. This has the fundamental problem of accelerating on two niveaus, on which acceleration stays independent of velocity. Traditionally the default however.

5: power accelerates by a power function. velocity is the exponent here. Adheres to threshold. Will easily get hard to control, so it is important you have properly tuned your velocity estimation.

6: linear just linear to velocity and acceleration. Simple and clean.

7: limited smoothly ascends to acceleration, maxing out at threshold, where it becomes flat (is limited).

So from that we can see that if we set this property to -1 it will disable acceleration completely.

$ xinput set-prop 10 259 -1

So now we have no acceleration, but is that what we want? The mouse is a bit slow now. Sadly that's how it is. With acceleration disabled you get a 1:1 relationship between the mouse and the display. You move the mouse left one dot and the mouse pointer moves one pixel left. If there were a way to multiply the input movement (say by 2) then every other pixel on each axis would be inacessible to the mouse. That would make accurate positioning of the mouse pretty difficult. The 'sensitivity' setting in some GUI mouse control panels actually does the opposite of what you would expect - the most sensitive is a 1:1 ratio - it's the acceleration which makes it seem so much faster.

So you want faster movement, but you don't want acceleration. The only way you can do that is in hardware. Basically, you will need to buy a more sensitive mouse. Look for one with a higher DPI (Dots Per Inch - yes, just like a printer). I find my old Microsoft IntelliEye is sensitive enough with acceleration disabled to be useable.

Or maybe your mouse is just too sensitive? Even with acceleration disabled it's too fast for your liking? Well, that's where the

Device Accel Constant Deceleration (260):      1.0000

setting comes in. This is a constant deceleration (or desinsitizing) ratio. By default it's 1:1 but will take any number (even fractions) above that. To get a slight slowdown of the mouse:

$ xinput set-prop 10 260 1.2

Or a massive slowdown for really delicate work:

$ xinput set-prop 10 260 10

Or return it to normal:

$ xinput set-prop 10 260 1

This works even when the acceleration profile is set to -1 (Disabled).

5
  • What happens if I want less sensitivity with a high-DPI mouse? No, sorry, 1:1 mapping just doesn't work. And the next value isn't 1:2, you could do, say, 1:1.2. In fact, I'm pretty sure the current acceleration code has a million diffierent ways to fine-tune the speeds and achieve sub-pixel resolution. If only there was a "no acceleration" profile - as opposed to "completely disable acceleration subroutines."
    – aib
    Mar 21, 2011 at 1:46
  • @aib Check my edit
    – Majenko
    Mar 21, 2011 at 9:02
  • I'm sorry, it's not pointer deceleration I need. (Well, maybe it is, but after I've scaled my mouse movement up, and without buying a new mouse, thank you.)
    – aib
    Mar 21, 2011 at 14:03
  • This should be accepted. I was not aware that the deceleration can be float, and not just integer. Thanks! The none profile really turns off the acceleration (unlike in windows).
    – inf3rno
    Aug 24, 2015 at 2:40
  • In Debian Stretch these no longer appear to work: after the upgrade the Device Accel Constant Deceleration property gone missing, and what I have for this mouse (xinput --list-props) doesn't seem to affect it any more (leaving me with a night useless mouse).
    – Jubatian
    Jun 29, 2017 at 20:12
2

Looking through X.org's sources, playing around with a custom server and doing some obsessive testing with my mouse, I can safely say that the current limited profile (7) achieves this when the threshold value is set to 0. The acceleration value then becomes the velocity scaler (scalar?).

So:

xinput set-prop <device> "Device Accel Profile" 7
xset m <velocity> 0

The second part can also be set using your desktop environment's mouse settings panel. Don't forget that it needs to be in x/y form for non-integer values, e.g. 16/10 for 1.6.

There are also some other settings (deceleration etc.) to adjust, but this takes care of the worst part of the problem. Some configuration files should be edited for permanency, but again, the important thing is that it's possible.

Edit: For permanence, you can add this to your xorg.xconf:

Section "InputClass"
        Identifier "Mouse with No Acceleration"
        MatchIsPointer "yes"
        MatchProduct "Mouse"
        Option "AccelerationProfile" "7"
EndSection

From there on, you can use your desktop environment's mouse settings, as I've mentioned. However, if you want a complete xorg.conf solution:

Section "InputClass"
        Identifier "Mouse With No Acceleration"
        MatchIsPointer "yes"
        MatchProduct "Mouse"
        Option "AccelerationProfile"     "7" # "limited" profile
        Option "AccelerationNumerator"   "2" # these adjust the sensitivity
        Option "AccelerationDenominator" "1" # these adjust the sensitivity
        Option "AccelerationThreshold"   "0" # this disables acceleration
                                             # in the "limited" profile
EndSection
1
  • <3 Thank you. Even works for sleep mode. Sep 7, 2016 at 6:40
0

I know this is old, but I think it merits to add an answer to a question already asked. XSET will do the job for you most likely. The command I ran was xset m 1 1 ...

The man page contents for xset I have curated here from xset(1) for you for the mouse options:

mouse

The m option controls the mouse parameters; it may be abbreviated to 'm'. The parameters for the mouse are acceleration' and threshold'. The acceleration can be specified as an integer, or as a simple fraction. The mouse, or whatever pointer the machine is connected to, will go acceleration' times as fast when it travels more than threshold' pixels in a short time. This way, the mouse can be used for precise alignment when it is moved slowly, yet it can be set to travel across the screen in a flick of the wrist when desired. One or both parameters for the m option can be omitted, but if only one is given, it will be interpreted as the acceleration. If no parameters or the flag 'default' is used, the system defaults will be set.

If the threshold' parameter is provided and 0, the acceleration' >parameter will be used in the exponent of a more natural and continuous >formula, giving precise control for slow motion but big reach for fast >motion, and a progressive transition for motions in between. Recommended 'acceleration' value in this case is 3/2 to 2, but not limited to that range.

Disclaimer: this does not survive a relogin/reboot without some extra trickery...

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .