Gentoo Wiki



Hardware status

Note: Names in brackets in the device name section are the kernel module names. Use / in make menuconfig to find them.
ACPI YesMay need restart after boot. Acpi events can be grabbed with acpi_listen, if yours are different.
Trackpoint (psmouse) Yes
USB (uhci_hcd, ehci_hcd) Yesfollowed Gentoo USB Guide. Tested with with lots of USB devices.
Wired ethernet (e1000e) Yes
Wireless LAN (iwl3945) Yes
Graphics Yesx11-drivers/xf86-video-i810-2.1.1: working
External monitor UntestedXrandr finds both TV and VGA connector.
Framebuffer YesIt is a little bit buggy. And only tested with kernel-2.6.25-zen8-r1
Sound (snd_hda_intel) YesGood support since 2.6.24

Don't forget to press the physical Vol-up button to remove the hardware mute!

Multimedia keys Yes
Fn-Fx key combinations (thinkpad_acpi) Yes
Bluetooth Yes
Firewire (ieee1394) Untested
PCMCIA (yenta_socket) Untested
IBM Harddisk Protection System YesThe hdaps kernel module produced by tp_smapi will work. Stopping the disk works, but requires a kernel patch from the ones listed on ThinkWiki.
fingerprint reader YesWorks with sys-auth/thinkfinger. Configuration tips see ThinkWiki.
Internal modem Untested
Media card reader Yes
Tablet YesWorks with x11-drivers/linuxwacom-0.8.0_p3-r1
IrDA Untested


Packages that needs merging


Packages that needs unmasking

## /etc/portage/package.keywords      ##
## Set your ~arch as needed or use ~* ##
x11-drivers/xf86-video-i810 ~x86
x11-drivers/linuxwacom ~x86


Note: GCC 4.2 introduces a new -march option, -march=native, which automatically detects the features your CPU supports and sets the options appropriately. If you have an Intel or AMD CPU and are using >=sys-devel/gcc-4.2.0, using -march=native is recommended. Do NOT use -march=native if you use distcc on nodes with different architectures as this may produce unusable code.
#The following only works with >=gcc-4.2.0
#Result of running: echo 'int main(){return 0;}' > test.c && gcc -v -Q -march=native -O2 test.c -o test && rm test.c test
CFLAGS="-march=prescott --param l1-cache-size=32 --param l1-cache-line-size=64 -mtune=generic -O2 -fomit-frame-pointer -pipe"
#Otherwise use
#CFLAGS="-pipe -O2 -march=prescott -fomit-frame-pointer -pipe -msse3"

VIDEO_CARDS="i810 vesa"
INPUT_DEVICES="keyboard mouse wacom"
# X60
USE="$USE acpi fbsplash hdaps"


Processor  		Intel Core Duo Processor L2400 with 1,66 GHz, 2 MB L2 Cache
Front Side Bus         533 MHz
RAM	 		1 GB 533 MHz DDR2
Harddisk 		5400 U/min; 80 GB Harddisk SATA with Active Protection System
Display 		TFT Display; 12,1" 1400x1050; with Wacom Serial Tablet
GFX	 		Intel GMA950; up to 128 MB shared
Communication 		10/100/1000 LAN, Intel Mini PCI PRO/Wireless 3945ABG Lan, 56K Int. Modem, Bluetooth, IrDA
Sound System 		Intel High Definition Audio
Input Devices 		IBM UltraNav (Touchpad+TrackPoint)
Connectors 		3x USB 2.0-Ports, VGA, Headphone, ext. microphone, RJ-11, RJ-45, Firewire (IEEE 1394)
PC Card Extensions 	1 x PCMCIA Typ I or II

Configuration Detail

Kernel essentials

Linux Kernel Configuration: Kernel essentials
 # For proper booting you should at least enable the following in kernel.
 Device Drivers --->
 	<*> Serial ATA (prod) and Parallel ATA (experimental) drivers --->
		<*>	AHCI SATA support
		<*>	Intel ESB, ICH, PIIX3, PIIX4 PATA/SATA support
	<*> SCSI device supplort  ---->
		<*>	SCSI disk support
               <*>     SCSI generic support

 # don't forget to make the kernel use the power of two hearts
 Processor type and features  --->
 	[*] Symmetric multi-processing support
	[*]	Multi-core scheduler support


Linux Kernel Configuration: Sound
 Device Drivers --->
 	<*> Sound card support --->
		<M> Advanced Linux Sound Architecture  --->
			<M> OSS Mixer API
			<M> OSS PCM (digital audio) API
				[*] PCI sound devices  --->
					<M> Intel HD Audio
					[*] Build Analog Device HD-audio codec support 

Now emerge alsa-utils and add alsasound to the default runlevel:

emerge -av alsa-utils
rc-update add alsasound default
/etc/init.d/alsasound start

Unmute the sound using alsamixer by pressing the m key on the Master and PCM sliders (MM=Muted / 00=Not muted)

Fingerprint Reader

Emerge thinkfinger >= 0.3;

emerge thinkfinger

and add the following line in /etc/pam.d/system-auth:

auth       sufficient

The first section in the file should look like the following:

auth       required
auth       sufficient
auth       sufficient try_first_pass likeauth nullok

All left is to read your fingerprint for your user. Run tf-tool --add-user <login>, then reboot and see if it works. Works with GDM, sudo and login.


Linux Kernel Configuration: Sound
 Networking --->
 	<M> Bluetooth subsystem support --->
		<M> L2CAP protocol support
		<M> RFCOMM protocol support
			Bluetooth device drivers --->
				<M> HCI USB driver
					[*] SCO (voice) support

Now emerge bluez-utils;

emerge bluez-utils

and configure your display name in the device section in /etc/bluetooth/hcid.conf:

name "Your Displayname"

You can make the bluethooth service start every time on boot with:

rc-update add bluetooth default

Or you can toggle the bluetooth service and device (see subsection).

Toggle bluetooth button (Fn-F5)

Note: Make sure you have merged sys-power/acpid and app-laptop/thinkpad and the thinkpad_acpi module is loaded.

Make a file containing this script in /etc/acpid/actions. I called mine

# toggle bluetooth
# /etc/acpi/actions/
# Check if wetcher bluetooth is enabled or not.
grep status /proc/acpi/ibm/bluetooth|grep -q enabled
# If started disable it.
if [ $? == 0 ]; then
  echo disabled > /proc/acpi/ibm/bluetooth
  /etc/init.d/bluetooth stop --quiet
# Otherwise start it.
  echo enabled > /proc/acpi/ibm/bluetooth
  modprobe rfcomm
  /etc/init.d/bluetooth restart --quiet

Make this file executable

chmod +x /etc/acpi/actions/

We also need to tell acpid to execute this small script when an even occurs when using Fn+F5.

Make a file in /etc/acpid/events with the following content.

event=ibm/hotkey HKEY 00000080 00001005
Note: You can grab the hotkey event with acpi_listen if you want to use another button or yours is different.

Restart acpid and see if it works.

/etc/init.d/acpid restart

The Bluetooth LED should turn on and off when you press the Fn+F5 combination, if it does that it works.


See this guide.


Linux Kernel Configuration: Ethernet

 Device Drivers --->
	[*] Network device support --->
		<*> Universal TUN/TAP device driver support #If you need VPN and tunneling support
		[*] Ethernet (1000 Mbit) --->
			<M> Intel(R) PRO/1000 PCI-Express Gigabit Ethernet support

Modprobe the module e1000e and it should create a device called eth0

modprobe e1000e

To configure and control the device I use NetworkManager


See this guide.


Note: This was tested with kernel-2.6.25-zen8-r1.

What you need is to use uvesafb, which was introduced in kernel 2.6.24. Though to get make it to work properly you need the packages dev-libs/klibc and sys-apps/v86d, and it is these packages that are tricky since they are still a bit buggy.

To install klibc you need the patch from bug 212531 that uses the C implementation for memmove.c instead of the new assembly implementation. Add it to the klibc-1.5.11 ebuild, by adding the following line in the src_unpack() section:

epatch "${FILESDIR}"/${PN}-1.5.11-klibcmemmove.patch || die "Failed to patch memmove"

Digest the ebuild

ebuild /usr/portage/dev-libs/klibc/klibc-1.5.11.ebuild digest

And now merge it

emerge klibc

After it is done, emerge v86d with -O0 cflag, otherwise it will not work! I used following cflags:

CFLAGS="-march=prescott -mtune=generic -O0 -pipe -fomit-frame-pointer" emerge v86d

We are almost done. Now to the kernel.

Linux Kernel Configuration: uvesa
        General Setup  --->
                [*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
                (/usr/share/v86d/initramfs) Initramfs source file(s)

        Device Drivers  —>
                <*> Connector - unified userspace <-> kernelspace linker  —>

                Graphics support  —>
                        <*> Support for frame buffer devices  —>
                                <*>   Userspace VESA VGA graphics support

Those settings are: CONFIG_CONNECTOR=y

Compile the kernel and add following line to grub.conf at the end of the kernel line:


This is it.

Backlight control

Linux Kernel Configuration: thinkpad_acpi
        Device Drivers  —>
                Misc Devices  —>
                        <M> Thinkpad ACPI Laptop Extras
                        [*]     Video output control support
                        [*]     Suport NVRAM polling for hot keys

First we need to modprobe thinkpad_acpi with some arguments, otherwise the back light Fn-key combo will not show up as acpi events, and then we will not be able to control the back light.

modprobe thinkpad_acpi brightness_enable=1 hotkey=enable,0xffffff

You probably want to do that on every boot, add the following to /etc/conf.d/modules:

modules_2_6="${modules_2_6} thinkpad_acpi"
module_thinkpad_acpi_args_2_6="brightness_enable=1 hotkey=enable,0xffffff"

When that is done we can start grabbing some events with acpi_listen, mine looks like this:

ibm/hotkey HKEY 00000080 00001011
ibm/hotkey HKEY 00000080 00001010

First one is for down second for up.

Now we know this we can make some files for acpid to react on when we push the Fn-key combo for either back light up or down.


# called when brightness down key combo is pressed
event=ibm/hotkey HKEY 00000080 00001010


# called when brightness down key combo is pressed
event=ibm/hotkey HKEY 00000080 00001011

Now we need some actions. I made a couple of simple bash scripts that looks at the current state of the back light level and subtracts or adds 1 to the level. You can control the level either in /sys/class/backlight/thinkpad_screen/brightness or in /proc/acpi/ibm/brightness the latter is deprecated, so I am not going to use that.

So here are the scripts:


#! /bin/bash
# A little simple script to control backlight on a Thinkpad X60 Tablet

# Check current state
typeset -i state=`cat /sys/class/backlight/thinkpad_screen/brightness`
# Subtract one from the current state and echo it to the file
echo "$state" > /sys/class/backlight/thinkpad_screen/brightness


#! /bin/bash
# A little script to control backlight on a Thinkpad X60 Tablet

# Check current state
typeset -i state=`cat /sys/class/backlight/thinkpad_screen/brightness`
# Add one to the current state and echo it to the file
echo "$state" > /sys/class/backlight/thinkpad_screen/brightness

Reload acpid and see if it works.

/etc/init.d/acpid restart


Linux Kernel Configuration: Pen

 Device Drivers --->
	<*> Event interface
		[*] Tablets --->
			< > Wacom Intuos/Graphire tablet support (USB) #Make sure to unselect this or build in as module
		[*] Miscellaneous devices --->
			<*> User level driver support

Install linuxwacom driver. Make sure its >=x11-driver/linuxwacom-0.8.0_p2.

emerge x11-driver/linuxwacom

Add the following sections to your /etc/X11/xorg.conf:

Section "InputDevice"
	Identifier  "Cursor"
	Driver	    "wacom"
	Option      "Device" "/dev/ttyS0"
	Option	    "Type" "cursor"
	Option	    "ForceDevice" "ISDV4"
	Option	    "Mode" "Absolute"
       Option      "BottomY" "18432"
       Option      "BottomX" "24576"

Section "InputDevice"
	Identifier  "Stylus"
	Driver	    "wacom"
	Option	    "Device" "/dev/ttyS0"
	Option	    "Type" "stylus"
	Option	    "ForceDevice" "ISDV4"
	Option	    "TPCButton" "off"
	Option	    "BottomY" "18432"
	Option 	    "BottomX" "24576"
	Option	    "Mode" "Absolute"

Section "InputDevice"
	Identifier  "Eraser"
	Driver	    "wacom"
	Option	    "Device" "/dev/ttyS0"
	Option	    "Type" "eraser"
	Option	    "ForceDevice" "ISDV4"
       Option      "BottomY" "18432"
       Option      "BottomX" "24576"

The option "ForceDevice" "ISDV4" is necessary since it is a serial tablet.

Edit ServerLayout to look somewhat like this:

Section "ServerLayout"
	InputDevice    "Cursor" "SendCoreEvents"
	InputDevice    "Stylus" "SendCoreEvents"
	InputDevice    "Eraser" "SendCoreEvents"

Before we can restart Xorg, we need to tell the system where the tablet device is, you have to do this on every boot:

setserial /dev/ttyS0 port 0x0200 irq 5 autoconfig

Add this line to /etc/conf.d/local.start to make it execute on every boot.

After a restart of Xorg the tablet should now work. Try it out. I use app-text/xournal to make notes.

Screen rotation

This does not work like this!!! The acpi daemon has no access to the XServer! More work has to be done!

Swivel up/swivel down

To make the screen rotate when swivling the screen up and down we need to set up a couple of files for acpid.

Make a file called x60t-swiveldown and x60t-swivelup in /etc/acpid/actions and /etc/acpid/event

The files in /etc/acpid/event should contain this:


event=ibm/hotkey HKEY 00000080 00005009


event=ibm/hotkey HKEY 00000080 0000500a

Those are the events that are created when swiveling the screen down and up, you can catch them with acpi_listen if they are different for your system.

The files in /etc/acpid/actions should contain the following:


/usr/bin/xrandr -o inverted
xsetwacom set "Stylus" Rotate half
xsetwacom set "Cursor" Rotate half
xsetwacom set "Eraser" Rotate half


/usr/bin/xrandr -o normal
xsetwacom set "Stylus" Rotate none
xsetwacom set "Cursor" Rotate none
xsetwacom set "Eraser" Rotate none

Make the two last files executable

chmod +x /etc/acpid/actions/x60t-swivel*

Restart acpid and try it out:

/etc/init.d/acpid restart

Rotate button

To make the screen rotate by pushing the rotate button.

This button does not create any acpi events, though it does create some X events, that you can grab with Xev

Start xev and press the button, the output should look like this:

KeyRelease event, serial 30, synthetic NO, window 0x3a00001,
	root 0x59, subw 0x0, time 719677542, (609,349), root:(613,403),
	state 0x0, keycode 203, same_screen YES,

The keycode for this button is 203. If it does not appear or does not create an event you need to execute the following line, that has also need to be done on every boot. Add it to /etc/conf.d/local.start.

setkeycodes 6c 153

Start xev and now it should work when you push the button.

Now make a file called .Xmodmap containing the following:

keycode 203 = F13

And a file called .xbindkeysrc containing the following:


Where username is replaced with your username, if you are not the only user of the function, then edit the path to /usr/local/bin/rotate instead.

The rotate script contains the following:

	#!/usr/bin/env bash

	# This is a script that toggles rotation of the screen through xrandr,
	# and also toggles rotation of the stylus, eraser and cursor through xsetwacom

	# Check orientation
	orientation=`xrandr --verbose -q | grep LVDS | awk '{print $5}'`
	# Rotate the screen and stylus, eraser and cursor, according to your preferences.
	if [ "$orientation" = "normal" ]; then
		/usr/bin/xrandr -o right
		xsetwacom set “Stylus” Rotate cw
		xsetwacom set “Cursor” Rotate cw
		xsetwacom set “Eraser” Rotate cw
	elif [ "$orientation" = "inverted" ]; then
		/usr/bin/xrandr -o left
		xsetwacom set “Stylus” Rotate ccw
		xsetwacom set “Cursor” Rotate ccw
		xsetwacom set “Eraser” Rotate ccw
	elif [ "$orientation" = "right" ]; then
		/usr/bin/xrandr -o inverted
		xsetwacom set “Stylus” Rotate half
		xsetwacom set “Cursor” Rotate half
		xsetwacom set “Eraser” Rotate half
	elif [ "$orientation" = "left" ]; then
		/usr/bin/xrandr -o normal
		xsetwacom set “Stylus” Rotate none
		xsetwacom set “Cursor” Rotate none
		xsetwacom set “Eraser” Rotate none

Make the file executable with chmod +x.

Tell your window manager to execute xmodmap ~/.Xmodmap and xbindkeys on start. I use gnome and made a little script containing the two commands and configured the gnome session to run the scrip when starting.

Run the following commands and test the button:

xmodmap ~/.Xmodmap
Retrieved from ""

Last modified: Mon, 11 Aug 2008 08:18:00 +0000 Hits: 1,982