This page is about installing the stable version of Debian GNU/Linux (Lenny) on a ThinkPad X200s. Installation is rather easy but does requires you to compile your own kernel due to lack of support for the network cards in Lenny's kernel images (alternative would be to install a kernel image from testing or backports). Please send comments or corrections to comcap at free dot fr.

Initial considerations

Resources

I have used

Hardware configuration

In France, as in several other countries I imagine, it is not possible to customize the Lenovo computers so what you get is a choice of predefined units. Mine is a NS23RFR (Product ID: 74663RG) but there two were minor departures from expected:

  • The quoted weight (1.1 kg) is for the unit without battery, so expect at least 200 g more (see below).
  • The unit contains an additional broadband card.

The main hardware pieces thus are:

  • Intel Core2 Duo CPU L9400 @ 1.86GHz.
  • Intel ICH9M/M-E SATA AHCI controller with 250 Gb SATA disk.
  • Intel Graphics Media Accelerator 4500MHD, with 1280x800 (WXGA) TFT screen.
  • Intel 82567LM Gigabit ethernet card.
  • Intel Wireless WiFi Link 5300 AGN card.
  • Ericsson F3507g mobile broadband card.
  • Intel 82801I (ICH9 Family) integrated audio controller.
  • Bluetooth controller.
  • Webcam.
  • Integrated SD card reader.
  • Fingerprint reader.

It is likely that there is also a modem (the connector is there) but it is undetected under Linux.

Note that lspci (from package pciutils 1:3.0.0-6) incorrectly identifies the wifi card as a Wireless WiFi Link 5100 but don't worry as the iwlagn module (see below) correctly identifies the card (W$$ also reports it as a Wireless WiFi Link 5300).

Weight

  • 1.150 kg without battery (just the unit)
  • 1.350 kg with the 4 cell (default) battery
  • 1.640 kg with the 9 cell (extended) battery

For comparison, the ThinkPad x40 with the 4 cell battery weights 1.230 kg.

Pictures

Here are some pictures of the x200s together with the older x40

x200s x200s (L) and x40 (R)

First impressions

At first, I was a little disappointed by the X200s: it weights a little more than my older X40 and the default battery lasts just a little over two hours, which is equivalent to the X40. The build quality doesn't look as exceptional as it used to be. The shell in particular doesn't feel as solid as the one used on older models (especially bigger ones from the T series). The battery is also not fixed very firmly and does move a bit around when handling the laptop.

After a bit of playing with the X200s, here are a few good things about it:

  • The 9 cell battery can really last for about 8 hours, which is about twice what I could ever get from my X40 with its additional external battery.

  • The fan design is such that it runs continuously (it is thus never really silent) but at a very very low level. This is all the more impressive when using the CPU (I do run computer simulations from time to time). In contrast, the X40 really sounds like an hair dryer when the CPU is in use (this being said, if you like the hair dryer feel, you can have it back by running continuously one process on each core of the CPU).

  • Even under heavy workload, the X200s doesn't get hot at all, all you can feel in you hands or knees are the vibrations of the cooling system, which are more perceptible than usual.

  • The keyboard is really great. This has always been true of all ThinkPad models but the difference in shape ratio between the X40 and the X200s makes the X200s' keyboard really feel more comfortable (although I regret that the left Alt key could have been a bit larger without the inclusion of the useless M$$ Windows key).

  • The form factor of the X200s is cool (it really has the same dimension as an A4 page, except for the extended battery on the back, which is handy for carrying).

Linux compatibility

Apart from the keyboard and trackpad, the main reason I like ThinkPad computers is their suitability for use with Linux: they have a three buttons pointing system and every piece of hardware works (to some extent) under Linux, including basic useful stuff such as screen brightness control and low light keyboard illumination. This is certainly the case for the X200s also. This is made all the more easy that the ThinkWiki site usually contains all the information that you need.

Pre-install steps

The machines comes with M$$ Vista installed which does feature a tool to resize partitions. Unfortunately, the system seems to have some restrictions and even applying the old-fashioned "power user" method called diskpart.exe, I could not shrink the Vista partition to less than 133.62 Gb (for a 250 Gb disk!)

Note that the disk come partitioned as follows

Free space                        1 Mb
/dev/sda1    ntfs SERVICEV003  1.46 Gb (bootable)
/dev/sda2    ntfs SW_Preload   
/dev/sda3    ntfs Lenovo       9.77 Gb

where SW_Preload is the vista partition. Hence, there's about 1.5 Gb at the begining of the disk and 10Gb at the end that is lost for recovery stuff.

I downloaded gparted 0.4.1-2 live CD and shrunk the partition with it. Gparted worked well except that it wrongly indicated some free space between sda1 and sda2. When I launched Vista again it ran for more than one hour (true!) "repairing the file system" but after this everything was OK.

Debian installation

I used an external USB DVD drive with the first two DVDs for Lenny (to enter the boot menu to enable booting from the USB CD, press the "ThinkVantage" button at boot time). Note that as both network cards (ethernet and wireless) are unsupported by the Debian installer kernel for Lenny (2.6.26), you need to install at least components required to compile your own kernel (the netinstall image won't do the job for instance).

I used the 2.6.28 kernel source from experimental. More recently, a 2.6.29 kernel image made its way into sid and you can probably use it (I have only tried compiling the source myself). You will encounter the following problem though, as the kernel is compiled with the CONFIG_ACPI_PROC_EVENT flag unset, you will not be able to use the version of acpid that comes with the Lenny package of the same name.

Wireless

Get firmware from here for kernel versions 2.6.28 or 2.6.29 or there for kernel version 2.6.30 on and put it (uncompressed) in /usr/local/lib/firmware. The module is called iwlagn and the device wlan0.

Note that while I was able to successfully use the wireless with Debian kernel versions 2.6.28-1~experimental.1~snapshot.12762 and 2.6.29-3 it failed under the 2.6.30-6~bpo50+1 version (with frequent losses of connection).

Ethernet

The ethernet module is called e1000e but will support the card, starting from version 2.6.27 only.

X Window

You should be very happy to find out that at the end of the Lenny install your machine launches X without problem (despite the fact that your /etc/X11/xorg.conf is left empty!) By default X is launched in VESA mode with 16bpp depth. I just added

Section "Device"
    Identifier  "Configured Video Device"
    Driver          "intel"
EndSection

to /etc/X11/xorg.conf to use the Intel driver and

Section "InputDevice"
    Identifier  "Configured Mouse"
    Driver      "mouse"
    Option          "CorePointer"
    Option          "Device"              "/dev/input/mice"
    Option          "Protocol"            "ExplorerPS/2"
    Option          "EmulateWheel"        "on"
    Option          "EmulateWheelButton"  "2"
EndSection

to be able to scroll with the trackpad + middle button combination. Everything works fine, including the external VGA port which can be used at a different resolution selectable through xrandr. This being said, hardware acceleration is not working, as documented elsewhere.

ACPI

The message here is everything works fine as long as you are able to fix the mess created by many components of the system trying to do the same thing. The scripts in package acpi-support will be helpful but not entirely functional without some tweaking described below.

CPU frequency scaling

CPU frequency scaling is directly supported by the acpi_cpufreq module (it is probably best to let the kernel know about your CPU by selecting CONFIG_MCORE2=y in the configuration). When using KDE, the CPU frequency scaling is managed by the kpowersave daemon which works fine for this. So you don't need to install an additional frequency scaling daemon.

Suspend to disk

Suspend to disk works out of the box using s2disk from the uswsusp package, granted that you edit /etc/uswsusp.conf to bypass the use of splashy (splash = n), which causes error messages (or try to fix splashy for what it's worth).

This being said, the script /etc/acpi/hibernatebtn.sh (from the acpi-support package) does not work directly as it passes the button event to kpowersave (when KDE is running) which doesn't suspend. But /etc/acpi/hibernate.sh does work. You may want modify the default configuration in /etc/default/acpi-support to SUSPEND_METHODS="pm-utils" to avoid error messages that print out when using the default dbus methods (but these doesn't prevent suspend and wake). This requires the pm-utils package. Suspending to disk occasionally screws up the wireless network modules (especially when suspending several times without rebooting) and there seems to be no other option but to reboot in such cases.

Suspend to ram

s2ram fails with

Machine is unknown.
This machine can be identified by:
    sys_vendor   = "LENOVO"
    sys_product  = "74663RG"
    sys_version  = "ThinkPad X200s"
    bios_version = "6DET33WW (1.10 )"

but using TryMethod sysfs-ram.conf in /etc/hibernate/ram.conf makes hibernate-ram (or pm-suspend) work, once you have passed acpi_sleep=s3_bios to the kernel (in my case using the # kopt= stanza in /boot/grub/menu.lst since I am using grub) as advised on ThinkWiki. With hibernate-ram (hibernate package), you'll see this warning

hibernate-ram:Warning: Tuxonice binary signature file not found.

but this doesn't prevent suspend and wake. The script /etc/acpi/sleepbtn.sh does not work for the reason discussed above about suspending to ram. Directly calling

/usr/share/acpi-support/suspendorhibernate suspend

does the job. Note that selecting SUSPEND_METHODS="pm-utils" in /etc/default/acpi-support will select pm-suspend rather than hibernate-ram.

Sound

Everything OK, including the integrated mic (module snd_hda_intel).

Webcam

The webcam is recognized as a USB Video Class device and handled by the ucvvideo driver

Linux video capture interface: v2.00
uvcvideo: Found UVC 1.00 device <unnamed> (17ef:480c)
input: UVC Camera (17ef:480c) as /class/input/input6
usbcore: registered new interface driver uvcvideo
USB Video Class driver (v0.1.0)

Works like a charm in skype. Another handy program that can capture images and videos through the webcam is ucview. None of these programs is available in Debian but installing the provided .deb packages just work.

Integrated SD card reader

Works flawlessly, just by inserting the card. Apparently the card is viewed as a USB mass storage device

usb 4-6: new high speed USB device using ehci_hcd and address 3
usb 4-6: New USB device found, idVendor=05ca, idProduct=1880
usb 4-6: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 4-6: Product: USB2.0-FLASH Media    
usb 4-6: Manufacturer: RICOH             
usb 4-6: SerialNumber: R5U880-00003
usb 4-6: configuration #1 chosen from 1 choice
Initializing USB Mass Storage driver...

The reader supports multiple formats and I have successfully used it both with an SD card and a Sony Memory Stick Pro.

Broadband card

usb 4-4: New USB device found, idVendor=0bdb, idProduct=1900
usb 4-4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
usb 4-4: Product: Ericsson F3507g Mobile Broadband Minicard Composite Device
usb 4-4: Manufacturer: Ericsson
usb 4-4: SerialNumber: 3541430210367100

This page on ThinkWiki claims that it is viewed as an USB GSM modem and usable under Linux but I haven't tried.

Bluetooth

In am not using it and disable it through thinkpad_acpi using

/bin/echo 0 > /sys/devices/platform/thinkpad_acpi/bluetooth_enable

Annoyances

High-pitched noise

In some rare conditions (but typically after using an usb device), the back of the computer emits very disturbing hig-pitched noise. When this happens, this is stopped immediately by removing the uhci_hcd module as claimed here. To do this on a permanent basis, follow these instructions to blacklist the module. The only thing to add is that you can put the blacklist command in any file under /etc/modprobe.d (i.e., it doesn't have to be named uhci_hcd.conf). This thread gives some more details, explaining in particular why rebuilding the initramfs is needed and that uhci_hcd is used only for dealing with USB 1.0/1.1 devices. Note that in my case, I have a Samsung ML-1710 printer which does require me to manually insert uhci_hcd before usblp when I want to use this printer.

Boot time

The computer takes about 10 seconds just to reach the grub prompt, which is somewhat unusual and annoying. Recently, I installed a more recent version of the BIOS (that is, 3.05) which saves about 3s on bootup time by removing the "Intel Management Engine BIOS Extension feature" prompt (apparently this occurred in version 3.03 of the BIOS). This is still not very fast.

Occasional loss of wifi link on suspend to disk

As claimed above, suspend to disk works fine except for the fact that it occasionally screws up the wireless network. In such cases, it seems like there is no other solution but (1) to reboot; (2) to 'rmmod iwlagn iwlcore' and 'modprobe iwlagn'.

Debian Squeeze update

With Debian Squeeze (6.0), I now use only the stock 686 kernel and everything mostly works fine. The high-pitched noise mentioned above is still here (from time to time) and the wifi issue is "gone" as I use the KDE interface to network-manager and the network manager turns off the wifi link when suspending or hibernating. The basic version of suspend/hibernate with pm-utils mostly works but resume is somewhat hazardous. To use uswsusp you need to pick the package (as well as two other dependencies) from the Sid section for the time being. To make all utilities that use pm-utils call uswsups instead create a file in /etc/pm/config.d/ which contains SLEEP_MODULE=uswsusp.

There are however two somewhat annoying residual issues: (1) the resume (after suspend or hibernate) problem mentioned above (ie. resume sometimes fails) has become worse in recent (security) updates of Squeeze kernels, (2) it is not possible to connect to wifi network secured using WPA2 Enteprise. I fixed both issues by upgrading (although I am not claiming that all of this is really necessary, except the kernel update to fix problem 1, see also this post regarding issue 2.) to more recent versions of the kernel and of the wifi packages from Wheezy such as

firmware-iwlwifi_0.30_all.deb
initramfs-tools_0.99_all.deb
libssl1.0.0_1.0.0d-3_i386.deb
linux-base_3.2_all.deb
linux-image-2.6.39-2-686-pae_2.6.39-2_i386.deb
wireless-tools_30~pre9-5_i386.deb
wpasupplicant_0.7.3-3_i386.deb

Change log

  • 04 Jan 2012 Remove flimsy comments about networking.
  • 23 Sep 2011 Added note on supsend and wiki.
  • 11 Jun 2011 Added note on squeeze.
  • 22 Aug 2009 Removed incorrect statement about the wifi card caused by erroneous lspci output; Added annoyances section.
  • 17 May 2009 First version.