37

Is there way to increase the mouse speed in KDE4? I don't want any pointer acceleration, it's just the mouse speed that I want to change.

Edit: Unfortunately, editing the xorg.conf is not an option for me, because I want the users to be able to configure the mouse speed themselves and it is company policy do deny users permission to change the xorg.conf.

Braiam
  • 69,112
André
  • 473

9 Answers9

37

KDE has not built this into its control center yet, but you can use xinput from the command line. First, run xinput list to find the device number of your mouse:

$ xinput list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ SynPS/2 Synaptics TouchPad                id=10   [slave  pointer  (2)]
⎣ Virtual core keyboard                         id=3    [master keyboard (2)]
    ↳ Virtual core XTEST keyboard               id=5    [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=9    [slave  keyboard (3)]

On my laptop, the device id I want is 10 (SynPS/2 Synaptics TouchPad). On your system, you will have to decide which device is the correct one. Next, run xinput list-props <your device id> to see the current settings for that device:

$ xinput list-props 10
Device 'SynPS/2 Synaptics TouchPad':
    Device Enabled (144):   1
    Device Accel Profile (266):     1
    Device Accel Constant Deceleration (267):       2.500000
    Device Accel Adaptive Deceleration (268):       1.000000
    Device Accel Velocity Scaling (269):    12.500000
  [ many more settings omitted ]

The property you are interested in is "Device Accel Constant Deceleration (267)". To slow your mouse down, the value must be increased by running xinput set-prop <your device id> <property id> <value>:

$ xinput set-prop 10 267 5.0

In this example, the value is increased from 2.5 to 5.0 and the mouse moves at half-speed.

Luke
  • 919
25

Just force the pointer to skip pixels, here's how:

First list input devices:

$ xinput list
⎡ Virtual core pointer                          id=2    [master pointer  (3)]
⎜   ↳ Virtual core XTEST pointer                id=4    [slave  pointer  (2)]
⎜   ↳ PixArt USB Optical Mouse                  id=10   [slave  pointer  (2)]
⎜   ↳ ETPS/2 Elantech Touchpad                  id=15   [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)]
    ↳ Video Bus                                 id=7    [slave  keyboard (3)]
    ↳ Sleep Button                              id=8    [slave  keyboard (3)]
    ↳ USB2.0 UVC 2M WebCam                      id=9    [slave  keyboard (3)]
    ↳ Asus Laptop extra buttons                 id=13   [slave  keyboard (3)]
    ↳ AT Translated Set 2 keyboard              id=14   [slave  keyboard (3)]
    ↳   USB Keyboard                            id=11   [slave  keyboard (3)]
    ↳   USB Keyboard                            id=12   [slave  keyboard (3)]

In the example we see the mouse is PixArt USB Optical Mouse. Next list its properties:

$ xinput list-props "PixArt USB Optical Mouse"
Device 'PixArt USB Optical Mouse':
        Device Enabled (140):   1
        Coordinate Transformation Matrix (142): 1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000
        Device Accel Profile (265):     0
        Device Accel Constant Deceleration (266):       1.000000
        Device Accel Adaptive Deceleration (267):       1.000000
        Device Accel Velocity Scaling (268):    10.000000
        Device Product ID (260):        2362, 9488
        Device Node (261):      "/dev/input/event5"
        Evdev Axis Inversion (269):     0, 0
        Evdev Axes Swap (271):  0
        Axis Labels (272):      "Rel X" (150), "Rel Y" (151), "Rel Vert Wheel" (264)
        Button Labels (273):    "Button Left" (143), "Button Middle" (144), "Button Right" (145), "Button Wheel Up" (146), "Button Wheel Down" (147), "Button Horiz Wheel Left" (148), "Button Horiz Wheel Right" (149)
        Evdev Middle Button Emulation (274):    0
        Evdev Middle Button Timeout (275):      50
        Evdev Third Button Emulation (276):     0
        Evdev Third Button Emulation Timeout (277):     1000
        Evdev Third Button Emulation Button (278):      3
        Evdev Third Button Emulation Threshold (279):   20
        Evdev Wheel Emulation (280):    0
        Evdev Wheel Emulation Axes (281):       0, 0, 4, 5
        Evdev Wheel Emulation Inertia (282):    10
        Evdev Wheel Emulation Timeout (283):    200
        Evdev Wheel Emulation Button (284):     4
        Evdev Drag Lock Buttons (285):  0

By changing "Coordinate Transformation Matrix" property we can increase the pointer speed. Documentation says it is used to calculate a pointer movement. Quoting:

By default, the CTM for every input device in X is the identity matrix. As an example, lets say you touch a touchscreen at point (400, 197) on the screen:

⎡ 1 0 0 ⎤   ⎡ 400 ⎤   ⎡ 400 ⎤
⎜ 0 1 0 ⎥ · ⎜ 197 ⎥ = ⎜ 197 ⎥
⎣ 0 0 1 ⎦   ⎣  1  ⎦   ⎣  1  ⎦

The X and Y coordinates of the device event are input in the second matrix of the calculation. The result of the calculation is where the X and Y coordinates of the event are mapped to the screen. As shown, the identity matrix maps the device coordinates to the screen coordinates without any changes.

So, we want to increase X and Y values, leaving the rest unchanged. An example from my PC:


$ xinput set-prop "PixArt USB Optical Mouse" "Coordinate Transformation Matrix" 2.4 0 0 0 2.4 0 0 0 1

Play a bit with this until you're satisfied with the speed.

These changes are active only for the current session, so once you've chosen a good sensitivity, you may apply it permanently by adding it to xorg.conf (or creating a file like /etc/X11/xorg.conf.d/40-mouse-sensitivity.conf):

Section "InputClass"
    Identifier "PixArt USB Optical Mouse"
    MatchIsPointer "Yes"
    Option "TransformationMatrix" "2.4 0 0 0 2.4 0 0 0 1"
EndSection

thanks go to Simon Thum from Xorg mailing list for giving a hint about the matrix.

UPD: note, some Windows games running in Wine may start exhibiting odd pointer behavior (e.g. it was noted that crosshair in Counter Strike 1.6 declines down until it stares the floor no matter how you move the mouse), in this case just reset X and Y of CTM back to 1 before running the game.

Hi-Angel
  • 4,810
17

The terminology of the mouse settings in Linux (Xorg) are slightly different from the windows world.

There are three important settings:

  • threshold - The trigger for acceleration
  • acceleration - The speed after the threshold has been reached
  • resolution - The "speed"

These settings are independent of the Desktop Environment. They are pure X settings. So this always works. See also the mouse section of xset for a truly independent way to change these settings.

The Unity settings manager seems to rename the threshold to sensitivity. But as you are talking about KDE, that should not matter.

Only threshold and acceleration can be changed by the user. The resolution is a setting to be made in xorg.conf. But usually, the first two settings are enough for most users.

Linuxreviews has an explanation of these values.

Basically: The mouse moves at a base speed (modifiable using resolution). If the mouse moves n pixels (n = threshold) in a short time, then the base speed is multiplied with acceleration. As an example, if you want to disable acceleration completely, you can set the threshold to 0. In words: If the mouse moves 0 pixels in a short time, I'll use base-speed * acceleration. So a threshold of 0 gives you constant mouse-speed.

So, these two values give you a very fine grained control over the speed.

exhuma
  • 732
4

Though I am not very clear on the question here is my suggestion.

For KDE

A quick search reveals there is no such option to increase mouse speed under threshold value.

Some users suggest changing mouse resolution in /etc/X11/xorg.conf file (mouse InputDevice section) like

Option "Resolution" "400"

But most user said it didn't work.

You can increase the threshold value so that the acceleration doesn't start until the threshold value reaches. (The setting is in Mouse> Advanced Settings)

A related post can be found here.

For Unity

  • Press Super key (windows key).

  • Search for mouse.

  • Select Mouse And Touchpad

  • Now change the sensitivity to higher value. Possibly this is what you want.

    mouse settings

Web-E
  • 21,716
3

The answers above are now outdated. What has worked for me the most neatly is the last section of this wiki entry:

with libinput

Alternatively, since libinput-1.1.0-1 and xf86-input-libinput-0.15.0-1 you can use a flat acceleration profile. To enable it create the following file:

/etc/X11/xorg.conf.d/50-mouse-acceleration.conf

Section "InputClass" Identifier "My Mouse" Driver "libinput" MatchIsPointer "yes" Option "AccelProfile" "flat" Option "AccelSpeed" "0" EndSection

and restart X.

Another option is this command:

$ xinput --set-prop 'libinput Accel Profile Enabled' 0, 1

Which doesn't need an X restart, but isn't persistent. Although it can be set up to run automatically with Autostarting.

kellogs
  • 131
  • 5
3

Given what the above post had said, I found this work around.

The fact is that the mouse move at a constant multiple of base speed, where the multiple is set by the "acceleration" parameter.

However, this multiplier is applied only after your mouse move faster than a "threshold" speed, specified by the "sensitivity" parameter.

This creates the awkward feel of "acceleration" where if you start to move your mouse fast, it begins to jump around uncontrollably as it moves past the threshold speed.

So what you can do is setting the "sensitivity" to 0, thus making the threshold to be 0. What this does is your acceleration is applied all the time to your mouse speed.

Then your mouse speed is just a multiple of your "acceleration" parameter, and since it is a linear multiplication, you should have a constant speed proportional to the acceleration parameter. Without the feeling of acceleration and jumps.

So in short: Set sensitivity to 0. Adjust the parameter "acceleration" as if it is "speed"

evan
  • 31
1

Personally I find that precise pointer motion is better for overall desktop experience, so this setting is important for me too. I was always wondering why OS UXP designers not only make acceleration the default, but also tend to remove control from user interface.

You might find that the acceleration, which supposed to get you more comfortable UXP is actually undesirable in some situations, as you could miss the right UI elements on screen when moving mouse fast, or just need precision for some CAD application. Specifically, it's difficult to get in control of slider and spinner UI elements or move a shape on some designer's UI. Also, with acceleration, it's difficult to position the mouse cursor in a text editor precisely as you copy-paste a region of text. Some might argue that when you need to get precision you just slow down, but what if you don't want to slow down, and still get precision?

You can check if there is acceleration or not:

(1). Move your mouse pointer to the right of the screen, notice the physical position of the device on the table.

(2). Moderately move the mouse to the left a little bit, so the cursor travels around the center of screen, and then very slowly return the physical device to it's original position.

(3). Repeat steps (1) and (2) multiple times.

If there is no acceleration, the cursor should arrive to the right of screen all of the time. If there is acceleration, the pointer would move more and more to the left, so after 3 or 4 times it would just hit the left of the screen, so you need to fix it.

No acceleration means you need to adjust the Device Accel Velocity Scaling parameter.

It will slow down mouse motion in general, so you need to compensate for that with constant speed adjustment. This can be done with decreasing the Device Accel Constant Deceleration parameter.

Here is what worked for me:

  1. Find the mouse device id:

$ xinput list ... ⎜ ↳ PixArt USB Optical Mouse id=10 [slave pointer (2)] ...

The device id = 10

  1. List properties of the device

$ xinput list-props 10 ... Device Accel Constant Deceleration (276): 1.000000 ... Device Accel Velocity Scaling (278): 10.000000 ...

  1. Reduce the scaling parameter to its minimum, this should give one-to one mouse motion with respect to actual physical movement. Whether you set it to something like 0.1, 0.001 or 1e-30 does not matter, as it's much lower acceleration than the default of 10.0. You can't set it to zero, as it's considered an error.

$ xinput set-prop 10 278 1e-10

  1. (optional) Now you might notice that despite being precise, speed have been decreased in general, so you might need to play with the Constant Deceleration parameter to restore comfortable speed. In my case a comfortable setting was 0.7 which sped up the pointer by half, made mouse motion feeling like about the same speed that was before, but without acceleration:

$ xinput set-prop 10 276 0.7

If you want it faster, set a lower value here, like 0.5, 0.4 etc. If you want it slower, set it to something like 1.0, 1.2, or even 1.5

0

If you have a logitech gaming mouse you can use piper or if you have a razer mouse you can use qrazercfg. these programs should already be in the repo (so sudo apt install qrazercfg, for example). When forcing a flat accel profile (no acceleration) the mouses set dpi will move at 1/2 the speed that it should, so I simply double the mouses dpi in these programs when I'm on GNU/Linux, and it feels correct.

However if you're using a mouse whos dpi can't be adjusted you simply have to live with half sens or butcher your ability to move in a 3d environment via transformation matrix adjustment.

0

How to adjust mouse speed in KDE
  • without enabling mouse acceleration
  • and only using the settigns dialog (no console, no config files)

This is a colloquial summary of exhuma's answer, don't forget to upvote it.

In KDE, mouse acceleration is not logarithmic. That is, it has two constant mouse speeds: non-accelerated and accelerated. It switches from one to another when you jerk the mouse quickly enough.

The first speed is non-configurable (at least, from GUI). The second speed is configurable.

The solution is:

  1. Set "Pointer threshold" to 0. As a result, the second speed will be applied at all times.
  2. Adjust "Pointer acceleration" to make that speed bigger or smaller.

You will end up with a constant, non-dynamic cursor speed adjusted to your liking.