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 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...
First, I added these lines to /etc/apt/sources.list:
deb http://ftp.debian.org/debian/ testing non-free deb-src http://ftp.debian.org/debian/ testing non-free deb http://ftp.debian.org/debian/ testing contrib deb-src http://ftp.debian.org/debian/ testing contribThen 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 http://ipw3945.sourceforge.net/. Or if you're really desperate, you can go the Ndiswrapper route, at http://ndiswrapper.sourceforge.net/mediawiki/index.php/List#I (#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 http://ndiswrapper.sourceforge.net/ for more information.
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:
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/lid.sh, so you may have to tweak the instructions there a bit.