<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://www.thinkwiki.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mist</id>
	<title>ThinkWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://www.thinkwiki.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mist"/>
	<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/wiki/Special:Contributions/Mist"/>
	<updated>2026-06-09T23:36:07Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.12</generator>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Problems_with_SATA_and_Linux&amp;diff=32293</id>
		<title>Problems with SATA and Linux</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Problems_with_SATA_and_Linux&amp;diff=32293"/>
		<updated>2007-08-21T18:29:37Z</updated>

		<summary type="html">&lt;p&gt;Mist: /* Models using a SATA disk interface */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|style=&amp;quot;vertical-align:top;padding-right:20px;width:10px;white-space:nowrap;&amp;quot; | __TOC__&lt;br /&gt;
|style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
Some ThinkPad models use an [[Intel ICH6-M]] SATA/PATA controller for the system hard disk. This causes several complications for Linux installation. The following lists these problems and known workarounds. Note that the details are often version- and distribution-specific.&lt;br /&gt;
&lt;br /&gt;
===Models using a SATA disk interface===&lt;br /&gt;
Models using a SATA controller and a SATA system disk:&lt;br /&gt;
*ThinkPad {{R60}}, {{R60e}}&lt;br /&gt;
*ThinkPad {{T60}}, {{T60p}}, {{T61}}&lt;br /&gt;
*ThinkPad {{X60}}, {{X60s}}&lt;br /&gt;
*ThinkPad {{Z60t}}, {{Z60m}}&lt;br /&gt;
*ThinkPad {{Z61e}}, {{Z61t}}, {{Z61m}}, {{Z61p}}&lt;br /&gt;
Models using a SATA controller and a PATA (IDE) system disk with a SATA-to-PATA bridge:&lt;br /&gt;
*ThinkPad {{T43}}, {{T43p}}&lt;br /&gt;
*ThinkPad {{R52}}&lt;br /&gt;
*ThinkPad {{X41}}, {{X41T}}&lt;br /&gt;
&lt;br /&gt;
{{NOTE|Some of these problems (namely SMART support, power management and disk information) are solved in Linux 2.6.15 with the inclusion of libata pass-through. See the SATA driver [http://linux-ata.org/features.html features], [http://linux-ata.org/software-status.html software status] and [http://linux-ata.org/driver-status.html hardware status].}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Hang on resume from suspend to RAM==&lt;br /&gt;
&lt;br /&gt;
Linux kernels prior to 2.6.16 (ata_piix) and 2.6.19 (ahci) do not support suspend and resume for SATA devices. As a result, the machine hangs upon the first disk access after resume. A kernel patch ([http://lkml.org/lkml/2005/5/2/46 LKML posting]) fixes this by adding SATA power management support.&lt;br /&gt;
&lt;br /&gt;
Kernel 2.6.16 and later fixes this problem for most systems. The Thinkpad T60 and X60s still need some patches to get resume working using 2.6.16, see [[Talk:Problems with SATA and Linux#Patch against SATA-resume problem with T60|here]]. The T60p resumes properly with 2.6.17-rc6, the T60 and X60 should also.  You need to enable ata_piix and disable AHCI in the bios. The latest fedora (FC5) 2.6.17 kernel seems to have fixed the resume problem on the T60p, still need to disable AHCI though. Applying [http://cvs.fedora.redhat.com/viewcvs/rpms/kernel/FC-5/linux-2.6-console-suspend.patch this FC5 patch] makes suspend-to-ram work with AHCI enabled.&lt;br /&gt;
&lt;br /&gt;
===Patches===&lt;br /&gt;
* [http://shamrock.dyndns.org/~ln/linux/sata_pm.2.6.12.diff Patch for kernel 2.6.12]&lt;br /&gt;
* [http://shamrock.dyndns.org/~ln/linux/sata_pm.2.6.13-rc5.diff Patch for kernel 2.6.13-rc5]&lt;br /&gt;
* [http://lkml.org/lkml/2005/9/23/97 Patch for kernel 2.6.14]&lt;br /&gt;
* [http://www.xenotime.net/linux/SATA/2.6.15-rc/libata_suspend.patch Patch for kernel 2.6.15-rc4]&lt;br /&gt;
* [http://tpctl.sourceforge.net/tmp/sata_pm.2.6.15-rc6.patch Patch for kernels 2.6.15-rc6 through 2.6.15]&lt;br /&gt;
&lt;br /&gt;
Some distributions already include this patch (e.g., {{Ubuntu}} Breezy, {{Gentoo}}'s gentoo-sources 2.6.15-r1), but some don't (e.g., {{Fedora}} 4). If your distribution doesn't include the patch, you will need to compile your own kernel with this patch included.&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
* RedHat Bugzilla [https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=169201 bug 169201: &amp;quot;SATA drives fail on laptop suspend&amp;quot;]&lt;br /&gt;
* [http://lkml.org/lkml/2005/11/15/385 Fix to libata.h recommended on LKML] in case you get &amp;quot;ata: abnormal state 0x80 on port 0x1F7&amp;quot;&lt;br /&gt;
* RedHat Bugzilla [https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=183138 bug 183138&amp;quot;: &amp;quot;SATA failure after pm-suspend/resume ata1: handling error/timeout&amp;quot;]&lt;br /&gt;
&lt;br /&gt;
==Failed resume from suspend to disk==&lt;br /&gt;
&lt;br /&gt;
Suspend to disk (using [[swsusp]] or [[Software Suspend 2]]) needs to load the memory image from the SATA disk. For this to work, you either need an initrd with all the necessary SATA modules, or the SATA drivers compiled into the kernel.&lt;br /&gt;
&lt;br /&gt;
==DVD drive not recognized==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; SATA driver grabs ownership over the IDE ports when it is loaded, but (by default) does not support PATA ATAPI devices such as the Ultrabay optical drives. Thus, if the &amp;lt;tt&amp;gt;ide&amp;lt;/tt&amp;gt; driver is compiled as a module and loaded after &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt;, the DVD drive will not be recognized by either driver.&lt;br /&gt;
&lt;br /&gt;
Either of the following configurations will work:&lt;br /&gt;
* For kernel 2.6.14 and newer: enable ATAPI support in the SATA system using {{bootparm|libata.atapi_enabled|1}} (see below; this is experimental).&lt;br /&gt;
* Compile IDE into the kernel (non-module).&lt;br /&gt;
* Compile both IDE and SATA as modules and make sure IDE is loaded first (the module is called 'ide_generic').&lt;br /&gt;
&lt;br /&gt;
Note that the optical drive must be in the Ultrabay during system boot (Ultrabay device swapping is currently unsupported).&lt;br /&gt;
&lt;br /&gt;
==No DMA on DVD drive==&lt;br /&gt;
&lt;br /&gt;
Using the IDE driver, DMA support cannot be enabled on an Ultrabay optical drive:&lt;br /&gt;
&lt;br /&gt;
 # hdparm -d1 /dev/hdc&lt;br /&gt;
 &lt;br /&gt;
 /dev/hdc:&lt;br /&gt;
  setting using_dma to 1 (on)&lt;br /&gt;
  HDIO_SET_DMA failed: Operation not permitted&lt;br /&gt;
  using_dma    =  0 (off)&lt;br /&gt;
&lt;br /&gt;
As a result, the optical drive is slow, and in particular, too slow to play video DVDs.&lt;br /&gt;
&lt;br /&gt;
One workaround is to use the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver (instead of the IDE driver) for the optical drive. This requires enabling the ATAPI support of the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver, which is under active development and not yet stable. You must also make sure that the IDE driver (&amp;lt;tt&amp;gt;ide-generic&amp;lt;/tt&amp;gt;) does not grab the devices before &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt;. &lt;br /&gt;
Using this will probably devour all your data and go on to eat all the food in your fridge. But if you have full backups and an empty fridge, do the following:&lt;br /&gt;
&lt;br /&gt;
* Grab the latest kernel (must be 2.6.14 or newer; the relevant code is under active development).&lt;br /&gt;
* Do one of the following:&lt;br /&gt;
** Enable the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;libata&amp;lt;/tt&amp;gt; drivers as built-in, and add {{bootparm|libata.atapi_enabled|1}} to your kernel command line (e.g., in {{path|/boot/grub/menu.lst}} or {{path|/etc/lilo.conf}}. Don't forget to run lilo after changes).&lt;br /&gt;
** Enable &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;libata&amp;lt;/tt&amp;gt; as modules (this is often the default) and add &amp;quot;&amp;lt;tt&amp;gt;options libata atapi_enabled=1&amp;lt;/tt&amp;gt;&amp;quot; to your {{path|/etc/modprobe.conf}} (or the equivalent in your distribution). &lt;br /&gt;
* Do one of the following:&lt;br /&gt;
** Disable the IDE system.&lt;br /&gt;
** Build the IDE driver as built-in (this is often the default) and add the {{bootparm|hdc|noprobe}} kernel argument (e.g., in in {{path|/boot/grub/menu.lst}} or {{path|/etc/lilo.conf}}. Don't forget to run lilo after changes).&lt;br /&gt;
** Build the IDE driver as module and add &amp;quot;&amp;lt;tt&amp;gt;options ide hdc=noprobe&amp;lt;/tt&amp;gt;&amp;quot; to your {{path|/etc/modprobe.conf}} (or the equivalent in your distribution).&lt;br /&gt;
* If you chose to use modules above, regenerate your &amp;lt;tt&amp;gt;initrd&amp;lt;/tt&amp;gt; file.&lt;br /&gt;
&lt;br /&gt;
Note : If you are using a ''Debian Sid'' system, and want to use Debian precompiled kernels, then type the following command in a ''root'' shell (This creates a new &amp;lt;tt&amp;gt;initrd&amp;lt;/tt&amp;gt; with enabled ATAPI support of &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; and loads &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; before the IDE driver): &lt;br /&gt;
 '''# echo options libata atapi_enabled=1&amp;gt;/etc/modprobe.d/atapienable &amp;amp;&amp;amp; update-initramfs -u'''&lt;br /&gt;
Note : If your work was successful, your CD-ROM drive will no longer be accesiible through /dev/hdc, but /dev/scd0.&lt;br /&gt;
&lt;br /&gt;
If this all doesn't work, use {{cmd|lspci -vn|}} to check whether one of the following chipsets is used in the Thinkpad:&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
!PCI ID &lt;br /&gt;
!Name&lt;br /&gt;
|-&lt;br /&gt;
|8086:7111&lt;br /&gt;
|Intel 82371AB/EB/MB PIIX4 IDE&lt;br /&gt;
|-&lt;br /&gt;
|8086:24db&lt;br /&gt;
|Intel 82801EB/ER (ICH5/ICH5R) IDE Controller&lt;br /&gt;
|-&lt;br /&gt;
|8086:25a2&lt;br /&gt;
|Intel 6300ESB PATA Storage Controller&lt;br /&gt;
|}&lt;br /&gt;
If yes, enable support for these chipsets has to be enabled by setting&lt;br /&gt;
 #define ATA_ENABLE_PATA&lt;br /&gt;
in {{path|include/linux/libata.h}} (and report your ThinkPad model in the discussion page).&lt;br /&gt;
&lt;br /&gt;
There have been reports that DVD burning doesn't work under this configuration, but it seems to work with kernel 2.6.14 and later (tested on a ThinkPad {{T43}} and {{T43p}} with a [[UltraBay Slim DVD Multi-Burner Plus]]).&lt;br /&gt;
&lt;br /&gt;
===Problem with kernel 2.6.16 kernel and suspend2 2.2.1===&lt;br /&gt;
DVD access fails with kernel 2.6.16.* and [[Software Suspend 2|suspend2]] 2.2.1. Thia is fixed by later versions of suspend2, or by deleting the 4000-libata-rollup-2616-rc3.patch (see &lt;br /&gt;
[http://lists.suspend2.net/lurker/message/20060322.082452.873dc526.en.html this post notice] by Alexander E. Patrakov).&lt;br /&gt;
&lt;br /&gt;
===Links===&lt;br /&gt;
* RedHat Bugzilla [https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=163418 bug 163418: &amp;quot;can't enable DMA on DVD drive&amp;quot;]&lt;br /&gt;
* Enabling DMA on a SATA DVD drive, kernel 2.6.18 [http://thomer.com/howtos/dma_on_sata_dvd.html]&lt;br /&gt;
&lt;br /&gt;
==No DMA on system hard disk==&lt;br /&gt;
&lt;br /&gt;
In recent Linux kernels, there are two modules capable of handling the ICH6 disk controller:&lt;br /&gt;
* &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt;: the disk shows as {{path|/dev/sda}} and DMA is enabled.&lt;br /&gt;
* Generic IDE driver (&amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt;): the disk shows as {{path|/dev/hda}} and DMA is disabled.&lt;br /&gt;
&lt;br /&gt;
The simplest way to enable DMA is to force the IDE driver to ignore the system hard disk by passing the {{bootparm|hda|noprobe}} and {{bootparm|hda|none}} kernel argument. The driver will then be handled by the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver. Note that this will change its device name to {{path|/dev/sda}} (which may require changes in {{path|/etc/fstab}} and the boot loader) and may cause other problems as listed above.&lt;br /&gt;
&lt;br /&gt;
(Observed on a ThinkPad T43 with Fedora Core kernel 2.6.13-1.1526_FC4.)&lt;br /&gt;
(Observed on a ThinkPad X40 with Debian kernel 2.6.18-4-686.) [[User:Hendry|Hendry]] 20:05, 11 June 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
==No SMART support==&lt;br /&gt;
&lt;br /&gt;
Prior to kernel 2.6.15, the Linux SATA system did not support SMART commands (e.g., via smartctl).&lt;br /&gt;
&lt;br /&gt;
The necessary capability is &amp;quot;libata pass-through&amp;quot;, which was incorporated into Linux 2.6.15-rc1 and later. A patch is available for older kernels:&lt;br /&gt;
* Kernel 2.6.12: http://rtr.ca/dell_i9300/kernel/kernel-2.6.12/03_libata_passthru.patch&lt;br /&gt;
* Kernel 2.6.13: http://rtr.ca/dell_i9300/kernel/kernel-2.6.13/02_libata_passthru.patch&lt;br /&gt;
* Kernel 2.6.14: http://www.foo.fh-furtwangen.de/~koenigr/02_libata_passthru.fixed.again.patch&lt;br /&gt;
* Kernel 2.6.14 with the above suspend-to-RAM patch: http://linux.spiney.org/system/files?file=02_libata_passthru.fixed.patch&lt;br /&gt;
&lt;br /&gt;
After applying the patch, run smartctl with the &amp;quot;-d ata&amp;quot; parameter:&lt;br /&gt;
:{{cmdroot|smartctl -d ata -a /dev/sda}}&lt;br /&gt;
&lt;br /&gt;
From smartmontools version 5.37 &amp;quot;-d sat&amp;quot; is preferred to &amp;quot;-d ata&amp;quot;. The smartctl command will auto-detect SATA disks so:&lt;br /&gt;
:{{cmdroot|smartctl -a /dev/sda}}&lt;br /&gt;
should just work. The smartd daemon still requires &amp;quot;-d sat&amp;quot; in /etc/smartd.conf .&lt;br /&gt;
&lt;br /&gt;
==No disk power management==&lt;br /&gt;
&lt;br /&gt;
Prior to kernel 2.6.15, the Linux SATA system did not support power management commands on these models.&lt;br /&gt;
&lt;br /&gt;
The above patches for SMART support resolves this, and in particular enables the following commands:&lt;br /&gt;
* {{cmdroot|hdparm -y}} (spin down)&lt;br /&gt;
* {{cmdroot|hdparm -S num}} (automatic spin down timeout)&lt;br /&gt;
* {{cmdroot|hdparm -B num}} (advanced power management level)&lt;br /&gt;
Note that this command is still rejected:&lt;br /&gt;
* {{cmdroot|hdparm -M num}} (acoustic management)&lt;br /&gt;
(Tested with patched kernels 2.6.13.1 and 2.6.12-4 and a 60GB 7200RPM disk model HTS726060M9AT00.)&lt;br /&gt;
&lt;br /&gt;
Refer to [[How to make use of Harddisk Power Management features]] for details about using&lt;br /&gt;
HD power management.  Refer to [[Laptop-mode]] if you are interested into spinning down your HD.&lt;br /&gt;
&lt;br /&gt;
==No disk information==&lt;br /&gt;
&lt;br /&gt;
Prior to kernel 2.6.15, on these models the disk information could not be read by the standard commands such as:&lt;br /&gt;
*{{cmdroot|hdparm -i /dev/sda}}&lt;br /&gt;
*{{cmdroot|hdparm -I /dev/sda}}&lt;br /&gt;
The latter is fixed by the above patch for SMART support.&lt;br /&gt;
&lt;br /&gt;
==No swapping of UltraBay device==&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver in mainline Linux kernels supports hot-swapping and warm-swapping of PATA and SATA devices. This requires kernel 2.6.18 or newer (with older kernels, you must power off the laptop before swapping such devices). See [[How_to_hotswap_UltraBay_devices#When_using_the_ata_piix_driver|How_to_hotswap_UltraBay_devices]] for further information.&lt;br /&gt;
&lt;br /&gt;
Swapping of the [[UltraBay Slim Battery]] works out-of-the box.&lt;br /&gt;
&lt;br /&gt;
==BIOS error 2010 on user-installed hard disk==&lt;br /&gt;
&lt;br /&gt;
While not a Linux issue, note that there is an issue with installing alternative PATA (IDE) hard disks as the system drive. Unless the disk is one of the few approved disks listed inside the BIOS, you will get an BIOS error 2010 during system boot, and the disk may operate unreliably. See [[Problem with non-ThinkPad hard disks]].&lt;br /&gt;
&lt;br /&gt;
==RHEL3.0 Update 7 on T60p==&lt;br /&gt;
&lt;br /&gt;
RHEL3.0 Update 7 will install on a {{T60p}}, but you need to make an adjustment.  Both uni-processor and SMP kernels get installed, with the SMP kerrnel the default.  However, the SMP kernel can't seem to find the disk drive.  You can work around this by use &amp;quot;e&amp;quot; at the GRUB kernel prompt, then on the &amp;quot;kernel&amp;quot; line appending &amp;quot; noapic&amp;quot;.  After the system boots, you'll want to edit /boot/grub/grub.conf to add the &amp;quot; noapic&amp;quot; option to the kernel line as well.&lt;br /&gt;
&lt;br /&gt;
==Mandriva 2006 on T60==&lt;br /&gt;
&lt;br /&gt;
Mandriva 2006.0 has a problem with SATA on a {{T60}}, to fix this you need to make an adjustment. The install procedure can't seem to find the SATA disk drive, you can work around this by adding the &amp;quot;noapic&amp;quot; kernel option during CD/DVD boot. You *might* need to add this to lilo or GRUB for normal operations, after install completes. The problem with not using apic during normal operations is that you might have problems with power management, please see article on [[Software Suspend 2]]&lt;br /&gt;
&lt;br /&gt;
==Problem burning CD/DVD==&lt;br /&gt;
&lt;br /&gt;
To a CD/DVD problem, try to burn a CD/DVD as &amp;quot;root&amp;quot;-user on command-line with the option &amp;quot;-dummy&amp;quot; and &amp;quot;-v&amp;quot; enabled, do not use K3B or similar. Doing so you will get more informations and waste less CD/DVD's. &lt;br /&gt;
&lt;br /&gt;
Experiment with the parameters &amp;quot;burnfree&amp;quot; and &amp;quot;dev&amp;quot;. With cdrecord on debian etch, burnfree seems not work, disable it. With wodim on debian etch: try parameter &amp;quot;dev=/dev/scd0&amp;quot;, the default &amp;quot;dev=1,0,0&amp;quot; seems not to work.&lt;br /&gt;
&lt;br /&gt;
==Spurious NCQ completions==&lt;br /&gt;
&lt;br /&gt;
The HDD firmware support for NCQ appears to be buggy ([http://lkml.org/lkml/2007/6/6/15 LKML posting] and [http://lkml.org/lkml/2007/6/6/195 LKML posting]).&lt;/div&gt;</summary>
		<author><name>Mist</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=How_to_get_special_keys_to_work&amp;diff=32258</id>
		<title>How to get special keys to work</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=How_to_get_special_keys_to_work&amp;diff=32258"/>
		<updated>2007-08-20T10:04:57Z</updated>

		<summary type="html">&lt;p&gt;Mist: /* Overview */  thinkvantage added&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
The following table gives an overview over the special keys found on ThinkPads and what is needed to make them work.&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
! key !! standard function{{footnote|1}} !! tools supporting key{{footnote|2}} !! configurability{{footnote|3}} !! remarks&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}} || - || [[#xmodmap configuration|xmodmap]], [[#tpb configuration|tpb]] || full || on release without completed key combination&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F1}} || - || [[#ibm-acpi events|ibm-acpi]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F2}} || lock screen || [[#ibm-acpi events|ibm-acpi]] || full || in models from T/X/Z 60 onwards&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F3}} || blank screen || [[#ibm-acpi events|ibm-acpi]], [[thinkpad-acpi]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F4}} || suspend to ram || [[#ibm-acpi events|ibm-acpi]], [[thinkpad-acpi]] || full || may generate ACPI event when not enabled in the ibm-acpi hotkey mask&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F5}} || switch bluetooth || [[#ibm-acpi events|ibm-acpi]], [[thinkpad-acpi]] || full || in models starting from 2002&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F6}} || - || [[#ibm-acpi events|ibm-acpi]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F7}} || switch display || [[#ibm-acpi events|ibm-acpi]], [[thinkpad-acpi]], [[#tpb configuration|tpb]] || additional actions || &lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F8}} || toggle display expansion || [[#ibm-acpi events|ibm-acpi]], [[thinkpad-acpi]], [[#tpb configuration|tpb]] || additional actions ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F9}} || eject from dock || [[#ibm-acpi events|ibm-acpi]], [[thinkpad-acpi]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F10}} || - || [[#ibm-acpi events|ibm-acpi]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F11}} || - || [[#ibm-acpi events|ibm-acpi]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F12}} || hibernate || [[#ibm-acpi events|ibm-acpi]], [[thinkpad-acpi]] || full || may generate ACPI event when not enabled in the ibm-acpi hotkey mask&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|Home}} / {{key|Fn}}{{key|Pos1}} || brightness up || [[#ibm-acpi events|ibm-acpi]], [[#tpb configuration|tpb]], [[KMilo]] || additional actions ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|End}} || brightness down || [[#tpb configuration|tpb]], [[KMilo]] || additional actions ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|PageUp}} || toggle thinklight || [[#tpb configuration|tpb]], [[KMilo]] || additional actions ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|Space}} || toggle zoom || [[#tpb configuration|tpb]], [[KMilo]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|Ins}} || - || [[#ibm-acpi events|ibm-acpi]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|Del}} || - || [[#ibm-acpi events|ibm-acpi]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|Backspace}} || - || [[#ibm-acpi events|ibm-acpi]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|NumLock}} || - || [[#xmodmap configuration|xmodmap]] || make working ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Windows}} || - || [[#xmodmap configuration|xmodmap]] || remapping ||&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Access IBM|#495988}} or {{ibmkey|ThinkPad|#494949}} or {{ibmkey|ThinkVantage|#495988}} || help application || [[#tpb configuration|tpb]], [[KMilo]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Home|#494949}} || open web browser || [[#xmodmap configuration|xmodmap]], [[#tpb configuration|tpb]], [[KMilo]] || full || only {{A30}}, {{A30p}}, {{A31}}, {{A31p}} and ext. keyboards&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Search|#494949}} || open search application || [[#xmodmap configuration|xmodmap]], [[#tpb configuration|tpb]], [[KMilo]] || full || only {{A30}}, {{A30p}}, {{A31}}, {{A31p}} and ext. keyboards&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Mail|#494949}} || open mail application || [[#xmodmap configuration|xmodmap]], [[#tpb configuration|tpb]], [[KMilo]] || full || only {{A30}}, {{A30p}}, {{A31}}, {{A31p}} and ext. keyboards&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Favorites|#494949}} || open favorites || [[#xmodmap configuration|xmodmap]], [[#tpb configuration|tpb]] || full || only {{A30}}, {{A30p}}, {{A31}}, {{A31p}} and ext. keyboards&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Reload|#494949}} || reload web page || [[#xmodmap configuration|xmodmap]], [[#tpb configuration|tpb]] || full || only {{A30}}, {{A30p}}, {{A31}}, {{A31p}} and ext. keyboards&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Abort|#494949}} || abort loading page || [[#xmodmap configuration|xmodmap]], [[#tpb configuration|tpb]] || full || only {{A30}}, {{A30p}}, {{A31}}, {{A31p}} and ext. keyboards&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Backward|#494949}} || previous page || [[#xmodmap configuration|xmodmap]], [[#tpb configuration|tpb]] || full ||  ext. keyboards and ThinkPads starting from 2002&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Forward|#494949}} || next page || [[#xmodmap configuration|xmodmap]], [[#tpb configuration|tpb]] || full || ext. keyboards and ThinkPads starting from 2002&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Volume up|#494949}} || volume up || [[#tpb configuration|tpb]], [[KMilo]] || additional actions ||&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Volume down|#494949}} || volume down || [[#tpb configuration|tpb]], [[KMilo]] || additional actions ||&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Volume mute|#494949}} || mute volume || [[#tpb configuration|tpb]], [[KMilo]] || additional actions ||&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Play/Pause|#494949}} || start/pause playback  || [[#xmodmap configuration|xmodmap]] || full || {{X60s}} (Fn+Arrow Down)&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Stop|#494949}} || stop playback || [[#xmodmap configuration|xmodmap]] || full || {{X60s}} (Fn+Arrow Up)&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Next|#494949}} || play next || [[#xmodmap configuration|xmodmap]] || full || {{X60s}} (Fn+Arrow Right)&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Previous|#494949}} || play previous || [[#xmodmap configuration|xmodmap]] || full || {{X60s}} (Fn+Arrow Left)&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Power|#494949}} || shutdown || [[#ibm-acpi events|ibm-acpi]] || full || triggered on pressing 3secs, but notebook goes off on 5sec press&lt;br /&gt;
|-&lt;br /&gt;
| Display lid || blank screen || [[#ibm-acpi events|ibm-acpi]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| Ultrabay lid || announce ultrabay change || [[#ibm-acpi events|ibm-acpi]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| Dock eject || eject from dock || [[#ibm-acpi events|ibm-acpi]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Tablet power|#494949}} || shutdown || [[#ibm-acpi events|ibm-acpi]] || full || triggered on pressing 3secs, but notebook goes off on 5sec press&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Tablet orientation|#494949}} || rotates screen || [[#Mapping keys with setkeycodes|setkeycodes]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Tablet shortcut|#494949}} || shortcut menu || [[#Mapping keys with setkeycodes|setkeycodes]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Tablet Esc|#494949}} || esc key || [[#Mapping keys with setkeycodes|setkeycodes]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Tablet Enter|#494949}} || enter key || [[#mapping keys with setkeycodes|setkeycodes]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Tablet Up|#494949}} || up key || [[#Mapping keys with setkeycodes|setkeycodes]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Tablet Down|#494949}} || down key || [[#Mapping keys with setkeycodes|setkeycodes]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Tablet (unlabeled)|#494949}} || down key || [[#Mapping keys with setkeycodes|setkeycodes]] || full ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Triggering key events==&lt;br /&gt;
===ibm-acpi events===&lt;br /&gt;
Some of the following events require a {{cmdroot|echo enable,0xffff &amp;gt;/proc/acpi/ibm/hotkey}} in order to make acpi able to get information on them. These events can be used to [[How to configure acpid|configure acpid]].&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
|+ events triggered by [[ibm-acpi]] for {{path|/etc/acpi/events}} files. &lt;br /&gt;
! key !! event&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F1}} || ibm/hotkey HKEY 00000080 00001001&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F2}} || ibm/hotkey HKEY 00000080 00001002&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F3}} || ibm/hotkey HKEY 00000080 00001003&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F4}} || ibm/hotkey HKEY 00000080 00001004&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F5}} || ibm/hotkey HKEY 00000080 00001005&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F6}} || ibm/hotkey HKEY 00000080 00001006&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F7}} || ibm/hotkey HKEY 00000080 00001007&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F8}} || ibm/hotkey HKEY 00000080 00001008&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F9}} || ibm/hotkey HKEY 00000080 00001009&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F10}} || ibm/hotkey HKEY 00000080 0000100a&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F11}} || ibm/hotkey HKEY 00000080 0000100b&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F12}} || ibm/hotkey HKEY 00000080 0000100c&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|Backspace}} || ibm/hotkey HKEY 00000080 0000100d&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|Ins}} || ibm/hotkey HKEY 00000080 0000100e&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|Del}} || ibm/hotkey HKEY 00000080 0000100f&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|Home}}/{{key|Fn}}{{key|Pos1}} || ibm/hotkey HKEY 00000080 00001010&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Power|#494949}} || button/power PWRF 00000080 xxxxxxxx&lt;br /&gt;
|-&lt;br /&gt;
| Display lid || button/lid LID 00000080 xxxxxxxx&lt;br /&gt;
|-&lt;br /&gt;
| Ultrabay eject || ibm/bay MSTR 00000003 00000000&lt;br /&gt;
|-&lt;br /&gt;
| Ultrabay inserted || ibm/bay MSTR 00000001 00000000&lt;br /&gt;
|-&lt;br /&gt;
| Dock eject || ibm/dock GDCK 00000003 00000001&lt;br /&gt;
|-&lt;br /&gt;
| Wireless switch || ibm/hotkey HKEY 00000080 00007000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
By disassembling and editing the DSDT, more events can be added.  HKEY events are triggered by calls to the MKHQ function, e.g. &amp;lt;tt&amp;gt;\_SB.PCI0.LPC.EC.HKEY.MHKQ(0Ã—1007)&amp;lt;/tt&amp;gt; will trigger &amp;quot;ibm/hotkey HKEY 00000080 00001007&amp;quot;.  Most of these can be found in &amp;lt;tt&amp;gt;_Qxx&amp;lt;/tt&amp;gt; methods within the DSDT, which are executed on embedded controller events, e.g. _Q10 is triggered by pressing Fn-F7.  You can add a call to MKHQ into an existing &amp;lt;tt&amp;gt;_Qxx&amp;lt;/tt&amp;gt; method to get it recognized by ibm-acpi as well as creating new &amp;lt;tt&amp;gt;_Qxx&amp;lt;/tt&amp;gt; methods, which if you're lucky will correspond to an EC event that IBM never used (e.g. A 770 will send Fn-Home/End/PgUp/PgDn to ibm-acpi if hacked in this fashion). For example, [http://www.wormnet.eu/ibm-g40/morebuttons.dsl this is a modified block of DSDT for a G40].&lt;br /&gt;
&lt;br /&gt;
=== Pure ACPI events ===&lt;br /&gt;
&lt;br /&gt;
A few keys can generate ACPI events of their own on certain ThinkPads, as long as they are masked off in the ibm-acpi hotkey's mask (or the hotkey feature is disabled in ibm-acpi).&lt;br /&gt;
&lt;br /&gt;
If you want the ThinkPad's BIOS and ACPI methods to know about these keys being pressed, you probably want to leave them masked out from ibm-acpi, and use their non-HKEY events listed below, instead.&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
|+ events triggered by ACPI when hotkey is masked out or disabled. &lt;br /&gt;
! key !! event&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F4}} || button/sleep SLPB 00000080 00000001&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F12}} || ibm/hotkey HKEY 00000080 0000100c&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===tpb configuration===&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
|+ configuration keywords for [[tpb]] (to put in {{path|/etc/tpbrc}})&lt;br /&gt;
! key !! config keyword&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Access IBM|#495988}} or {{ibmkey|ThinkPad|#494949}} || THINKPAD&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Home|#494949}} || HOME&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Search|#494949}} || SEARCH&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Mail|#494949}} || MAIL&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Favorites|#494949}} || FAVORITES&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Reload|#494949}} || RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Abort|#494949}} || ABORT&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Backward|#494949}} || BACKWARD&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Forward|#494949}} || FORWARD&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}} || FN&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|Space}} || CALLBACK (zoom on/off)&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|PageUp}} || CALLBACK (thinklight on/off)&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F7}} || CALLBACK (display lcd/crt/both)&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F8}} || CALLBACK (expand on/off)&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|Home}} / {{key|Fn}}{{key|Pos1}} || CALLBACK (brightness &amp;lt;percent&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|End}} || CALLBACK (brightness &amp;lt;percent&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Volume up|#494949}} || CALLBACK (volume &amp;lt;percent&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Volume down|#494949}} || CALLBACK (volume &amp;lt;percent&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Volume mute|#494949}} || CALLBACK (mute on/off)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To all parameter keywords should be assigned the full path to the executables supposed to be started on key press.&lt;br /&gt;
The exectable provided for the CALLBACK keyword should take the parameters given in parentheses and act according to them.&lt;br /&gt;
If you want to use xmodmap for the HOME, SEARCH, MAIL, FAVORITES, RELOAD, ABORT, BACKWARD, FORWARD and FN keys you should&lt;br /&gt;
provide a &amp;lt;tt&amp;gt;XEVENTS OFF&amp;lt;/tt&amp;gt; in your {{path|/etc/tpbrc}}. &lt;br /&gt;
You can use an appropriate executable to [[How to inject fake keystrokes|inject fake keystrokes]].&lt;br /&gt;
&lt;br /&gt;
For Debian users, tpb is started from {{path|/etc/X11/Xsession.d/90tpb}}.&lt;br /&gt;
&lt;br /&gt;
'''Sound Button configuration'''&lt;br /&gt;
&lt;br /&gt;
''Note: Tested on T60p with Ubuntu 6.06 LTS''&lt;br /&gt;
&lt;br /&gt;
Most Thinkpads have a hardware sound mixer, thus the volumes buttons should work without configuration. However, this change is not reflected in the software mixer. tpb has a switch to enable software mixer support via OSS. The manual recommends this only for devices without a hardware mixer, but it also works for other hadware mixer enabled devices, even with the ALSA system. Just put MIXER ON in your {{path|/etc/tpbrc}} file and you can see the effect immediately in any ALSA mixer (e.g. kmix). For this to work you need write permissions to {{path|/dev/nvram}}.&lt;br /&gt;
&lt;br /&gt;
''Note: Tested on X21 with Ubuntu 6.06 LTS''&lt;br /&gt;
&lt;br /&gt;
On the ThinkPad X21 (and maybe some other older models) ACPI causes problems with tpb.  On an X21 using acpi the volume buttons would work occasionally, and the OSD for tpb functions would rarely work.  If a volume buttons was pressed too often, sometimes the computer would enter a low power (unplugged state) and would require a reboot.  The solution is to use APM instead of ACPI.  Instructions can be found in [[How_to_make_APM_work]].&lt;br /&gt;
&lt;br /&gt;
===KMilo configuration===&lt;br /&gt;
The programs to be executed by [[KMilo]] are configured via the KDE Control Center (&amp;lt;tt&amp;gt;kcontrol&amp;lt;/tt&amp;gt;), under &amp;lt;tt&amp;gt;System Administration --&amp;gt; IBM Thinkpad Laptop&amp;lt;/tt&amp;gt;. Note that you can use appropriate commands to [[How to inject fake keystrokes|inject fake keystrokes]].&lt;br /&gt;
&lt;br /&gt;
===xmodmap configuration===&lt;br /&gt;
xmodmap enables you to edit the modifier map and keymap tables that are used to translate keycodes into keysyms.&lt;br /&gt;
Understood? Well, basically it allows you to give the X server a dictionary for the translation of keycodes like &amp;quot;97&amp;quot; into more human readable synonyms like &amp;quot;Home&amp;quot;. This way xmodmap allows you to make the special keys of your keyboard known to X applications.&lt;br /&gt;
&lt;br /&gt;
To discover the keycode that a certain keypress produces, use the tool {{cmduser|xev}} &lt;br /&gt;
&lt;br /&gt;
Usually you should write your keycode-keysym associations into the file {{path|~/.Xmodmap}}. This file is usually read by the X session startup scripts of your system, so that the mappings automatically get included everytime you run the X server.&lt;br /&gt;
&lt;br /&gt;
The {{path|~/.Xmodmap}} lines for our purpose are in the form of&lt;br /&gt;
 keycode &amp;lt;keycode&amp;gt; = &amp;lt;keysym&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Load the assocation using the command&lt;br /&gt;
&lt;br /&gt;
{{cmduser|xmodmap ~/.Xmodmap}} &lt;br /&gt;
&lt;br /&gt;
(some configurations do this automatically upon X startup). &lt;br /&gt;
&lt;br /&gt;
The following table shows the keycodes generated by the ThinkPad special keys and sensible keysyms to assign them to.&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
|+ keycodes and recommended keysyms&lt;br /&gt;
! key !! keycode !! keysym&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Access IBM|#495988}} or {{ibmkey|ThinkPad|#494949}} || 159 || XF86LaunchA&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Backward|#494949}} || 234 || XF86Back or F19&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Forward|#494949}} || 233 || XF86Forward or F20&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Play/Pause|#494949}} || 162 || XF86AudioPlay&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Stop|#494949}} || 164 || XF86AudioStop&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Next|#494949}} || 153 || XF86AudioNext&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Previous|#494949}} || 144 || XF86AudioPrev&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| {{ibmkey|Home|#494949}} || 178 || XF86HomePage&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Search|#494949}} || 229 || XF86Search&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Mail|#494949}} || 236 || XF86Mail&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Favorites|#494949}} || 230 || XF86AddFavorite or XF86Favorites&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Reload|#494949}} || 231 || XF86Reload&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Abort|#494949}} || 232 || XF86Stop&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}} || 227 || F35&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: You can also using xkeycaps(a tool graphically display and edit the X keyboard mapping) to generate proper .Xmodmap.&lt;br /&gt;
&lt;br /&gt;
Note: if you are running [[tpb]] you might need to add the line &amp;lt;tt&amp;gt;XEVENTS=off&amp;lt;/tt&amp;gt; into your tpbrc to stop it from grabbing the key events and allow them to get through to X instead. See [[http://www.thinkwiki.org/wiki/Tpb]] for more detailed instruction on how to use tpb and xmodmap.&lt;br /&gt;
&lt;br /&gt;
Note: XF86Forward and XF86Back do not work correctly in Firefox. You may want to map them to F19 and F20 instead if you use Firefox.&lt;br /&gt;
&lt;br /&gt;
Note: The &amp;quot;XF86AudioPlay&amp;quot; etc. just works with a few programs. To make it work with more multimedia programs you have map the key to use something like [http://www.kde-apps.org/content/show.php/ReMoot?content=63140 ReMoot]. ReMoot is a command line wrapper that control 18 of the most common multimedia applications. &lt;br /&gt;
&lt;br /&gt;
=====Enabling the Windows and Menu Keys=====&lt;br /&gt;
On some systems the Windows and Menu keys may not be recognized.  You can enable then by&lt;br /&gt;
making the following changes:&lt;br /&gt;
&lt;br /&gt;
        keycode 115 = F13&lt;br /&gt;
        keycode 227 = F35&lt;br /&gt;
&lt;br /&gt;
F13 and F35 are used for the Windows and and Menu keys respectively.  Labelling keycpode 227 as &amp;quot;Menu&amp;quot; may conflict with the right-mouse-click event.&lt;br /&gt;
&lt;br /&gt;
=====Using Caps Lock as Super L (Windows key)=====&lt;br /&gt;
You can easily use Caps Lock as Win key by adding the following in your ~/.Xmodmap:&lt;br /&gt;
        ! No Caps Lock&lt;br /&gt;
        clear lock&lt;br /&gt;
        ! Caps Lock as Win key&lt;br /&gt;
        add mod4 = Caps_Lock&lt;br /&gt;
=====NumLock=====&lt;br /&gt;
On the ThinkPad {{600}}, {{T20}}, {{T21}}, {{T22}}, {{T30}}, {{X20}}, {{X21}},  {{X31}}, {{T42p}}, {{T43}}, {{R51}}, {{R52}} and possibly other models, X does not recognize the keycode for {{key|NumLk}} = {{key|Shift}}+{{key|ScrLk}}. To fix this, add the following to {{path|~/.Xmodmap}} in your home directory or {{path|/etc/X11/Xmodmap}} and run &amp;lt;tt&amp;gt;xmodmap&amp;lt;/tt&amp;gt;, ex: &amp;lt;tt&amp;gt;xmodmap ~/.Xmodmap&amp;lt;/tt&amp;gt;:&lt;br /&gt;
 keycode 77 = Num_Lock&lt;br /&gt;
&lt;br /&gt;
===Mapping keys with setkeycodes===&lt;br /&gt;
You can use the setkeycodes command to remap certain keys. I.e. you can use {{cmdroot|setkeycodes 6e 109 6d 104 69 28 6b 1}} to map the Tablets Up and Down keys to the standard PageUp and PageDown keys and Tablet Escape and Enter to their respective keys.&lt;br /&gt;
&lt;br /&gt;
The following table shows the keycodes generated by the ThinkPad keys.&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
|+ keycodes&lt;br /&gt;
! key !! keycode&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Tablet orientation|#494949}} || 0x6d&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Tablet Shortcut|#494949}} || 0x6e&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Tablet Esc|#494949}} || 0x6b&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Tablet Enter|#494949}} || 0x69&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Tablet Up|#494949}} || 0x68&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Tablet Down|#494949}} || 0x6c&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Tablet (unlabeled)|#494949}} || 0x67&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Example Applications==&lt;br /&gt;
===Web Browsers===&lt;br /&gt;
====Firefox====&lt;br /&gt;
&lt;br /&gt;
There are various ways to assign actions to the browser keys. The easiest way is to install [http://mozilla.dorando.at/keyconfig.xpi keyconfig.xpi] from http://mozilla.dorando.at, which adds a menu entry Tools-&amp;gt;Keyconfig. Then you can assign any action you want to the F19/F20 keys (you still need to create {{path|~/.Xmodmap}} as explained above).&lt;br /&gt;
&lt;br /&gt;
The remaining discussion gives you various more complicated ways to achieve the same thing. &lt;br /&gt;
To have firefox make use of the browser keys you need to modify one of its files{{footnote|4}}.&lt;br /&gt;
To do this you will first need to extract it from the {{path|browser.jar}} archive. Do...&lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|cd &amp;lt;firefox-directory&amp;gt;/chrome}}&amp;lt;br /&amp;gt;&lt;br /&gt;
:{{cmdroot|unzip browser.jar}}&lt;br /&gt;
&lt;br /&gt;
The file of interest is {{path|content/browser/browser.xul}}. Edit it {and don't forget to make a backup copy first}...&lt;br /&gt;
:{{cmdroot|vi content/browser/browser.xul}}&lt;br /&gt;
&lt;br /&gt;
Look for the '''&amp;lt;keyset id=&amp;quot;mainKeyset&amp;quot;&amp;gt;''' section and add the following lines within...&lt;br /&gt;
 &amp;lt;key id=&amp;quot;goBackKb&amp;quot; keycode=&amp;quot;VK_F19&amp;quot; command=&amp;quot;Browser:Back&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;key id=&amp;quot;goForwardKb&amp;quot; keycode=&amp;quot;VK_F20&amp;quot; command=&amp;quot;Browser:Forward&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Command you need for Next Tab &lt;br /&gt;
 &amp;lt;key id=&amp;quot;goBackTabKb&amp;quot; keycode=&amp;quot;VK_F19&amp;quot; oncommand=&amp;quot;gBrowser.mTabContainer.advanceSelectedTab(-1)&amp;quot; /&amp;gt;&lt;br /&gt;
For the Previous Tab &lt;br /&gt;
 &amp;lt;key id=&amp;quot;goForwardTabKb&amp;quot; keycode=&amp;quot;VK_F20&amp;quot; oncommand=&amp;quot;gBrowser.mTabContainer.advanceSelectedTab(1)&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now save the file and repackage the {{path|browser.jar}} archive...&lt;br /&gt;
:{{cmdroot|zip -rD0 browser.jar content/browser/}}&lt;br /&gt;
&lt;br /&gt;
That's it.&lt;br /&gt;
&lt;br /&gt;
{{HINT|For Firefox 2.0, just edit &amp;lt;firefox-directory&amp;gt;/chrome/browser/content/browser/browser.xul}}&lt;br /&gt;
&lt;br /&gt;
{{HINT|Outdated: Another interesting Page on Firefox is http://dqd.com/~mayoff/notes/thinkpad/dqdnavkeys/ It uses different key mappings (F19 resp. F20) but a ready [http://dqd.com/~mayoff/notes/thinkpad/dqdnavkeys/dqdnavkeys-1.2.xpi .xpi] is provided which is pretty comfortable. However, this xpi file does not install on Firefox 1.5. or later.}}&lt;br /&gt;
&lt;br /&gt;
{{HINT|Outdated: You can also use the [http://extensionroom.mozdev.org/more-info/keyconfig keyconfig] extension to configure custom keys.  This extension works with Firefox 1.5 but not with Firefox 2.0. The Command you need for Next Tab is gBrowser.mTabContainer.advanceSelectedTab(1,true); For Previous Tab its gBrowser.mTabContainer.advanceSelectedTab(-1,true); }}.&lt;br /&gt;
&lt;br /&gt;
====Konqueror====&lt;br /&gt;
KDE allows you set key mappings for KDE applications (Go to KMenu &amp;gt; System &amp;gt; Control Center &amp;gt; Regional &amp;amp; Accessibility &amp;gt; Keyboard Shortcuts). By default (at least in KDE 3.5), XF86Back and XF86Forward are set as alternatives to Alt-Left and Alt-Right, and are mapped to KDE Back and Forward navigation actions.  &lt;br /&gt;
&lt;br /&gt;
If you use Konqueror as your only browser, you only need to set up {{path|~/.Xmodmap}} as described [[#xmodmap configuration|above]] to assign ThinkPad back/forward keys to the symbols XF86Back/XF86Forward. This also make these keys work for other KDE applications such as Quanta Plus, KPackage and so on (not all KDE applications honor this setting, e.g. KDE help system doesn't).&lt;br /&gt;
&lt;br /&gt;
If you want to use Firefox, however, the above settings do not work. You will have to map ThinkPad back/forward keys to F19/F20 as described [[#Firefox|above]], and change KDE navigation key settings to use F19/F20 instead of the default.&lt;br /&gt;
&lt;br /&gt;
====Opera====&lt;br /&gt;
However this isn't a simple configration file, you can set your browser manually.&amp;lt;br /&amp;gt;&lt;br /&gt;
Go to &amp;lt;i&amp;gt;Tool &amp;gt; Settings &amp;gt; Mouse and keyboard &amp;gt; Keyboard settings &amp;gt; Edit &amp;gt; Browser Window&amp;lt;/i&amp;gt;. There add F19 - Back and F20 - Forward. Now you can surf using your TP keys ;-)&lt;br /&gt;
&lt;br /&gt;
===Window Managers===&lt;br /&gt;
====fvwm====&lt;br /&gt;
To get the {{ibmkey|Forward|#494949}} and {{ibmkey|Backward|#494949}} keys to cycle through pages in the virtual desktop, add this to your {{path|~/.fvwmrc}}:&lt;br /&gt;
 Key    XF86Back     A      A   Scroll     -100000   0&lt;br /&gt;
 Key    XF86Forward  A      A   Scroll     +100000   0&lt;br /&gt;
If you use multiple virtual desktops, you could instead use the keys to flip between them by using GotoDesk.&lt;br /&gt;
&lt;br /&gt;
====fluxbox====&lt;br /&gt;
To get the keys to cycle through pages in the virtual desktop, add this to your {{path|~/.fluxbox/keys}}:&lt;br /&gt;
 None F19 :PrevWorkspace&lt;br /&gt;
 None F20 :NextWorkspace&lt;br /&gt;
&lt;br /&gt;
====pekwm configuration====&lt;br /&gt;
You can make the two browser keys switch workspaces in pekwm, by adding the following two lines to the {{path|~/.pekwm/keys}} file:&lt;br /&gt;
 KeyPress = &amp;quot;Mod1 XF86Back&amp;quot; { Actions = &amp;quot;GoToWorkspace prev&amp;quot; }&lt;br /&gt;
 KeyPress = &amp;quot;Mod1 XF86Forward&amp;quot; { Actions = &amp;quot;GoToWorkspace next&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
====pwm====&lt;br /&gt;
Another example how to use these two keys to switch between pwm tabs. These two lines should be added to {{path|~/.pwm/keys-default.conf}} or {{path|/etc/pwm/keys-default.conf}}:&lt;br /&gt;
 kbind &amp;quot;Back&amp;quot;, &amp;quot;switch_rot&amp;quot;, -1&lt;br /&gt;
 kbind &amp;quot;Forward&amp;quot;, &amp;quot;switch_rot&amp;quot;, 1&lt;br /&gt;
&lt;br /&gt;
====IceWM====&lt;br /&gt;
To make IceWM cycle workspaces using the {{ibmkey|Forward|#494949}} and {{ibmkey|Backward|#494949}} keys, change these two options in {{path|~/.icewm/preferences}} (Provided you assigned keysyms F19 and F20 with xmodmap):&lt;br /&gt;
 # &amp;quot;Previous workspace&amp;quot; shortcut&lt;br /&gt;
 KeySysWorkspacePrev=&amp;quot;F19&amp;quot;&lt;br /&gt;
 # &amp;quot;Next workspace&amp;quot; shortcut&lt;br /&gt;
 KeySysWorkspaceNext=&amp;quot;F20&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Gnome/metacity ====&lt;br /&gt;
&lt;br /&gt;
Follow the [https://wiki.ubuntu.com/Keybindings Ubuntu guide].&lt;br /&gt;
&lt;br /&gt;
===Other Uses===&lt;br /&gt;
====Console tools configuraton====&lt;br /&gt;
To make the {{ibmkey|Forward|#494949}} and {{ibmkey|Backward|#494949}} keys useful in console, add this to your keymap ({{path|/etc/console/boottime.kmap.gz}} in {{Debian}}):&lt;br /&gt;
 keycode 158 = Decr_Console&lt;br /&gt;
 keycode 159 = Incr_Console&lt;br /&gt;
&lt;br /&gt;
Alternatively you can load this script (perhaps on system startup) to enable Backward/Forward button console (VT) switch:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 echo keycode 158 = Decr_Console | loadkeys&lt;br /&gt;
 echo keycode 159 = Incr_Console | loadkeys&lt;br /&gt;
&lt;br /&gt;
It should work with any distro.&lt;br /&gt;
&lt;br /&gt;
==External Sources==&lt;br /&gt;
*[http://www-307.ibm.com/pc/support/site.wss/document.do?lndocid=MIGR-51537 IBMs page on configuring the ThinkPad buttons (ThinkPad, Access IBM, Mail, Search, and Home buttons) under Linux]&lt;br /&gt;
*[http://dqd.com/~mayoff/notes/thinkpad/dqdnavkeys/ Rob Mayoffs page on using IBM Keyboard Navigation Keys in Linux Mozilla and Firefox]&lt;br /&gt;
*[http://snarfed.org/space/thinkpad+keys+in+firefox Ryan Barretts blog article about using the browser keys in Firefox]&lt;br /&gt;
*[http://chaotika.org/~bluesceada/?page=soft&amp;amp;sub=thinkpad#acpibutn DennisG's help to get the ibm-acpi buttons do useful things] on a {{Z61e}} and possibly {{Z61m}}, {{Z61t}} and {{Z61p}}&lt;br /&gt;
&lt;br /&gt;
{{footnotes|&lt;br /&gt;
#Note that the associated functionality for Fn-F* key combinations is not consistent amongst all ThinkPads. We are maintaining [[Default meanings of special keys|a table of associated meanings]].&lt;br /&gt;
#if there are more than one tool listed, one is sufficient&lt;br /&gt;
#'full' means you can completely reassign any action to be triggered by the key, 'additional actions' means you can trigger actions in addition to the standard function of the key, which can not be changed.&lt;br /&gt;
#Thanks go to Ryan Barrett for writing the [http://snarfed.org/space/thinkpad+keys+in+firefox little howto] on [http://snarfed.org/space/start his blog].&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Mist</name></author>
		
	</entry>
</feed>