I’ve been using Ubuntu 14.04 as my main desktop for 3 months now, and i guess i’m 95% satisfied, 5% disgruntled. One of the things that caused me pain was how mice seem to auto-doubleclick sometimes. Of course, that’s the input switches that should be debounced in hardware, but obviously aren’t.
The problem started for me when i installed Ubuntu for the first time – my mouse, that had always worked well, had the problem with the new Ubuntu installation. Went out and bought a cheap 7,95 € one. It auto-doubleclicked from the first day on. Bought another, by Logitech, for 20 €. No problems yet. But …. on my other PC, my 60 € Razer mouse started double-clicking as well. So i started to investigate more.
Seems some guy named Matt Whitlock had the same problem a few years ago, and he developed a patch to the evdev code to add software debouncing. Unfortunately, the X maintainers refused to add it to the official sources, because of the cost of testing involved. This is even though many people seem to have this problem, and since all mice that had the problem in Ubuntu work well in Windows, i assume a) windows does its own software debouncing and b) hardware manufacturers don’t properly debounce their cheap mice because of a).
But the patch still works, and it can be added to your installation quite easily:
- Get event-debounce-patch, either by copy/pasting from the original author post, or from my mirror.
- Install the source code of evdev and the build environment, and compile it. Warning: the first apt-get will install the source to a subdirectory of your current directory, so cd to something suitable first.
apt-get source xserver-xorg-input-evdev-dev sudo apt-get build-dep xserver-xorg-input-evdev-dev cd xserver-xorg-input-evdev-2.8.2/ patch -p 1 < ../evdev-debounce.patch dch -i debuild -us -uc -b cd ..
- This will give you a file named xserver-xorg-input-evdev_2.8.2-1ubuntu2_amd64.deb in the directory you started from. Or, x86 instead if amd64 if you’re on a 32 bit system. In case you don’t want to compile yourself, you can download the file from my mirror. This is for Ubuntu 14.04, so depending on when you read this, my file will be outdated and you have to build it yourself.
- Install this .deb file using
sudo dpkg -i xserver-xorg-input-evdev_2.8.2-1ubuntu2_amd64.deb
- Now, log out and re-login; this should start the X server and load the new package.
- Next is to configure debouncing; unconfigured, the new software doesn’t change anything. Use xinput –list to find out the ID of your mouse device – in my case it’s the Razer mouse, ID=10:
$ xinput --list ⎡ Virtual core pointer id=2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)] ⎜ ↳ Razer Razer Copperhead Laser Mouse id=10 [slave pointer (2)] ⎣ Virtual core keyboard id=3 [master keyboard (2)] ↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)] ....
- When you know your mouse device id, list the properties of that device. One of the properties – typically the last one – is the new debounce delay. You’ll need its id (286 in this case):
$ xinput --list-props 10 ..... Evdev Debounce Delay (286): 0 .....
- Last, change the property to the maximum value to debounce. If you set this too high, a fast real double-click might be “debounced” as well – a value of 20 works well for me, if your mouse switches are worn out badly, you might want to use 50:
$ xinput --set-prop --type=int --format=32 10 286 20
- Once you find a value you like, you can put the above command into your
$HOME/.xprofile. Or, to install a system-wide configuration file, put the following into
/usr/share/X11/xorg.conf.d/12-evdev-debounce.conf– this file is new, and you need to be root to write it:
Section "InputClass" Identifier "evdev pointer debounce" MatchIsPointer "on" MatchDriver "evdev" Option "DebounceDelay" "20" EndSection