Debian on Lenovo X201

I have acquired a new laptop/netbook, a Lenovo X201. My initial reactions are positive. It runs Debian better than my old Dell laptop does (see my Debian on Dell Precision M65 writeup). The rest of this article will be devoted to notes and information about running a GNU/Linux system on the Lenovo X201.


First the hardware configuration and quick status summary of how well each piece is working:

CPU Intel Core i7 620M 2.67GHz OK
RAM Samsung 4GB RAM DDR3 1333 MHz PC3-10600 OK
BIOS Lenovo v1.22 dated 2010-08-23 OK
Disk Seagate Momentus 320GB ST9320423AS OK
Graphics Intel GMA HD integrated OK
Screen (internal) 1200×800 12.1″ WXGA TFT OK
Screen (external) DisplayPort support for at least 1920×1200 OK
Webcam Lenovo/Chicony Camera OK
Mouse UltraNav TrackPoint/TouchPad OK
Ethernet Intel PRO/1000 (e1000) 82577LM OK
CD/DVD burner Matshita DVD-RAM (in Lenovo X200 UltraBase) OK
Memory card reader Generic USB2.0-CRW ID 0bda:0159 OK
Bluetooth Broadcom USB ID 0a5c:217f OK
Docking station Lenovo UltraBase X200 OK
Audio Intel 5 Series/3400 HD-Audio OK ?
Fingerprint Upek USB ID 147e:2016 ?
Modem ? ?
Wireless Intel Centrino Ultimate-N 6300 Non-free
3G Qualcomm Gobi 2000 Non-free
GPS Qualcomm Gobi 2000 FAIL

I’m also using a Gemalto GemPC ExpressCard smart card reader, but it was not included in the laptop.

For reference, this laptop was labeled “3323” and “NUSRCMS” from the reseller. It included the UltraBase X200 as a combo.

Installation

The installation was unexciting except for software bugs that were easy to work around and that I expect will be resolved eventually. For more information, see my installation report. It also contains “lsusb” and “lspci” output if you are curious about hardware details.

What works?

Hdparm testing of the hard drive:

 Timing cached reads:   9188 MB in  2.00 seconds = 4596.31 MB/sec
 Timing buffered disk reads:  280 MB in  3.02 seconds =  92.78 MB/sec

The Intel graphics is working fine, both the internal TFT and the external DisplayPort. I’m driving my Dell 2405FPW (DVI) to 1920×1200 without issues. Cycling through monitors with Fn-F7 works out of the box.

Wired ethernet via X200 UltraBase in Gigabit speeds works. The UltraBase do not appear to contain another ethernet card, it is just another ethernet socket for the internal ethernet port. When the machine is docked, the internal ethernet port does not work – ethernet is redirected to the UltraBase ethernet port.

I have tested bluetooth for file browsing and connecting to the Internet via my Nokia N900.

The memory card reader handled a SD card fine, haven’t tested other formats.

The ExpressCard54 slot handles my GemPC Express smart card reader without issues, together with pcscd and GnuPG. However, the mechanical button used to eject cards is poorly made and does not handle the force required to eject the card.

Suspend to RAM+Disk is working fine, and the special keys Fn+F4 to suspend works.

I’m able to hotplug connect to the UltraBase docking station.

Fingerprint reader is not yet tested.

The Intel Audio appears to work, both output (internal speakers) and output (internal microphone). Some applications, e.g., Ekiga, chooses the wrong input/output devices. A few times, audio has not been working, but when I have tried to debug or reproduce the problem, it always mysteriously started to work. The kernel log contains the following, which may or may not be related:

[   85.017887] hda-intel: IRQ timing workaround is activated for card #0. Suggest a bigger bdl_pos_adj.

Intel Wireless does not work

The built-in Intel Centrino 6300 does not work without non-free software installed.

Workaround: Download the 9.221.4.1 firmware from Intel Linux Wireless and unpack the file to /lib/firmware. With this installed, it is working reliable and handles suspend fine. An older version of the firmware is available in the firmware-iwlwifi Debian non-free package.

Qualcomm Gobi 2000 GPS does not work

There is a kernel patch to enable the GPS USB devices. I haven’t tested it.

Qualcomm Gobi 2000 3G does not work

The device requires non-free firmware to be loaded through a firmware loader device (USB 05c6:9204). This is how it looks when I do a cold boot:

Oct 27 17:34:33 latte kernel: [    2.804850] usb 2-1.4: new high speed USB device using ehci_hcd and address 3
Oct 27 17:34:33 latte kernel: [    2.898483] usb 2-1.4: config 1 has an invalid interface number: 1 but max is 0
Oct 27 17:34:33 latte kernel: [    2.898488] usb 2-1.4: config 1 has no interface number 0
Oct 27 17:34:33 latte kernel: [    2.900352] usb 2-1.4: New USB device found, idVendor=05c6, idProduct=9204
Oct 27 17:34:33 latte kernel: [    2.900356] usb 2-1.4: New USB device strings: Mfr=3, Product=2, SerialNumber=0
Oct 27 17:34:33 latte kernel: [    2.900360] usb 2-1.4: Product: Qualcomm Gobi 2000
Oct 27 17:34:33 latte kernel: [    2.900363] usb 2-1.4: Manufacturer: Qualcomm Incorporated
Oct 27 17:34:33 latte kernel: [    2.900418] usb 2-1.4: configuration #1 chosen from 1 choice
Oct 27 17:34:33 latte kernel: [    6.793914] qcserial 2-1.4:1.1: Qualcomm USB modem converter detected
Oct 27 17:34:33 latte kernel: [    6.793979] usb 2-1.4: Qualcomm USB modem converter now attached to ttyUSB0
Oct 27 17:34:33 latte kernel: [    6.793992] usbcore: registered new interface driver qcserial

Workaround 1: If I start Windows and then directly reboot the machine into Debian (that is, as opposed to booting Debian directly) the firmware is loaded by Windows and the device works fine for 3G use with network-manager. This is how it looks when I boot Debian after Windows:

Oct 27 17:44:26 latte kernel: [    2.874072] usb 2-1.4: new high speed USB device using ehci_hcd and address 3
Oct 27 17:44:26 latte kernel: [    2.984534] usb 2-1.4: New USB device found, idVendor=05c6, idProduct=9205
Oct 27 17:44:26 latte kernel: [    2.984539] usb 2-1.4: New USB device strings: Mfr=4, Product=3, SerialNumber=0
Oct 27 17:44:26 latte kernel: [    2.984543] usb 2-1.4: Product: Qualcomm Gobi 2000
Oct 27 17:44:26 latte kernel: [    2.984546] usb 2-1.4: Manufacturer: Qualcomm Incorporated
Oct 27 17:44:26 latte kernel: [    2.984639] usb 2-1.4: configuration #1 chosen from 1 choice
Oct 27 17:44:26 latte kernel: [    6.440967] USB Serial support registered for Qualcomm USB modem
Oct 27 17:44:26 latte kernel: [    6.442267] qcserial 2-1.4:1.2: Qualcomm USB modem converter detected
Oct 27 17:44:26 latte kernel: [    6.442332] usb 2-1.4: Qualcomm USB modem converter now attached to ttyUSB0
Oct 27 17:44:26 latte kernel: [    6.442349] usbcore: registered new interface driver qcserial

Workaround 2: Following the hints on ThinkWiki’s Gobi 2000 page (and its talk page) I came up with the following. First copy the firmware from your Windows partition to /lib/firmware/gobi like this:

mount /dev/sda2 /mnt/
cd /mnt/Program Files/QUALCOMM/Images/Lenovo/
cp UMTS/amss.mbn UMTS/apps.mbn 6/UQCN.mbn /lib/firmware/gobi
sha1sum /lib/firmware/gobi/*
7048cf1e41f7402c6166c4126e95ac116a00ae58  /lib/firmware/gobi/amss.mbn
5c362a481e252f91c0631b9c951f44deee38908a  /lib/firmware/gobi/apps.mbn
a69979fb8d7f04850efe81f90167db2558e282ab  /lib/firmware/gobi/UQCN.mbn

Then install the gobi-loader Debian package package from contrib (i.e., ‘apt-get install gobi-loader’) and restart your system. On the next boot, the kernel should print this:

[    2.813456] usb 2-1.4: new high speed USB device using ehci_hcd and address 3
[    2.906079] usb 2-1.4: config 1 has an invalid interface number: 1 but max is 0
[    2.906084] usb 2-1.4: config 1 has no interface number 0
[    2.907953] usb 2-1.4: New USB device found, idVendor=05c6, idProduct=9204
[    2.907958] usb 2-1.4: New USB device strings: Mfr=3, Product=2, SerialNumber=0
[    2.907962] usb 2-1.4: Product: Qualcomm Gobi 2000
[    2.907965] usb 2-1.4: Manufacturer: Qualcomm Incorporated
[    2.908054] usb 2-1.4: configuration #1 chosen from 1 choice
[    7.150607] USB Serial support registered for Qualcomm USB modem
[    7.150638] qcserial 2-1.4:1.1: Qualcomm USB modem converter detected
[    7.150713] usb 2-1.4: Qualcomm USB modem converter now attached to ttyUSB0
[    7.150735] usbcore: registered new interface driver qcserial
[   11.918372] usb 2-1.4: USB disconnect, address 3
[   11.918546] qcserial ttyUSB0: Qualcomm USB modem converter now disconnected from ttyUSB0
[   11.918574] qcserial 2-1.4:1.1: device disconnected
[   13.397864] usb 2-1.4: new high speed USB device using ehci_hcd and address 5
[   13.503486] usb 2-1.4: New USB device found, idVendor=05c6, idProduct=9205
[   13.503492] usb 2-1.4: New USB device strings: Mfr=4, Product=3, SerialNumber=0
[   13.503496] usb 2-1.4: Product: Qualcomm Gobi 2000
[   13.503499] usb 2-1.4: Manufacturer: Qualcomm Incorporated
[   13.503611] usb 2-1.4: configuration #1 chosen from 1 choice
[   13.507795] qcserial 2-1.4:1.2: Qualcomm USB modem converter detected
[   13.507881] usb 2-1.4: Qualcomm USB modem converter now attached to ttyUSB0

Now network-manager should automatically detect it and query you for PIN code etc.

9 Replies to “Debian on Lenovo X201”

  1. Pingback: Debian on Lenovo X201 | Debian-News.net - Your one stop for news about Debian

    • I believe they are referring to replacing the firmware stored in persistent storage in the network card — there is no firmware blob coming from Debian userspace to the ethernet device on my laptop, as far as I’m able to tell at least.

      /Simon

  2. Pingback: OpenPGP smartcard under GNOME on Debian 9.0 Stretch – Simon Josefsson's blog

  3. Pingback: OpenPGP smartcard under GNOME on Debian 10 Buster – Simon Josefsson's blog

  4. Pingback: OpenPGP smartcard with GNOME on Debian 11 Bullseye – Simon Josefsson's blog

  5. Pingback: How to complicate buying a laptop – Simon Josefsson's blog

  6. Pingback: OpenPGP key on FST-01SZ – Simon Josefsson's blog