Tuesday, June 23, 2009

ThinkPad SL500 and Linux

I like the ThinkPad SL500. I know it catches flack for basically being an IdeaPad in ThinkPad clothing, but I don't care. It works well enough and the price was certainly right. Linux works almost flawlessly on it, out of the box (caveats, I don't have a fingerprint reader or Bluetooth; I use the SDHC card reader, trackpad, WiFi, USB drives, etc). The few things that didn't work were, e.g., the volume controls, hotkeys, and the screen brightness. These were all cured with a relatively painless kernel upgrade. I'm running Ubuntu 9.04 which, as of this writing, is using a 2.6.28-13 kernel; these steps bring it up to the 2.6.30 kernel with an additional ThinkPad SL500 (and perhaps other SL models) specific driver module.

  1. Obtained the Latest kernel from: http://kernel.ubuntu.com/~kernel-ppa/mainline/ (e.g., http://kernel.ubuntu.com/~kernel-ppa/mainline/v2.6.30/. Files I downloaded for my Intel Core 2 Duo SL500:

    • linux-headers-2.6.30-020630_2.6.30-020630_all.deb

    • linux-headers-2.6.30-020630-generic_2.6.30-020630_i386.deb

    • linux-image-2.6.30-020630-generic_2.6.30-020630_i386.deb

    • linux-source-2.6.30_2.6.30-020630_all.deb

  2. Install the kernel:
    $ sudo dpkg -i linux-headers-2.6.30-020630_2.6.30-020630_all.deb
    $ sudo dpkg -i linux-headers-2.6.30-020630-generic_2.6.30-020630_i386.deb
    $ sudo dpkg -i linux-image-2.6.30-020630-generic_2.6.30-020630_i386.deb
    $ sudo dpkg -i linux-source-2.6.30_2.6.30-020630_all.deb

  3. Reboot.

  4. Download kernel module from: http://github.com/tetromino/lenovo-sl-laptop/tree/master (I clicked through to download the 'raw' versions of Makefile and README and lenovo-sl-laptop.c to a local directory). Change into the directory where those files reside and:
    $ make all
    $ sudo cp lenovo-sl-laptop.ko /lib/modules/`uname -r`/kernel/drivers/misc
    $ sudo depmod -v

  5. Configure the rest of the system:
    $ sudo depmod
    $ sudo gedit /etc/modprobe.d/blacklist.conf
    blacklist thinkpad-acpi # added (anywhere in the file)

    $ sudo gedit /etc/modprobe.d/lenovo-sl-laptop.modprobe.conf
    options lenovo-sl-laptop control_backlight=1

    $ sudo gedit /etc/rc.local
    # Added before the exit 0 line:
    echo 0 > /sys/module/video/parameters/brightness_switch_enabled
    modprobe lenovo-sl-laptop

    $ sudo /etc/rc.local

And voila, the brightness control, volume, etc., should be working! I love it when a plan comes together.


  1. Thanks! This fiex my long SL500 trubbles..

    btw. I had problems with my nvidia drivers, found the solution here:


    Rob Audenaerde

  2. Hi i have a lenovo sl500 too, with nvidia card. I have some issue with Graphic card temperature. The graphic card temperature is now at 66°C and im just surfing the internet. when i play some 3d game it goes up to 100°C. Don't you have same problems?

  3. Alright!! These steps worked wonderfully for my SL500 with Linux Mint 7. Thank you!

    The only snag was that the latest kernel (2.6.31) didn't work for me -- I installed it without any apparent problems, but when I rebooted and tried 2.6.31, I got a black screen. I blame the kernel. :P

    So I booted back into 2.6.28 and deleted 2.6.31 and installed 2.6.30 (as in these steps) and followed the steps and it works great. The backlight bugginess is completely fixed -- no more random flickers and the brightness controls (Fn-Home/Fn-End) work now, as do the volume controls, EXCEPT oddly, the mute button "works" in that I press it and I get a visual notification that the volume is muted (red X over the volume icon, etc.) but the sound isn't actually muted! I suspect this might be an OS thing. Hmm...

    Great work though on this fix! The backlight flickering was starting to drive me nuts. :D