Lowering Gaming Mouse Sensitivity in Ubuntu 10.04/9.10

February 4, 2010

in Gadgets,How to,Linux

I have a Razer Deathadder. It’s a nice mouse. In Ubuntu, though, its polling rates are through the roof and the mouse is pretty much unusable, even with GNOME’s mouse sensitivity and acceleration settings at their lowest. Previously, this could be fixed by tweaking the mouse section of your X.Org configuration file, /etc/X11/xorg.conf, but in Ubuntu 9.10, a different measure is needed, as most devices are managed via HAL. Here’s how I regained my sanity and mouse slowness. The fix should work for any high-end mouse.

Update: Added instructions for Ubuntu 10.04 Lucid Lynx. Instructions for Ubuntu 9.10 Karmic Koala can be found at the bottom.

Fix for Ubuntu 10.04 Lucid Lynx

It turns out that Ubuntu 10.04 needs yet another type of work-around, as it doesn’t use HAL. This is the best solution I’ve found so far:

  1. Open a terminal
  2. Run the command: xinput --list --short
    ⎡ Virtual core pointer                    	id=2	[master pointer  (3)]
    ⎜   ↳ Virtual core XTEST pointer              	id=4	[slave  pointer  (2)]
    ⎜   ↳ Razer USA, Ltd DeathAdder Mouse         	id=6	[slave  pointer  (2)]
    ⎜   ↳ Razer USA, Ltd DeathAdder Mouse         	id=7	[slave  pointer  (2)]
    ⎜   ↳ Razer DeathAdder                        	id=11	[slave  pointer  (2)]
    ⎜   ↳ Macintosh mouse button emulation        	id=12	[slave  pointer  (2)]
    ⎣ Virtual core keyboard                   	id=3	[master keyboard (2)]
        ↳ Virtual core XTEST keyboard             	id=5	[slave  keyboard (3)]
        ↳ Power Button                            	id=8	[slave  keyboard (3)]
        ↳ Power Button                            	id=9	[slave  keyboard (3)]
        ↳ Dell Dell USB Keyboard                  	id=10	[slave  keyboard (3)]
  3. Note the name of your device. In my case, manipulating ‘Razer DeathAdder’ worked.
  4. Set the constant deceleration for the device:
    xinput --set-prop "Razer DeathAdder" "Device Accel Constant Deceleration" 5

That’s it. You might have to play around with the value, but 5 slowed down my mouse sufficiently.

  • To see the current settings for the device:
    xinput --list-props "Razer DeathAdder"
  • To turn off mouse acceleration:
    xinput --set-prop "Razer DeathAdder" "Device Accel Velocity Scaling" 1

To perform the tuning automatically, I simply created a file containing the script below, ran chmod +x on it and added it to System -> Preferences -> Startup Applications in GNOME:

#!/bin/sh
xinput --set-prop "Razer DeathAdder" "Device Accel Constant Deceleration" 5
xinput --set-prop "Razer DeathAdder" "Device Accel Velocity Scaling" 1

Fix for Ubuntu 9.10 Karmic Koala

  1. Open a terminal
  2. Run the command: hal-device
  3. In the output, locate the mouse’s hex format vendor and product ID’s as highlighted below:
    82: udi = '/org/freedesktop/Hal/devices/usb_device_1532_7_noserial_if0'
      linux.hotplug_type = 2  (0x2)  (int)
      linux.subsystem = 'usb'  (string)
      info.linux.driver = 'usbhid'  (string)
      info.subsystem = 'usb'  (string)
      info.product = 'USB HID InterfacUbuntu 10.04 Lucid Lynxe'  (string)
      info.udi = '/org/freedesktop/Hal/devices/usb_device_1532_7_noserial_if0'  (string)
      usb.linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.0'  (string)
      usb.configuration_value = 1  (0x1)  (int)
      usb.num_configurations = 1  (0x1)  (int)
      usb.num_interfaces = 1  (0x1)  (int)
      usb.device_class = 0  (0x0)  (int)
      usb.device_subclass = 0  (0x0)  (int)
      usb.device_protocol = 0  (0x0)  (int)
      usb.product_id = 7  (0x7)  (int)
      usb.vendor_id = 5426  (0x1532)  (int)
      usb.product = 'USB HID Interface'  (string)
      usb.vendor = 'Razer USA, Ltd'  (string)
      usb.num_ports = 0  (0x0)  (int)
      usb.max_power = 100  (0x64)  (int)
      usb.device_revision_bcd = 256  (0x100)  (int)
      usb.is_self_powered = false  (bool)
      usb.can_wake_up = true  (bool)
      usb.bus_number = 8  (0x8)  (int)
      usb.speed = 12  (double)
      usb.version = 2  (double)
      linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.0'  (string)
      info.parent = '/org/freedesktop/Hal/devices/usb_device_1532_7_noserial'  (string)
      usb.interface.number = 0  (0x0)  (int)
      usb.linux.device_number = 3  (0x3)  (int)
      usb.interface.subclass = 1  (0x1)  (int)
      usb.interface.class = 3  (0x3)  (int)
      usb.interface.protocol = 2  (0x2)  (int)

    In this case, my Product ID is 0×7 and my Vendor ID is 0×1532. Note that there can be more than one section containing the name of your mouse or its manufacturer — if you can’t find the product and vendor ID, look further down.

  4. Edit the HAL policy file for input devices: sudo nano -w /etc/hal/fdi/policy/10-x11-input.fdi
  5. Insert the following text:
  6. <?xml version="1.0" encoding="UTF-8"?>
    <deviceinfo version="0.2">
      <device>
        <match key="@input.originating_device:usb.vendor_id" int="0x1532">
          <match key="@input.originating_device:usb.product_id" int="0x7">
            <merge key="input.x11_options.ConstantDeceleration" type="string">5</merge>
          </match>
        </match>
      </device>
    </deviceinfo>

    Adjust your vendor_id and product_id to match what you noted down before. If the file is empty or doesn’t exist, don’t worry. If it already exists, omit the first line about xml.

  7. Hit Ctrl + X, then Y to save the file and exit nano
  8. Restart hald: sudo service hald restart
  9. Restart X.Org (log out or reboot your computer)

That’s it! The “ConstantDeceleration” setting in /etc/hal/fdi/policy/10-x11-input.fdi is what does the trick. When set to a value of 5, the sensitivity will essentially be divided by 5. Oh, sweet sanity.

Related Posts with Thumbnails

{ 9 comments… read them below or add one }

1 Ícaro May 15, 2010 at 01:57

Thanks Patrick!

I was already getting frustrated with Ubuntu 10.04 mouse support.

My value for “Device Accel Constant Deceleration” was 1.6.

** In the “Mouse Preferences” dialog, the “Pointer Speed” setting has no effect.

Reply

2 Patrick Mylund Nielsen May 15, 2010 at 02:51

I’m glad you found it helpful, Ícaro.

GNOME’s mouse preferences always bothered me. “Acceleration” seems to be the base speed of the mouse, and “Sensitivity” is how much the mouse speeds up the faster you move it. While this might be technically correct, it’s confusing as the terminology is switched basically everywhere else (“Sensitivity” is the base speed of the mouse and “Acceleration” is how much it speeds up the faster you move it). But yes, indeed, with high-grade mice, these sliders don’t make much of a difference.

Reply

3 MeanEYE May 16, 2010 at 12:53

Thank you for this post. I have Logitech G9 and without these settings… mouse is practically unusable. I do, however, have mouse profile specially configured for Linux but it’s an ugly way to get around this issue. Basically what I was doing ;) is forcing mouse with 3200dpi and huge refresh rate to work as some crappy old mouse ;)…

Once again thanx.

Reply

4 Alexei June 3, 2010 at 01:10

Thank you for this howto! However, I have a small problem. My Logitech USB receiver shows up as two devices with two different ids:

$ xinput –list –short
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=11 [slave pointer (2)]
⎜ ↳ TPPS/2 IBM TrackPoint id=12 [slave pointer (2)]
⎜ ↳ Macintosh mouse button emulation id=14 [slave pointer (2)]
⎜ ↳ Logitech USB Receiver id=9 [slave pointer (2)]
⎜ ↳ Logitech USB Receiver id=15 [slave pointer (2)]

Using the name (Logitech USB Receiver) in xinput command doesn’t always work. Sometimes it’s the first device, sometimes it’s the second one. To resolve the issue, I wrote a little script to set the properties for both devices by their ids:
for id in `xinput –list –short | grep “Logitech USB Receiver” | sed ‘s/.*id=\([0-9]*\).*/\1/’`; do xinput –set-prop $id “Device Accel Constant Deceleration” 2.5; done

Feel free to add it to your post.

Reply

5 schaender June 9, 2010 at 15:17

Thanks, finally something that works! :)

Reply

6 Truefire June 14, 2010 at 17:38

Hi, could I reverse this somehow to speed up my trackpad on my Toughbook? I’m using Mint Helena, equivalent to 9.10.

Any assistance is appreciated.

Reply

7 Ian Sinclair June 22, 2010 at 16:48

Brilliant, Patrick, this has solved the problem with my new Kensington Optical Trackball. I found a value of 3 was right for this trackball. No more searching for answers (none worked until now).

Reply

8 Migi June 26, 2010 at 21:05

Hey, everything in this blog post works great, I’m now able to set the mouse deceleration to any value I want. Well, not entirely. It only accepts values >=1, while I would like to use this to make my mouse a little faster with mouse acceleration off, instead of slower, just like Truefire.

Any ideas to force it to values smaller than 1?

Reply

9 Patrick Mylund Nielsen July 20, 2010 at 21:48

Hi Truefire and Migi,

I can’t find a good answer to your questions, but this might help you a little:

# xinput get-feedbacks "Razor DeathAdder"
1 feedback class
PtrFeedbackClass id=0
	accelNum is 2
	accelDenom is 1
	threshold is 4

# xinput set-ptr-feedback "Razor DeathAdder" 0 2 1

# xinput get-feedbacks "Razor DeathAdder"
1 feedback class
PtrFeedbackClass id=0
	accelNum is 2
	accelDenom is 1
	threshold is 0

The lower the treshold (the first value in the command), the more sensitive the mouse is. This value can’t go below 0, it seems.

Alternatively, for high(er) sensitivity without acceleration:

# xinput set-ptr-feedback "Razor DeathAdder" 0 0 1

# xinput get-feedbacks "Razor DeathAdder"
1 feedback class
PtrFeedbackClass id=0
	accelNum is 0
	accelDenom is 1
	threshold is 0

Reply

Leave a Comment