My distro of choice is Kubuntu, a version of Ubuntu that is integrated with the KDE Desktop. Kubuntu has gone through some growing pains of late, since the latest version has formally adopted the latest version of KDE’s desktop, KDE4, as it’s official GUI. Unfortunately, KDE4 isn’t quite finished yet and it looks like it won’t be a real boy until they release KDE 4.2. Those birth pains are worthy of their own rant, but that’s a topic for another day.
Today’s topic is the utterly abysmal way that Ubuntu and Kubuntu support mouse buttons. And it is today’s topic because not only is their support of mouse buttons abysmal, but as of their latest release they’ve actually taken a step back and gone from abysmal to nearly useless.
Back in the mists of time when Apple mice had one button and PC mice tended to have two, mice attached to a Unix box often had three. Unix users, unphased by the added complexity of an extra button, programmed the button so that it would easily perform various tasks for them while they were doing their work. As a result, Linux distributions pretty much have no trouble at all supporting three-button mice, and even have ways to make two-button mice act like three-button mice.
This is all well and good if you’re still living back in 1996. But now it’s nearly 2009, and you can go into a freaking Officemax or Office Depot or Staples or even Wal Mart for crying out loud and buy a mouse with as many as 7 to 10 buttons on it… and Linux will still support three.
Before I get to the rant portion of my rant, I want to be fair here — Linux developers are working at a disadvantage when it comes to supporting mice. There are a lot of mice on the market, and while both Windows and OSX provide generic driver support for most mice, mouse manufactures provide their own enhanced drivers to enable the extra buttons and features that the extra-endowed mice come with… and they don’t lift a finger to do that for the Linux platform, because Linux is (of course) a threat to our American way of life. So Linux developers are forced to re-invent the wheel where mouse driver functionality is concerned, and since they’ve also been forced to do the same thing for more important technologies (like bluetooth support and wireless networking), progress hasn’t been what you might call “dramatic.” In fact, the rule of thumb has pretty much been “Linux will probably support all your basic mouse functions, but if you want to do anything clever with your mouse you’re going to have to muck around with configuration files and probably crash your X Server at least twice before you sort of get it working.”
But for a brief, glorious moment in the history of Linux mouse driver development that began to change. A bloke named Olli Salonen came up with a landmark application in the world of mouse driver configuration. He called it btnx, which follows in the venerable tradition of giving good Linux applications obscure and occasionaly stupid names. What it did was outstanding: it figured out what signals your mouse sent when you clicked a button and let you assign commands to those mouse clicks.
Training btnx to recognize mouse events was relatively simple, though it could get tedious: first it learned to recognize when a signal was coming from the mouse, then it learned to recognize the difference between each mouse button. Once it did that, you were able to configure each button command separately, and that was pretty much it.
With btnx I was able to get my Logitech MX Revolution mouse to behave exactly the same way I’d set it up to work in my Windows partition, and it worked in every application I ran in Linux except for Firefox 3.0 (because the Firefox 3.0 developers tore a page from the Gnome UI development handbook and decided they knew what I wanted my mouse buttons to do better than I did, even though they were completely wrong).
I first learned about btnx when I was using Ubuntu 7.04 (the “Feisty Fawn” release), and it was a hallelujiah moment for me. I was able to configure the two thumb buttons on my mouse so that they emulated the shift and alt keys, which made it easier to access certain commands in Inkscape that I used a lot. When I wound up buying my beloved Logitech MX Revolution mouse I was able to completely customize the extra buttons to give me extra navigation controls, to active the Shift, Ctrl and Alt keys via button presses, and even to remap the “touch to search” button to act as the middle mouse button (which at one point the native Logitech drivers weren’t able to do without using a third party driver supplement).
I used btnx with the 7.04 (“Feisty Fawn”) release of Ubuntu and Kubuntu, the 7.10 (“Gutsy Gibbon”) release, and the 8.04 (“Hardy Heron”) release. Then when 8.10 (“Intrepid Ibex”) hit beta, btnx stopped working. On September 14, Olli Salonen posted the following message on his site:
Good and bad news. Bad news first. Ubuntu Intrepid Ibex, which is to be released in October, breaks the foundations that btnx was built on. It seems that the kernel input event pipes can no longer be read. It is most likely related X.Org v.7.4. This means I will stop all development of btnx.
The “good news” was that evdev, an all-in-one Linux driver, had progressed to the point where it could replicate most of btnx’s functionality as long as you were willing to delve into a rather arcane configuration process. But even after going through that heightened level of frustration it’s not possible to replicate the feature that I most prize — the ability to assign shift, ctrl and alt keyboard commands to mouse buttons.
In short, some jackass in the Ubuntu development group decided it was OK to break a piece of software that I had come to view as evidence that Linux had reached the point where it was overcoming not just the big obstacles to end user acceptance, but it was actually starting to work on the small stuff… and didn’t bother replacing it with anything just as good or better. And the workarounds that exist don’t actually help me much, so I find myself considering going back to a previous version of Kubuntu, or even switching to another distribution entirely (btnx apparently still works on openSuSE and Fedora just to get that functionality back.
I never realized exactly how much I depended on this little program until the Ubuntu developers broke it. The thought of having to learn the quirks of another damn distro just to get that functionality back is not a happy one, but I’m actually considering it.
So thanks for breaking btnx, Ubuntu devs! And while I’m at it, thanks for not saying anything official about it, and thanks for not announcing any replacements for it!