Evoluent’s VerticalMouse 4 is one of the better ergonomic computer mice I’ve used. It’s comfortable, it doesn’t take much getting used to, and the price isn’t unreasonable.
While it works great on Windows and Mac, the same can’t be said for Linux. The button mappings cause some truly odd behavior, particularly with the scroll wheel.
Fortunately, there’s a quick fix.
First let’s play with xinput to make sure the settings are what you want. The following command will print out a list of input devices on your system:
There should be a line that looks something like this:
Evoluent VerticalMouse 4 id=10
The important thing here is the ID number, which in this case is 10. It will vary from one computer to the next.
Now we can assign a new button mapping. I like to keep it simple, so this will only activate the left and right mouse buttons (on either side of the scroll wheel) and will set the scroll wheel to scroll and act as middle click. If you want a different setup, I recommend reading this and this and playing with these values in xinput until your mouse does what you want.
xinput --set-button-map 10 1 3 0 4 5 0 0 0 2 0 0
Note that I bolded the first parameter: as you may have guessed, that 10 is whatever ID you found above.
Got it working? Good. Thing is, xinput will only temporarily set your mouse buttons. Once you reboot, they’re gone.
To make these changes persist we need to create an Xorg settings file. First we’ll need the USB ID of your mouse. The following command will list all the USB devices on your system:
One of them should look kinda like this:
Bus 004 Device 004: ID 1a7c:0191 Evoluent VerticalMouse 4
The funny text I bolded is the device ID. (Again, it will likely be different on your system.) Now you can create a config file for your mouse. Note that this works on Ubuntu, perhaps your distro stores configuration files elsewhere.
sudo touch /usr/share/X11/xorg.conf.d/90-evoluent.conf
sudo gedit /usr/share/X11/xorg.conf.d/90-evoluent.conf
Copy and paste the following into the file, remembering to swap out your mouse’s USB ID and the button mapping string (if you changed it.)
Also, note that the button mapping string does NOT start with the device ID you used above; that was only for xinput.
Option "ButtonMapping" "1 3 0 4 5 0 0 0 2 0 0"
Easy, right? Well okay, not at all. The lack of a good mouse configuration UI is a nasty oversight on modern Linux systems. Someone needs to make one.