Running Debian GNU/Linux (testing/etch) on a Thinkpad R60

I'm running Debian GNU/Linux (testing/etch distribution) on a Lenovo Thinkpad R60, purchased new in January 2007:

9456CTO ThinkPad R60

Intel Core 2 Duo processor T5500 (1.66GHz, 2MB L2, 667MHz FSB)
15" XGA TFT LCD with Wireless LAN
Intel Graphics Media Accelerator 950, 1394
1 GB PC2-5300 DDR2 SDRAM 667MHz SODIMM Memory (1 DIMM)
No integrated fingerprint reader
100GB Hard Disk Drive, 5400rpm[4]
CD-RW/DVD-ROM 24x/24x/24x/8x Max Combo Ultrabay
No Bluetooth
Integrated 1Gb Ethernet
Intel PRO/Wireless 3945ABG
6 cell Li-Ion Battery
Keyboard US English
UltraNav (TrackPoint and TouchPad)

250410U  Advanced Mini Dock with US/Canada/LA Line Cord

15335NV  Pan Pizza with Mushrooms, Onions, Green Peppers

I used the 'testing' distribution netinstall CD, over wired ethernet w/ DHCP. Mostly everything just worked out of the box, except for the wireless networking, and suspend/hibernate...

Wireless Networking with Intel PRO/Wireless 3945ABG

First, I added these lines to /etc/apt/sources.list:

deb testing non-free
deb-src testing non-free
deb testing contrib
deb-src testing contrib
Then I ran these commands as root:

# apt-get update
# apt-get install ipw3945-modules-2.6.18-3-686
# apt-get install firmware-ipw3945
# apt-get install ipw3945d
# modprobe ipw3945    /* Not sure this one was necessary. */

Now I'm able to switch from wired to wireless networking as needed, via the usual administrative menu (Desktop→Administration→Networking→...)

(Props to David Kuhl and Bryan O'Sullivan for their help getting the wireless networking up.)

If the above doesn't work for you, you might also check out Intel's native Linux wireless driver at Or if you're really desperate, you can go the Ndiswrapper route, at (#9 under the letter "I"). Ndiswrapper implements Windows network driver interfaces in the Linux kernel, so that the card's Windows driver works under Linux; see for more information.

Sleep (Suspend and Hibernate)

Turns out that suspend-to-memory (very low power consumption, quick to resume) and hibernate-to-disk (zero power consumption, slower to resume) were working all along, I just didn't know how to invoke them. Micah Anderson showed me how: just hit Function-F4 to suspend, and Function-F12 to hibernate. (This requires the acpi-support and acpid packages to be installed, but you probably already have them by default in a stock Debian laptop configuration.)

To unsuspend, just tap the power button; it's that easy.

To un-hibernate, though, requires a little bootup jiujitsu. First, before you hibernate the machine, learn what device your swap partition lives on. For example, mine lives on /dev/sda5, and here's how I found out:

floss# grep swap /etc/fstab
/dev/sda5       none            swap    sw              0       0

Now edit /etc/boot/grub/menu.lst. Find the defoptions line...

## additional options to use with the default boot option, but not with the
## alternatives
## e.g. defoptions=vga=791 resume=/dev/hda5
# defoptions=

...and don't repeat, don't uncomment it. Leave it commented out. This will seem counterintuitive, but trust me on this one. (I looked at Micah like he was crazy when he said this, but he was right.) Leaving the # defoptions= line commented out, add resume=/dev/sda5 (or whatever your swap device is) to the end of the line:

## additional options to use with the default boot option, but not with the
## alternatives
## e.g. defoptions=vga=791 resume=/dev/hda5
# defoptions=resume=/dev/sda5

Now, as root, run the update-grub program:

# /usr/sbin/update-grub

If you reload the file now and search for "resume=/dev/sda5", you'll see that option has been added to most of the kernels' parameter lists, which is what you want (the single-user mode kernels won't get it, though, and that's also what you want). Note that the option has no effect on normal bootup, only on booting to resume from a hibernated state.

If you don't have a Micah Anderson available, and suspend/hibernate still isn't working for you, try this article, which I found via search://laptop sleep suspend hibernate/. Note that that article and its predecessor refer to script paths like, e.g., /etc/acpi/events/lid, whereas Micah and I used /etc/acpi/, so you may have to tweak the instructions there a bit.

(Back to Karl Fogel's home page.)