IBM ThinkPad T30 under Linux


My ThinkPad T30 (type 2366-92U) has the following specifications:

I also have a port replicator. It appears to work just fine, although I have not used all of the ports on it yet.


The T30 is a bit thick at 1 1/2”. Its other dimensions at 9 3/4” by 11 3/4” are typical for a laptop with a 14” screen. The left-side rear corner is cut off at a 45-degree angle, presumably for appearance. The rear panel of the laptop contains all of the ports execpt audio and PCMCIA. The ports are not covered except PCMCIA, which has a hinged cover that flips down as a card is inserted.


The BIOS is very configurable for a laptop. You can change IRQ assignments for PCI cards, set up detailed power management preferences, adjust the boot device order, enable and disable most on-board devices (including the TCPA chip), enable and disable the pointing stick or touchpad, and so on.

I recommend disabling automatic suspend when the lid is closed if you plan to use a kernel framebuffer driver (see “video” below).

The laptop can boot from all the usual devices and from the network as well.


The keyboard has a good feel to it. It has some special keys:

Notably absent are the Windows keys present on most PC keyboards. I miss these, since I specially map them for use with Emacs.

Markus Braun has written tpb, a program that allows access to most of these special keys, including launching a user-configurable program when the “ThinkPad” key is pushed. It also features on-screen display of volume, mute, brightness of the LCD, and more, according to its webpage. (You will need to compile /dev/nvram support into your kernel for this program to work.)

Fn, Back, and Forward keys

If the kernel isn't configured to recognize Fn and the Back and Forward keys, then it will complain on the console whenever they are pressed. You can disable this by telling the kernel about them with a command such as setkeycodes e063 125 e06a 126 e069 127. Afterward you optionally can use the loadkeys program to configure them for various actions. For instance, to use them to move between consoles:

echo 'keycode 126 = Decr_Console' | loadkeys
echo 'keycode 127 = Incr_Console' | loadkeys

X reads raw keycodes, so it must be configured separately. The Back and Forward keys can be assigned to the otherwise unused F19 and F20 keys with the following commands:

xmodmap -e 'keycode 234 = F19'
xmodmap -e 'keycode 233 = F20'

Actually setting up X applications to recognize F19 and F20 is a separate task.

Thanks to Rob Mayoff for these tips.


My T30 came with an “UltraNav” pointing device, which includes both IBM's traditional TrackPoint pointing stick and a Synaptics TouchPad. There are three buttons above the touch pad, for use with the pointing stick, and two below it for use with the touch pad.

Both the pointing stick and the touch pad work fine with Linux. However, the middle button by the pointing stick does not work at all under Linux if the touch pad is enabled. Disabling the touch pad from the BIOS does allow the middle button to work.

Cutting-edge versions of gpm support the touch pad and the pointing stick at the same time. Download version 1.20.1 and compile and install as usual. Use options -m /dev/psaux -t synps2 -3 at least. You will probably want to add -Rimps2, too, and set up X to use /dev/gpmdata as its mouse device using the ImPS/2 protocol.

Even the new gpm has some trouble with suspend and resume. If you're using Debian GNU/Linux, you can install this shell script as /etc/apm/event.d/gpm to have gpm automatically stopped at suspend and restarted at resume, which fixes the problem. Be sure to mark the script executable.


The ATI Radeon Mobile M6 is supported by XFree86 4.2.0 and possibly earlier versions. If you're using Debian, you will need to use the xserver-xfree86 package from the unstable distribution. Here's a sample XF86Config-4 file. It assumes that gpm (such as the one linked above) is running as a repeater, using a command similar to gpm -3 -t synps2 -m /dev/psaux -Rimps2.

In text mode, the VESA framebuffer (vesafb) is a way to take advantage of the screen's full resolution. It is unaccelerated, so scrolling is somewhat slow. For 1400x1050x8 mode, add the line vga=832 to your lilo.conf.

The video is also supported by the radeonfb framebuffer driver in Linux 2.4.18 and possibly earlier versions. I had to turn off the “UseFBDev” setting in XF86Config in order to make the framebuffer cooperate with X properly. Unfortunately, with radeonfb the video is irreversibly corrupted on resume from wake or hibernation modes, whether in framebuffer or X. The radeonfb framebuffer isn't accelerated, either. Vipul Ved Prakash says that switching to and from the secondary display (by pushing Fn+F7 twice) sometimes cures this, and that when that doesn't work it can be fixed by switching to a text console (e.g. with Ctrl+Alt+F1) before trying it.

When the laptop is left alone for a while, unsuspended, in X, whether a framebuffer is in use or not, sometimes it will suffer from similar corruption. In that case, turning the display off and on with Fn+F7 twice will again fix it, as will suspend and resume with Fn+F4 twice.

I tried to get specs from ATI so that I could fix the radeonfb driver, but their “developers relations” people simply stopped talking to me when I asked whether I could release a GPL'd driver under their NDA. In the future I'm going to try to avoid ATI as well as nVidia. It's clear ATI doesn't give a damn whether the people who buy their products are able to use them effectively.

Alberto Scotti reports that X11 drivers from GATOS work better than those integrated into current XFree86.

I haven't tried the VGA out or S-video out yet.

802.11b Wireless

I've had very good luck with the HostAP drivers for Prism cards. Download and unpack the tarball available from that page, edit the Makefile to point to your kernel source tree, run make pci; make install_pci to compile and install it, and then modprobe hostap_pci to set it up as wlan0.

Various folks report that wlan-ng works well with the built-in Orinico PCI 802.11b device. Alberto Scotti has kindly prepared RPMs of kernel-wlan-ng, kernel-wlan-ng-doc, and kernel-wlan-ng-modules-rh73.3 for use with Red Hat 7.3.

Finally, kernels 2.4.19 have a built-in driver “orinoco_pci” that works. Unfortunately, it will probably stop working occasionally. To fix it, remove the kernel module and reinsert it to prod it back into action. But in all you are probably better off using one of the other options described above.


The built-in Bluetooth is connected via USB. Pressing a button below the display causes the module to connect or disconnect from the internal USB controller.

The Linux Bluetooth driver appears to load, but I haven't tested whether it can communicate yet.


The built-in 10/100 Mbps Ethernet is an Intel PCI device supported by the eepro100 driver. It works fine, but it tends to take a little while—30 seconds perhaps—to wake up after a resume from suspend.


The modem is an Intel repackaging of a Lucent LT WinModem. I haven't personally tried to use it, but Arief Mulya reports success with the AMR version of the SmartLink drivers linked from According to Arief, an error message regarding an incorrect chipset will appear at module load time, but that the modem will still function properly.


The sound card is an Intel AC'97 supported by the i810_audio driver under Linux. However, multiple people report that ALSA drivers are the way to go for T30 sound. I don't use sound much, so I don't really have an opinion of my own.

The ALSA sound drivers have trouble with resume from suspend. Karl Auer's T30 page has instructions for fixing this.

The speakers are okay but tend to distort at medium to high volumes. Special keys on the keyboard can be used to control speaker volume, with no need for any special software or driver.

Suspend to Disk

To set up “hibernation” or “suspend to disk,” see the instructions on Karl Auer's T30 page. Michael Palmer reports that in fact it is unnecessary to repartition to get hibernation to work. He says that hibernation will work as long as there is a FAT 32 partition with the save2disk.bin file on it.

Other Resources

Last updated 19 May 2016 07:55. Copyright © 2016 Ben Pfaff.
May be freely redistributed, but copyright notice must be retained.