Lowering Mouse Sensitivity in Ubuntu and Fedora
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 the mouse sensitivity and acceleration settings at their lowest.
Here’s how I regained my sanity and mouse slowness. This fix should work for any mouse (tested with many different mouse brands, including Logitech.)
Please contact me if you know of a better way to do any of the below.
Fix for Ubuntu 17.04+ and Fedora 22+ (libinput)
- Open a terminal
-
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)]
- Note the name of your device. (In my case, manipulating ‘Razer DeathAdder’ worked.)
-
Set the constant deceleration and transformation matrix for the device:
xinput --set-prop "Device Name" "libinput Accel Speed" -0.9 xinput --set-prop "Device Name" "Coordinate Transformation Matrix" 0.6 0 0 0 0.6 0 0 0 2
The “libinput Accel Speed” number must be an integer between 1 and -1, and appears less flexible than the old Constant Deceleration setting (below.) Playing around with the coordinate transformation matrix numbers may also help. You may want to apply only one or both of these changes. (Thanks to Emanuel Steen for the tip.)
Fix for Ubuntu 10.04-16.10 and Fedora 12-21
- Open a terminal
-
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)]
- Note the name of your device. (In my case, manipulating ‘Razer DeathAdder’ worked.)
-
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 xinput --set-prop "Razer DeathAdder" "Device Accel Profile" -1
To perform the tuning automatically, I simply created a file fix-mouse.sh
containing the script below, ran chmod +x fix-mouse.sh
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
xinput --set-prop "Razer DeathAdder" "Device Accel Profile" -1
Fix for distributions using HAL (including Ubuntu 9.10)
- Open a terminal
-
Run the command:
hal-device
-
In the output, locate the mouse’s hex format vendor and product ID’s as highlighted below:
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.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 (<strong>0x7</strong>) (int) usb.vendor_id = 5426 (<strong>0x1532</strong>) (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)
-
Edit the HAL policy file for input devices:
sudo nano -w /etc/hal/fdi/policy/10-x11-input.fdi
- Insert the following text:
-
Hit Ctrl + X, then Y to save the file and exit
nano
-
Restart hald:
sudo service hald restart
- Restart X.Org (log out or reboot your computer)
<?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>
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.