Lenovo_Thinkpad_X60t
Contents |
Hardware status
| Device | Works? | Note |
| CPU | Yes | |
| ACPI | Yes | May need restart after boot. Acpi events can be grabbed with acpi_listen, if yours are different. |
| Trackpoint (psmouse) | Yes | |
| USB (uhci_hcd, ehci_hcd) | Yes | followed Gentoo USB Guide. Tested with with lots of USB devices. |
| Wired ethernet (e1000e) | Yes | |
| Wireless LAN (iwl3945) | Yes | |
| Graphics | Yes | x11-drivers/xf86-video-i810-2.1.1: working |
| External monitor | Untested | Xrandr finds both TV and VGA connector. |
| Framebuffer | Yes | It is a little bit buggy. And only tested with kernel-2.6.25-zen8-r1 |
| Sound (snd_hda_intel) | Yes | Good 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 | Yes | The 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 | Yes | Works with sys-auth/thinkfinger. Configuration tips see ThinkWiki. |
| Internal modem | Untested | |
| Media card reader | Yes | |
| Tablet | Yes | Works with x11-drivers/linuxwacom-0.8.0_p3-r1 |
| IrDA | Untested |
Introduction
Packages that needs merging
x11-drivers/linuxwacom sys-power/acpid app-laptop/thinkpad x11-drivers/linuxwacom x11-apps/xev x11-misc/xbindkeys
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
make.conf
#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"
CXXFLAGS="$CFLAGS"
CHOST="i686-pc-linux-gnu"
MAKEOPTS="-j3"
VIDEO_CARDS="i810 vesa"
INPUT_DEVICES="keyboard mouse wacom"
# X60
USE="$USE acpi fbsplash hdaps"
Hardware
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
|
Sound
| 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 pam_thinkfinger.so
The first section in the file should look like the following:
auth required pam_env.so auth sufficient pam_thinkfinger.so auth sufficient pam_unix.so 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.
Bluetooth
| 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)
Make a file containing this script in /etc/acpid/actions. I called mine toggle_bluetooth.sh.
#!/bin/bash # toggle bluetooth # /etc/acpi/actions/toggle_bluetooth.sh # # 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. else echo enabled > /proc/acpi/ibm/bluetooth modprobe rfcomm /etc/init.d/bluetooth restart --quiet fi
Make this file executable
chmod +x /etc/acpi/actions/toggle_bluetooth.sh
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 action=/etc/acpi/actions/toggle_bluetooth.sh
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.
WLAN
See this guide.
Ethernet
| 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
Graphics
See this guide.
Framebuffer
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
CONFIG_FB_UVESA=y
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=”/usr/share/v86d/initramfs”
Compile the kernel and add following line to grub.conf at the end of the kernel line:
video=uvesafb:1400x1050-32,mtrr:3,ywrap
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:
acpi_listen 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.
/etc/acpi/events/backlight-up:
# called when brightness down key combo is pressed event=ibm/hotkey HKEY 00000080 00001010 action=/etc/acpi/actions/backlight-up
/etc/acpi/events/backlight-down:
# called when brightness down key combo is pressed event=ibm/hotkey HKEY 00000080 00001011 action=/etc/acpi/actions/backlight-down
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:
/etc/acpi/actions/backlight-down:
#! /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 state=$((state-=1)) echo "$state" > /sys/class/backlight/thinkpad_screen/brightness
/etc/acpi/actions/backlight-up:
#! /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 state+=1 echo "$state" > /sys/class/backlight/thinkpad_screen/brightness
Reload acpid and see if it works.
/etc/init.d/acpid restart
Pen
| 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"
EndSection
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"
EndSection
Section "InputDevice"
Identifier "Eraser"
Driver "wacom"
Option "Device" "/dev/ttyS0"
Option "Type" "eraser"
Option "ForceDevice" "ISDV4"
Option "BottomY" "18432"
Option "BottomX" "24576"
EndSection
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"
EndSection
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:
x60t-swiveldown:
event=ibm/hotkey HKEY 00000080 00005009 action=/etc/acpi/actions/x60t-swiveldown
x60t-swivelup:
event=ibm/hotkey HKEY 00000080 0000500a action=/etc/acpi/actions/x60t-swivelup
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:
x60t-swiveldown:
#!/bin/bash /usr/bin/xrandr -o inverted xsetwacom set "Stylus" Rotate half xsetwacom set "Cursor" Rotate half xsetwacom set "Eraser" Rotate half
x60t-swivelup:
#!/bin/bash /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:
"/home/username/bin/rotate" F13
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
fi
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 xbindkeys
Created by NickStallman.net, Luxury Homes Australia
Real estate agents should list their apartments, townhouses and units in Australia.
