One of the first things I did on this system was to try out a Knoppix disk (version 3.6, specifically). The results were quite positive. Knoppix was able to start up X and run my USB, audio and network hardware. Most encouraging.
The unit came with Windows XP installed, along with an IBM recovery partition. I got as far as the licensing screen - I haven't actually used Windows on one of my own systems since the 3.1 days, and I wasn't about to "sign" one of their licenses now. So I burned my bridges and reformatted the Windows partition from Knoppix, figuring (hoping) I could reboot from the recovery partition if I really needed to restore the system to its factory configuration. As it turned out, I couldn't, so don't do this if you care about getting that Windows partition back. As for myself, I haven't missed it...
I started by trying to install Gentoo - other people with similar thinkpads were using Gentoo, and I think Gentoo's general approach is extremely cool. I got a few hours into compiling glibc and the compiler died with some sort of processor level error. I googled the error and people on various message boards were saying things like "check your temperature" and "turn off overclock settings". Hmmm. It seemed pretty unlikely to me that a brand-new, fresh out of the box IBM laptop had built in heat issues, so at this point I finally punted and went back to what is becoming my standard distro - Debian.
The results with the Debian woody install were less encouraging than my initial Knoppix experience. Couldn't get X or USB to work, and my network driver didn't appear to be part of the 2.4 kernel. Pretty useless. Plus the wireless driver (ipw2200) was written for the 2.6 kernel, which I don't think was ever available in Woody.
I was contemplating my next move over the weekend, then the Debian guys threw me a bone: Sarge was promoted to "stable" on Monday! Since knoppix was essentially Sarge, I was now pretty confident that I could get everything up and running without having to mess with the unstable package sets.
I installed the 2.6.8 kernel and couldn't get it to boot. Some kind of "pivot error" trying to mount the root filesystem. I did some research, tried what people suggested and still couldn't get it to work, so I decided that this would be an excellent time to get back into the business of building my own kernels. I grabbed the 2.6.11.11 source and got to work.
My approach to finding the right drivers was simple: see what knoppix used and copy it. Knoppix used the tg3 (Tigon) network driver, so I built that in and used it. Likewise for the audio drivers - i810_audio for the 2.4 kernel series. 2.6 seems to prefer ALSA to OSS drivers, and since they seem to work (unlike my last experience with ALSA) I'm inclined to honor this preference. The corresponding ALSA driver is snd_intel8x0.
Now X still wasn't working, I tried various things with dpkg --reconfigure xfree86-xserver and then thought - hmmm, What Would Knoppix Do? ;-) It turns out that knoppix generated my XFree86-4 config file with a program called "mkxf86config" (in /usr/sbin on the Knoppix distro). So I ran this, and had X up and running with the VESA driver in about a minute! Pretty neat. Now for wireless.
The IPW2200 drivers are distributed as their own sourceforge project. I started out with the 1.0.0 release, then grabbed a copy of Kismet to test it out. I discovered that Kismet explicitly did not support the IPW2200 drivers because they did not support "monitor mode". I went back to the driver site, did some poking around and discovered that the newest version of the driver (version 1.0.4) did, in fact, support monitor mode. I built this, installed it, told Kismet it was an IPW2100 and everything worked! I then had lots of fun scanning networks up and down the Hudson on my train ride. (Note: the latest version of Kismet supports the 2200 directly - haven't tried it yet)
My final issue was the ATI driver: like I said, I had gotten X running with the Vesa driver, which is adequate for most of what I do, but it just seemed wrong to not be able to play OpenGL games on what is now my fastest video card. I obtained and installed the FireGL driver (fglrx) which works for the ATI mobility series. I had been advised of its issues (see Video)prior to buying the laptop, and sure enough, attempting to suspend with X running results in the system hanging. Annoying, but not a show-stopper.
The DVD/CD-RW install was pretty standard - I started out with the default IDE assignment, to get CD writes working I use the SCSI emulation layer. I added the line "append=hdc=ide-scsi" to the kernel boot block, I also had to make a change to /etc/modprobe.d/aliases - "block-major-11" was aliased to sr_mod, which didn't seem to exist, I replaced this with an alias to "ide-scsi" and everything works fine. I can read from CD and DVD media - I haven't tried to write yet.
I also haven't yet tried to get Bluetooth working - I don't really have any
other Bluetooth enabled devices, so I have no use for it.
USB
Works, but has strange sensitivity issues - if I so much as drop a hair on my usb stick drive while it is plugged in, the system will lose communication with the drive. I often have to jiggle it to get the system to recognize it - not sure if the problem is hardware or software related. Also, the lower of the two USB ports appears to be less reliable than the upper one.
I have a script that manages mounting based on the serial number of the
device (so that I can mount devices with a command like "usb-mount lex" or
"usb-mount ipod" and have them mounted on "/usb/lex" and "/usb/ipod" regardless
of the device assignment that the kernel provides). I wrote this for systems
running the 2.4 kernel, which seemed to keep the device entries bound even after
a USB storage device was disconnected. The 2.6 kernel is a little different:
I've had to adapt my script by adding a hotplug script which stores the device
mapping (from the scsi bus number to the /dev/sd* entry).
Ethernet
Works fine. Using the tg3 driver.
Wireless
Works fine. Using the ipw2200 driver, version 1.0.4 (1.0.0 loads ok, but it didn't support monitor mode and I was interested in scanning networks).
Being new to wireless, I'm still a little confused as to how all this stuff
is supposed to work. The important thing is, I am able to specify the ESSID and
encryption key of my wireless router and once I do that, the wireless driver
seems to automatically associate with my home network (use "iwconfig"
to set these parameters). From here I can "pump -i eth1" to get an IP
address over DHCP and I'm fully networked.
Video
The ATI Fire GL driver (fglrx) works just great, except that I lose the ability to suspend to RAM - if you suspend while X is running with this driver your system will hang on resume. Update 2006-01-25 - the latest driver (version 8.21.7) fixes this - I no longer need this work-around
Others seem to have dealt with this problem using the swsusp driver, but this appears to just replace suspend-to-RAM with a suspend to hard disk - not what I want. My work-around is simple - don't run the ATI X server. The VESA driver works just fine for most of the stuff that I do, and when I want to play a game or watch a DVD I just start up another X server with the fglrx config file.
Here's my X VESA config file. I
generated it with a knoppix script - /usr/sbin/mkxf86config.
Audio
Works fine. Use snd_intel8x0 alsa drivers. I've been using the OSS device
instead of the ALSA device, I did have one experience (while experimenting with
mplayer) where sound just shut down, and I could not get anything out of
the audio system until I rebooted. Not sure what happened and I haven't tried
to reproduce it.
DVD/CD-RW
Works fine. Add "append=hdc=ide-scsi" to lilo.conf for your kernel block,
change the "block-major-11" alias in /etc/modprobe.d/aliases to
"ide-scsi". Haven't tested writing yet.
Suspend/Resume
Works great! I shut the lid, and it suspends, I open it and it resumes. See Video for the caveat.