Picture of Jürgen Kreileder

Updated Logitech MX1000 Configuration

XOrg 6.9 and later come with a new evdev driver. Configurations using the old evdev protocol hack no longer work. So here’s an updated version of my old MX1000 configuration:

  • Build a udev rule to give the mouse device a static name: I’m using
    ACTION=="add", \
      KERNEL=="event*", \
      SUBSYSTEM=="input", \
      SYSFS{manufacturer}=="Logitech", \
      SYSFS{product}=="USB Receiver", \
      NAME="input/mx1000"

    in /etc/udev/rules.d/010_local.rules.
    After restarting udev and replugging the mouse, you should see a device named /dev/input/mx1000.

  • /etc/X11/xorg.conf:
    Section "InputDevice"
     Identifier "MX1000"
     Driver     "evdev"
     Option     "CorePointer"
     Option     "Device"    "/dev/input/mx1000"
    EndSection
  • ~/.xbindkeysrc:
    (You have to install xbindkeys and xvkbd for this; I’m starting xbindkeys in ~/.gnomerc)
    # Backward and Forward buttons
    "xvkbd -text "\[Alt_L]\[Left]""
      m:0x10 + b:8
    "xvkbd -text "\[Alt_L]\[Right]""
      m:0x10 + b:9
    
    # "Cruise Control" disabled:
    #"xvkbd -text "\[Page_Up]""
    #  m:0x10 + b:11
    #"xvkbd -text "\[Page_Down]""
    #  m:0x10 + b:12
    
    # "Cruise Control" enabled:
    # Work-around extra events
    "~/bin/click 4"
     m:0x10 + b:11
    "~/bin/click 5"
     m:0x10 + b:12
    
    # Application-Switch button
    # A-Tab doesn't work
    # Use it as another Forward for now
    "xvkbd -text "\[Alt_L]\[Right]""
      m:0x10 + b:10

    Using the Application-Switch button for switching windows in GNOME doesn’t work because it would require holding down the Alt key while pressing Tab several times, xvkbd can’t do that. I’m using the button as another Forward now, it’s easier to reach than the real Forward button.
    Defining actions for the Cruise Control buttons only makes sense when Cruise Control is disabled (you can disable it with lmctl or the Logitech Mouse Applet). If it is disabled, the buttons generate 11 and 12. When it is enabled, they generate a single button 11 or 12 event and then a series of button 4 or 5 events just like scrolling the wheel does.
    I have no idea why the mouse generates 11 or 12 before starting normal scrolling in Cruise Control mode. I’m mapping 11 and 12 to a little utility (click by Jeremy Nickurak) which replaces these bogus events with normal scroll events.

  • At this point the Backward and Forward buttons should work in GNOME, KDE, and -based browsers. Horizontal scrolling should work in GNOME and KDE.
    Mozilla-based browser like need two additional changes to get horizontal scrolling working with the tilt wheel: Open about:config and set
    mousewheel.horizscroll.withnokey.action = 0
    mousewheel.horizscroll.withnokey.sysnumlines = true

January 18th, 2006: The evdev driver in XOrg 6.9 is broken on big-endian machines like powerpc. Here’s a fix.

This article Jürgen Kreileder is licensed under a Creative Commons Attribution-NonCommercial-NoDerivs 3.0 Unported License.

33 Comments

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post. Both comments and pings are currently closed.

Marcus said

I tried this without using udev – it doesn’t seems to work. After installing udev everything works as described.

Randall said

Make sure you put a backslash in front of each left square bracket [ for the .xbindkeysrc file. It took me a while to figure out why my back/forward buttons were just spitting out “[ALT_L][Left]” and “[ALT_L][Right]” as text rather than actually doing those actions.

Here’s what one line should look like:

“xvkbd -text “\[Alt_L]\[Left]””
m:0x10 + b:8

Good point. I’ve properly encoded the backslashes now.

Hugues said

Wow, I can’t thank you enough for this one.

Charlie said

I restarted udev after making 010_local.rules in /etc/udev/rules.d and /dev/input/mx1000 was never created.

My 010_local.rules looks like this:

ACTION==”add”, \
KERNEL==”event*”, \
SUBSYSTEM==”input”, \
SYSFS{manufacturer}==”Logitech”, \
SYSFS{product}==”USB Receiver”, \
NAME=”input/mx1000″

I added the following to my .xbindkeysrc:

# Backward and Forward buttons
“xvkbd -text “\[Alt_L]\[Left]””
m:0x10 + b:8
“xvkbd -text “\[Alt_L]\[Right]””
m:0x20 + b:9

# “Cruise Control” enabled:
# Work-arround extra events
“~/bin/click 4”
m:0x10 + b:11
“~/bin/click 5”
m:0x10 + b:12

# Application-Switch button
# A-Tab doesn’t work
#User it as another Forward for now
“xvkbd -text “\[Alt_L]\[Right]””
m:0x10 + b:10

Any ideas? This is Debian ETCH

Daniel said

If I use the tilt-wheel in a window accepting inputs, then the characters “o” and “p” appear when tilting left and right.

This appears for example in a console window when I want to insert s.th. with middle mouse button and accidentially tilting.
Or I want to tilt in a webpage and the cursor is in an input field.

I can even see the KeyPress event in xev, right before the ButtonPress event:

KeyPress event, serial 31, synthetic NO, window 0x2800001,
root 0x135, subw 0x0, time 1347233461, (45,116), root:(49,739),
state 0x2010, keycode 32 (keysym 0x6f, o), same_screen YES,
XLookupString gives 1 bytes: (6f) “o”
XmbLookupString gives 1 bytes: (6f) “o”
XFilterEvent returns: False

ButtonPress event, serial 31, synthetic NO, window 0x2800001,
root 0x135, subw 0x0, time 1347233477, (45,116), root:(49,739),
state 0x10, button 6, same_screen YES

Anyone seen this before? Any ideas to get rid of it?

Thanks!
Daniel

Daniel said

Hmpf… got it…
Do no use
Option “SendCoreEvents” “true”
in xorg.conf for this mouse device section….

Best,
Daniel

Charlie, you can use udevtest to check if the rule works. Note that “/etc/init.d/udev restart” isn’t good enough, you also you to re-plug the mouse.

ketsugi said

Can you post the configuration for the Intellimouse with Tilt Wheel?

I don’t have a IntelliMouse at hand currently. But you should be able to get the correct values for the udev rule with ‘udevinfo -a -p /sys/class/input/inputN‘, replace N with 1, 2, 3, etc. until you find the right device.

Christian Kowalski said

Everything works for me except the thumb buttons. Backward button generates on xev

ButtonPress event, serial 27, synthetic NO, window 0x3000001,
root 0x52, subw 0x3000002, time 2972528634, (28,32), root:(42,101),
state 0x10, button 125, same_screen YES

but i can’t map button 125 in .xbindkeysrc and the other two thumb buttons don’t even generate an event. Any suggestions what went wrong?

I’m using Ubuntu Dapper Flight 6 here.

Christian Kowalski said

seems to be a xgl issue. found some hints on the net that xgl will show 12 button mice as a 7 button mouse only. but no solution found so far…

Mark Kennedy said

At least for me on an FC5 box, the udev rule didn’t work until i changed the case of “Receiver” to “RECEIVER” in the SYSFS{product} phrase which is what /proc/bus/usb/devices lists in the ‘Product’ attribute for it.

Christian Kowalski said

Problem was solved with a more recent XGL/compiz version. For Debian you can use
deb http://ubuntu.compiz.net/ dapper main
in /etc/apt/sources.list.
The last thing which doesn’t work until now is to bind the application switcher button to F12. F12 in compiz is really nice to switch applications!

Christian Kowalski said

Evdev stopped working after apt-get dist-upgrade (Ubuntu Dapper Flight 6 i386) without changing the configuration :-(
Any suggestions what went wrong?

Udev rule still works and device exists:
crw-rw—- 1 root plugdev 13, 66 2006-05-11 10:07 /dev/input/mx1000

Xorg.93.log:

(II) evdev brain: Rescanning devices (1).
(EE) PreInit returned NULL for “Logitech MX1000”
(WW) No core pointer registered
(II) XINPUT: Adding extended input device “evdev brain” (type: evdev brain)
(II) XINPUT: Adding extended input device “Generic Keyboard” (type: KEYBOARD)
(II) XINPUT: Adding extended input device “NVIDIA Event Handler” (type: Other)
(II) evdev brain: Rescanning devices (2).
No core pointer

Fatal server error:
failed to initialize core devices

Jeb Wilson said

EVDEV seems to crash X. I get a:
(EE) PreInit returned NULL for “Configured Mouse”
No Core Pointer

the /dev/input/mx1000 is there! Any idea?

Niber said

In the xorg.conf there must be a input device named “Configured Mouse”. Check it out. (or let us know the section of your input device)
And yes, I think it should be “Logitech USB RECIEVER” and not “Logitech MX1000″
My input device is:
Section “InputDevice”
Identifier “Configured Mouse”
Driver “evdev”
Option “CorePointer”
Option “Dev Name” “Logitech USB RECIEVER”
etc

rjc said

Logitech USB Receiver – nor Reciever

Christian Kowalski said

You don’t have to use “Configured Mouse” – it’s just the default identifier. Use your identifier here.
For the Option “Name” have a look at /proc/bus/input/devices what the correct name is. For me it’s “Logitech USB RECEIVER” but it also may be “Logitech USB Receiver”.
Everything worked fine and suddenly after apt-get dist-upgrade it doesn’t start anymore. Also tried to use
Option “Name” “Logitech USB RECEIVER”
instead of
Option “Device” “/dev/input/mx1000”
without any success.

Working configuration before updating:

Section “InputDevice”
Identifier “Logitech MX1000”
Driver “evdev”
Option “CorePointer”
Option “Device” “/dev/input/mx1000”
EndSection

Section “ServerLayout”
Identifier “Default Layout”
Screen “Default Screen”
InputDevice “Generic Keyboard”
InputDevice “Logitech MX1000”
EndSection

The Preinit Null problem is because evdev only checks devices that match the name event*. If you use udev tricks to rename it it won’t work. This gentoo forum link explains why its better to always use

Option “Name” “whatever matched your udev script”

instead of

Option “Device” “/dev/input/mx1000”

http://forums.gentoo.org/viewtopic-t-465797-highlight-logitech+preinit+returned+null.html

Christian Kowalski said

Thank you verry much!

Option “Name” “Logitech USB RECEIVER”

It’s working now!!!

Christian Kowalski said

You can’t map F12 to the application switch button but for compiz you can map the scale plugin to “Button10” instead of “F12” (gset-compiz -> shortcuts -> plugins -> scale). This has the same effect:

source: http://www.ubuntuforums.org/showthread.php?t=188302&page=8#72

nick said

Although all of this works quite well, I have a problem on a notebook I am trying to use this. X wont start ( black screen when the logitech mouse is not attaced).
evdev seems to be the problem as I have the same result when using the evdev driver insteas of “mouse”.
Is there a workaround for this?

dayv said

I had to change the UDEV configuration to get this to work.

Changing Device /dev/input/mx1000 to Name Logitech USB Receiver didn’t
work for me, but this did.

Change
ACTION==”add”, \
KERNEL==”event*”, \
SUBSYSTEM==”input”, \
SYSFS{manufacturer}==”Logitech”, \
SYSFS{product}==”USB Receiver”, \
NAME=”input/mx1000″

To:
ACTION==”add”, \
KERNEL==”event*”, \
SUBSYSTEM==”input”, \
SYSFS{manufacturer}==”Logitech”, \
SYSFS{product}==”Logitech USB Receiver”, \
NAME=”input/mx1000″

Then Device “/dev/input/mx1000” worked flawlessly.
This combined with the xbindkeys configuration from above and I have
back/forward, scroll, etc.

Hope this helps.

nick, as far as I know there’s no work-around for that problem. AllowMouseOpenFail doesn’t work for evdev.

Dawid Igras said

i get this

(EE) PreInit returned NULL for “MX1000”

(EE) evdev brain: Unable to initialize inotify, using fallback. (errno: 38)
(EE) evdev brain: Unable to initialize inotify, using fallback. (errno: 38)
(EE) evdev brain: Unable to NONBLOCK inotify, using fallback. (errno: 9)
No core pointer

and X goes down

/dev/input/mx1000 is present it should work

any ideas??

Talvi said

Through trial and error and much frustration that has less to do with Jürgen’s instructions and more with me not following said instructions ;) I finally got my setup working. I’ve got my MX1000 connected to the PS/2 port so here’s what I had to change:

In udev rules, replace these two lines:
SYSFS{manufacturer}==”Logitech”, \
SYSFS{product}==”USB Receiver”, \

with this one:
SYSFS{name}==”PS2++ Logitech MX Mouse”, \

The evdev driver works even if the mouse is not connected via the USB port, but like Jürgen said in the comments for the original post, PS/2 devices have limited event support:

– Up/down cruise control has always worked for me out-of-the-box so I don’t use xbindkeys to map those to any events. (I’m using Debian Etch with X.org 7.0.22 and KDE 3.5.3 if that’s any use to anyone.) But both left and right cruise control buttons are recognized as the downward cruise control event.

– Tilting the wheel is recognized as back and forward but just the opposite so that they’d actually be useful. :( Right-tilting goes back and left-tilting forward.

– App switch event is not recognized at all so no use mapping it to any events with xbindkeys.

Since I was primarily looking for browser back/forward events, I’m not too disappointed with the other buttons not working. I’d rarely use them anyway. If I was, I’d definitely switch from connecting via the PS/2 adapter to “plain” USB, but I prefer using the available USB connectors for other devices.

And here’s another tip for KDE users: I’m using a symlink to /usr/bin/xbindkeys under ~/.kde/Autostart to start xbindkeys. Probably not the ideal place but it does the trick.

Millions of thanks for the instructions! :)

[…] Thanks to Jürgen Kreileder, for his blog entry that this is based upon, and various other places i found while trying to fix the problems i had with his config. […]

Bob Clough said

I have written an updated version of this page, integrating some bugfixes foud here and around the web. You can see it at http://www.thinkl33t.com/2006/09/logitech-mx1000-under-ubuntu-606lts-dapper-drake/

I got the my mouse to be recognized with all the buttons, without resorting to the udev rules.

However, I cannot get all the buttons to be recognized when the bluetooth dongle is in bluetooth mode (that is, after running hid2hci). Checking /proc/bus/input/devices bitmasks (and crossreferencing with /usr/include/linux/input.h) shows that indeed, the driver for the bluetooth protocol only reports that it supports the basic 5 buttons (looking at the keys mask) and one fewer event (namely, it doesn’t support absolute events, which to be honest, I’m not sure what that means).

Has anyone trod down this path before? It’d be really great if I could get a Bluetooth hub *and* all 12 buttons working.

[…] section); the one from floam.sh.nu is also quite good though a bit aging. OTOH, there is another blog entry I really like, as it gives more detail about customizing buttons and browser (firefox) settings. […]

Sophus said

Now, i have tried for hours for getting this works :)
I was completely stock, when i had maked my udev rule, because i couldnt get mx1000 to appear in /dev/input…
But now, it works.. So i would publish my solution :)
I’ve used:
ACTION==”add”, \
KERNEL==”event*”, \
SUBSYSTEM==”input”, \
SYSFS{../name}==”Logitech USB RECEIVER”, \
NAME=”input/mx1000″

Having this in your ~/xbindkeysrc works fine to switch tabs in Firefox & Chromium/Chrome:

“/usr/bin/xvkbd -xsendevent -text “\[Control]\[Next]””
m:0x0 + b:6
“/usr/bin/xvkbd -xsendevent -text “\[Control]\[Prior]””
m:0x0 + b:7

However, this does not work to switch tabs in Nautilus or Gnome-Terminal which is frustrating because the same actual keyboard combinations of Control + PageUp/PageDown DO perform the tab switch actions in those programs…

Solved my problem by installing xautomation and modifying my xbindkeysrc as follows:

“xte ‘keydown Control_L’ ‘key Page_Down’ ‘keyup Control_L'”
m:0x0 + b:6
“xte ‘keydown Control_L’ ‘key Page_Up’ ‘keyup Control_L'”
m:0x0 + b:7