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.