Le blog de Olivier Crête



December 2006

RSS 2.0

Log in


During the last few weeks, I’ve been playing with my new toy, a bluetooth Logitech Cordless Desktop MX™ 5000 Laser (could they make a shorter name?). I got it as a replacement for my MX 3100 which has battery problems (and the battery on its mouse isn’t replaceable, so they sent me a whole new kit, thanks Logitech!). The MX 5000 has a pretty standard Bluetooth MX1000 mouse, but the really cool thing is the small LCD on the keyboard.

Sadly, there was no way to control it from Linux. I hoped it would be similar to the G15 for which tools exist, but its not. So I got on a quest to use it to its full potention on my favorite Free operating system. Luckily, I found someone who had a similar problem on Windows and did a lot of reverse engineering and made a .NET library. So armed with this library and a Windows usb sniffer, I managed to get most of the screen displaying functionality working. And I created mx5000tools. The core of the tools is a library that incorporates all of my knowledge off the keyboard’s control. There is also a command line utility called mx5000-tool that exposes most of the functionality of the lib for scripts and such. The HID reports returned by some keys of the keyboard are not currently interpreted by the HID driver in my kernel, so I made a small deamon (mx5000d) that translates them into usable ones and then forwards them using uinput (so X can read them with evdev).

I still have some limitations, it seems that some HID reports are not passed to hiddev by the Linux usb hid subsystem, so we dont get events from some of the keys. And it does not work in Bluetooth mode on Linux because Bluez does not yet have full HID support with hiddev. Finally, we still do not know how to change the content of the menus.

I’d also like to improve mx5000d to have features similar to the Windows software with notifications of IM messages and the name of the currently playing song. I guess galago and the d-bus interfaces to gaim/rhythmbox will be pretty useful there.

6 answers to “mx5000tools”

No avatar

Salut, j’ai essayé, autant y’a des trucs que j’arrive bien à faire marcher (temps, icones, etc ..) autant je comprend pas du tout comment on affiche du texte :p.
Y’aurais moyen de fournir un script d’exemple ?

No avatar


Sorry I do not speak French. I am playing around with the mx5000-tools, however I am confused as to what, or how the hid input line looks like. I would love to see an example of how to properly use your application. Currently I just get core dump errors, as I imagine it has to do with me improperly giving a hid input device.



Désolé je ne parle pas français. Je joue autour avec le mx5000-tools, toutefois je suis confus quant à ce qui, ou comme à quoi la ligne d’entrée cachée ressemble. J’aimerais voir un exemple de la façon employer correctement votre application. Actuellement j’obtiens juste des erreurs de vidage d’mémoire, comme j’imagine qu’elle doit faire avec moi donnant incorrectement un dispositif d’entrée caché. Sincèrement,

Picoseconde désolée au sujet de la traduction terrible.

No avatar

It would be very interesting if we have LCDproc support for mx5000 keyboard.
As far as i see it’s not a big problem to implement it using mx5000tools.
The only problem is – who is able to do it.
And yes, thanks, for mx5000tools, just don’t throw it away! 😉

No avatar

The core of mx5000tools is in libmx5000, so it shouldn’t be too hard to do..

No avatar

Christian Jodar has written a driver for lcdproc for mx5000. But when it updates the screen the mouse slows down, so it’s impossible to use it. It seems that libmx5000 sends data too fast to the keyboard so the receiver cannot handle mouse moves fast. Is there anything we can do about it?

No avatar

Sorry for flooding 🙂

fixed the mouse slowdown – added usleep(500) to mx5000_send_report function to for cycle.

Write a comment:

: (required)


This page is XHTML 1.0 Strict and CSS level 3