Evoluent Mouse with Ubuntu 11.04 and 11.10

Even though I’m trying to use as less as possible my mouse and use keyboard shortcuts, my wrist asked for a more ergonomic mouse. The Evoluent VerticalMouse is one of the best you could find in the market. However, if they have drivers for Windows and Mac OS they don’t say anything about Linux. Guess what: just plug it and it works perfectly (tested on Ubuntu 11.04 and 11.10)! The copy/paste with the middle button even works! (it’s not a wheel click that paste, but a click on the middle button).

You have to get use to a vertical mouse. After years working with the usual mouse, it is not easy to switch your hand the other way. But it’s really worth it, your wrist will thank you.

If you have wrist problem, you might as well have difficulties to click some buttons and you will like to change the mapping of these buttons. On a terminal, get the device name and ID with:

xinput list

and you will get something like this:

HOLTEK Evoluent VM3 Wireless id=11 [slave pointer (2)]

You will see how many buttons are available on your mouse with:

xinput query-state "HOLTEK Evoluent VM3 Wireless"

This will list 13 buttons. However you only have 5 on your mouse. The list of buttons and what they are mapped to can be seen with (replacing 11 with you mouse ID you got above):

xinput list-props 11

Or you can also view the current button mapping with

xinput get-button-map 11

You have to get the USB ID with:

BUS 002 Device 003: ID 1a7c:0168 Evoluent VerticalMouse 3 Wireless

Then, with your favourite text editor, you edit/create the conf file:

sudo emacs /usr/share/X11/xorg.conf.d/90-evoluent.conf

Then substitute with your USB ID and button mapping you like by ordering the buttons ID:

Section "InputClass"
Identifier "Evoluent"
MatchUSBID "1a7c:0168"
Option "ButtonMapping" "1 4 3 2 5 6 7 8 9 10 11 12 13"

9 thoughts on “Evoluent Mouse with Ubuntu 11.04 and 11.10”

  1. Hello. Nice post. I have the Evoluent VM2 and it stopped working under natty 11.04 64b. Any insight ? thx. Boo

    1. Hi Boo,
      I just switched my Ubuntu 11.10 32 bits to 64 bits and the mouse’s still working. Is your mouse still detected? You could try checking with xinput list at the command line.

      1. Denis, here is the result of the xinput list command line:
        `Kingsis Peripherals Evoluent VerticalMouse 2 id=9 [slave pointer (2)]`
        I followed the whole process you describe, creating the conf file but without success… :-(

  2. Since this is the first post to come up from google about getting the Evoluent mouse working with ubuntu I figured I would let you know how to get buttons configured with ubuntu 11.10 and possibly future releases.

    First off, ignore any webpage which uses udev or HAL rules as those are deprecated for this purpose. xorg.conf.d is the new standard, plugs directly into udev, and, when the device is correctly configured, works without errors. This is important if you are using Evoluent from a laptop and plug it in after you boot up as udev fires an add message which eventually trickles down to xorg looking for an InputClass which matches the added device. This allows you to also hot swap the mouse, which I need. My conf file is located as

    /usr/share/X11/xorg.conf.d/90-evoluent.conf #This changed in 10.10 from /usr/lib/X11/xorg.conf.d/ to the /usr/share/X11

    The file looks like:

    Section “InputClass”
    Identifier “Evoluent VerticalMouse 4”
    MatchUSBID “1a7c:0191”
    Driver “evdev”
    Option “ButtonMapping” “1 2 3 4 5 6 7 9 2 8”

    The Identifier is the string I call the device. MatchUSBID is the usb id that I get from an lsusb command. The device should be easy to tell apart as it’s called something like “Evoluent VerticalMouse 4”. The driver option I think is needed as the script fails to run with errors which I will tell below. The ButtonMapping options will map the lower thumb button as “back” the upper thumb button as “foward” and clicking the wheal to map to a middle click. I found http://wiki.birth-online.de/know-how/software/linux/remapping-mousebuttons to be a great resource. Use xev to get the button press numbers. The ButtonMapping option should be thought of as “when I press button N I want to trigger the standard option X” where N is the location in in the string and option X is the standard button action to take. For example, in this situation I want button 10 (lower thumb button) to act like it is the standard button 8 which is Thumb1. I also want button 9 (the roller click) to act like is the standard button 2 which is the middle click. This actually does cause the emulation to happen and running xev with this option will show what use to be button 10 now button 8 and what was button 9 to now be button 2.

    Note that once you have this config file located correctly a restart seems to be required. Otherwise strange errors like the following start showing up.

    [ 3597.823] (II) XINPUT: Adding extended input device “Evoluent VerticalMouse 4” (type: MOUSE)
    [ 3597.823] (II) Evoluent VerticalMouse 4: initialized for relative axes.
    [ 3597.824] (**) Evoluent VerticalMouse 4: (accel) keeping acceleration scheme 1
    [ 3597.824] (**) Evoluent VerticalMouse 4: (accel) acceleration profile 0
    [ 3597.824] (**) Evoluent VerticalMouse 4: (accel) acceleration factor: 2.000
    [ 3597.824] (**) Evoluent VerticalMouse 4: (accel) acceleration threshold: 4
    [ 3597.824] (II) config/udev: Adding input device Evoluent VerticalMouse 4 (/dev/input/mouse0)
    [ 3597.824] (**) Evoluent VerticalMouse 4: Applying InputClass “Evoluent VerticalMouse 4”
    [ 3597.824] (II) Using input driver ‘evdev’ for ‘Evoluent VerticalMouse 4’
    [ 3597.824] (II) Loading /usr/lib/xorg/modules/input/evdev_drv.so
    [ 3597.824] (**) Evoluent VerticalMouse 4: always reports core events
    [ 3597.824] (**) Evoluent VerticalMouse 4: Device: “/dev/input/mouse0”
    [ 3597.824] (EE) Evoluent VerticalMouse 4: Couldn’t open mtdev device
    [ 3597.824] (**) Evoluent VerticalMouse 4: ButtonMapping ‘1 2 3 4 5 6 7 9 2 8’
    [ 3597.824] (EE) ioctl EVIOCGNAME failed: Inappropriate ioctl for device
    [ 3597.881] (EE) PreInit returned 8 for “Evoluent VerticalMouse 4”
    [ 3597.881] (II) UnloadModule: “evdev”
    [ 3597.881] (II) Unloading evdev

    With this setup working in ubuntu 11.10 after a restart, I can hot swap the mouse and the button mappings work. I really hope this helps other people as this took almost 6h of reading different docs to figure out.

    1. Oh BTW, this also seems to work for Ubuntu 12.04, 12.10 and 13.04. I am guessing this setup is going to work until xorg changes dramatically which doesn’t happen very often but I will try to keep this updated as need be. This sort of system backbone doesn’t change very often at all.

  3. Sweet, thanks. I am going to reference this as I tinker with my setup. I have the wired mouse at work and the wireless version at home… and the button mappings are different, which is enough to make me insane.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s