Ok heres what I wrote about yesterday... *** fn-key combos *** Pressing Fn+key on Thinkpads usually produces an acpi event. This is good as it works even without xorg running. You can look up events by using acpi_listen (part of acpid) and tapping thru fn+f keys (or keys with blue print on them) ladoga@x41:~$ acpi_listen button/fnf1 FNF1 00000080 00000000 K button/battery BAT 00000080 00000000 K button/screenlock SCRNLCK 00000080 00000000 K button/wlan WLAN 00000080 00000000 K button/fnf6 FNF6 00000080 00000000 K video/switchmode VMOD 00000080 00000000 K button/wlan WLAN 00000080 00000000 K button/zoom ZOOM 00000080 00000000 K button/f24 F24 00000080 00000000 K button/fnf10 FF10 00000080 00000000 K Important parts here are button (the event cathegory) and the identifier string on the right side of slash. Here is event that fn+f4 (sleep) causes on my laptop: button/sleep SBTN 00000080 00000000 K To use this event we need two things. Action script in /etc/acpi/ and event file in /etc/acpi/events 1. I have made an action script /etc/acpi/sleepbtn-acpi-support.sh (You might already have something similar for power button) #!/bin/sh echo mem > /sys/power/state exit 0 Sometimes we might want to do some stuff before going to sleep and when waking up. For example usb or display driver power management might not work well on some systems and cause trouble entering sleep or not even wakeup at all. If this happens we could possibly unload the respective module with rmmod before writing "mem" to /sys/power/state and load it again after device wakes up (after the echo mem > /sys/power/state). 2. To run the script with fn+f4 we have to have an event file for it /etc/acpi/events/sleepbtn-acpi-support event=button[ /]sleep action=/etc/acpi/sleepbtn-acpi-support.sh In "event=" we identify the event which triggers the script button/sleep is button[ /]sleep, button/battery would be button[ /]battery and so on. "action=" tells acpid simply what script shall be run. All very simple, isn't it? In thinkwiki acpid section you'll probably find more through examples though. :) http://www.thinkwiki.org/wiki/How_to_configure_acpid Bluetooth, leds etc. being toggleable from /proc/acpi/ibm you can use them easily with scripts tied to acpi events in case you want. As a bonus here is my custom action script for screenlock fn combo (toggles LCD panel on and off): ladoga@x41:~$ cat /etc/acpi/scrlockbtn-acpi-support.sh #!/bin/sh if [ -e /dev/shm/lcd_off.tmp ] then rm /dev/shm/lcd_off.tmp vbetool dpms on else touch /dev/shm/lcd_off.tmp vbetool dpms off fi exit 0 *** buttons seen by xev *** On my Thinkpad the back and forward buttons next to arrows for are seen by xev as XF86Forward and XF86Back. I use these to switch between workspaces. Blue access IBM button (dunno what's it called in lenovos) is XF86Launch1. You can tie these to your window manager's functions like any other key. Numpad feature (shift+ ) didn't work by default for me so I added to .xinitrc: (sleep 5 && xmodmap -e "add mod3 = Scroll_Lock" && xmodmap -e "keycode 77 = Num_Lock")& Thinkwiki has a cleaner method: http://www.thinkwiki.org/wiki/How_to_get_special_keys_to_work#NumLock *** about fan *** Check if fan throttling works properly (on some thinkpads it runs unnecessarily fast). Different systems handle and produce heat differently and same trigger points might not be good for all. Mine (without any tuning) is idle most of time, while Anu's T61 needed some tuning. You can monitor heat from /proc/acpi/ibm/thermal (first value is cpu), rest are other sensors near diffrent internal parts. (disk bay and such, no idea of order though). Most important is ofcourse that handrest stays cool enough to be comfortable. fan speeds can be monitored from /proc/acpi/ibm/fan and ofcourse loudness that you find comfortable. If you need to adjust fan trigger points to something better heat/noise wise then look at: http://www.thinkwiki.org/wiki/How_to_control_fan_speed#Automated_program_-_Simple_ThinkPad_Fan_Control *** about external display *** I use a script in X to switch resolutions between 1600x1200 (separate LCD monitor) and 1024x768 (thinkpad's LCD). Run xrandr without arguments to see names of available displays and resolutions. In my script LVDS1 is laptop and VGA1 is the VGA port. #!/bin/bash STATE=`xrandr | grep "*" | awk '{print $1}'` echo $STATE if [[ $STATE = "1600x1200" ]] then xrandr --output VGA1 --mode 1024x768 --output LVDS1 --mode 1024x768 --primary killall conky && (conky&) else xrandr --output VGA1 --mode 1600x1200 --primary --output LVDS1 --off killall conky && (conky&) fi exit Also when using swiveling screens it's handy to have xrandr -o left and xrandr -o normal in some script to toggle between landscape and portrait orientations. Well that was some. There was probably something I forgot to mention, but that was the important stuff.