“IBM Scrollpoint Mouse“, by LenovoAfter all these years (over 10), I finally stumbled upon a Linux driver for my IBM Scrollpoint Mouse that actually supports horizontal scrolling – BOOYAH!!!!!!! 😀 I’ve had this beautiful little mouse with the glowing blue scroll button for years and had it fully working under Linux EXCEPT that I could not use the little blue, lit-up scroll pushey-thingy to scroll horizontally. Scrolling vertically worked so-so (a bit too sensitive/jerky/fast) by default. It appears to have three different sensitivities in the vertical axis so that if you push gently, it scrolls slowly, then speeds up as you push harder (up or down). It’s much easier for quick scrolling than having to sit and spin a wheel hard! Now I feel this would be the perfect mouse, if Lenovo would just make a WIRELESS version!

I had tried to pay a C-programmer friend years ago to write me a driver for it (to no avail) and even considered trying to figure out how to hack one up myself to support this, but I knew it would likely turn into a huge project with a very steep learning curve. Besides, I really didn’t want to go to that extreme anyway. Every few years I’ve googled around to see if anyone else had already found a way to get it to work, and today I finally got a hit! (at https://github.com/pdewacht/hid-scrollpoint/). It’s a kernel driver called “hid-scrollpoint”, written by Peter De Wachter. (Thank you Mr. De Wachter!) You’ll need to download all three files (a Makefile, a C header file, and a C source file) from the first link mentioned above, on GitHub! You will also need to install your kernel headers to build. NOTE: If you don’t care about horizontal scrolling and just want smooth vertical scrolling and use of all three buttons, then just skip all this and do only steps 2 and 5 below.

I later added the optional “AccelerationProfile” line to speed up the mouse a bit when moving it fast – see http://www.x.org/wiki/Development/Documentation/PointerAcceleration/. You can also tweak the “16” values later if you like, though these defaults seem to work very well for me. After creating this file, or adding this section to your /etc/X11/xorg.conf, you’ll need to restart X for this to take effect.

3) Plug in your IBM/Lenovo USB Scrollpoint mouse and do:

$>lsmod | grep "hid"

You should see at least these three drivers (loaded in order from bottom up):

If the pair of four-digit hex numbers you find there (mine are 04b3:3108, but ymmv!) isn’t in the “MatchUSBID” line you added, then modify that line to include them and restart X. If still no go, make sure you ran “depmod -a” as root and that the file “hid-scrollpoint.ko” got installed, see if you can do a “sudo modprobe hid-scrollpoint” without error, then reboot and restart X! If modprobe says he can’t find “hid-scrollpoint” after running “depmod -a”, reboot and try modprobe again.

4) There’s one more issue you’ll likely run into: By default, my system likes to load the “hid_generic” module before “hid_scrollpoint”. If that is the case for you, then you’ll see this when you run the aforementioned “lsmod” command:

hid_scrollpoint 1168 0
hid_generic 907 0
usbhid 33909 0

In this case, you’ll have to find some way to force “hid_scrollpoint” to load FIRST. I did it in my startup. NOTE: It does NOT seem to hurt to go ahead and load both of these in the right order using “modprobe” at system startup even if the mouse is not attached at startup, ie. with a laptop / or if switching between other mice. Also, once loaded in the proper order, they fortuitously remain loaded even after unpluging the mouse and / or switching to a different USB mouse, nor does it seem to affect my touchpad or trackpoint (I have both on my Dell Latitude D620 laptop). After having the drivers in the right order and then starting X, both horizontal and vertical scrolling should work smoothly in applications, such as Firefox, that support it, ie. have horizontal scrollbars. You can adjust the numerical parameters for “VertScrollDelta” and “HorizScrollDelta” to something other than “16” if you want faster / slower scrolling! Running “xev” should also show the scroll events as buttons 4 and 5 (vertical) and 6 and 7 (horizontal)! I also did not have to change any of Firefox’s default scrolling options.

5) You must RESTART X or REBOOT!:

If the drivers are in the wrong order, then horizontal scrolling will not work. Anyway, here’s my /var/log/Xorg.0.log file showing the pertinent lines and how they should look (ymmv):