Patrick Mylund Nielsen

Lowering Mouse Sensitivity in Ubuntu and Fedora

05 Feb 2010

I have a Razer Deathadder. It's a nice gaming mouse. In Ubuntu its polling rates are through the roof, though, 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. This fix should work for any mouse.

Update: Added instructions for Ubuntu 10.04 and above (tested with many different mouse brands including Logitech in 10.04-12.10), and Fedora Core (12 and above). Instructions for Ubuntu 9.10 Karmic Koala can be found at the bottom.

Fix for Ubuntu 10.04+ and Fedora Core 12+

It turns out that Ubuntu 10.04 and above need yet another type of work-around, as they don'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 perform the tuning automatically, I simply created a file containing the script below, ran chmod +x on it and added it to GNOME's Startup Applications -- gnome-session-properties, or System -> Preferences -> Startup Applications, or the gear in the upper-right corner -> Startup Applications in Ubuntu's Unity.

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

Please check this comment for more information about chmod.

Fix for Ubuntu 9.10

  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 0x7 and my Vendor ID is 0x1532. 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.