<?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=Whoopie</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=Whoopie"/>
	<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/wiki/Special:Contributions/Whoopie"/>
	<updated>2026-04-19T03:09:29Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.12</generator>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Ipw2200&amp;diff=44635</id>
		<title>Ipw2200</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Ipw2200&amp;diff=44635"/>
		<updated>2009-11-01T21:17:18Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: &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;
&lt;br /&gt;
The '''Ipw2200''' is the Linux driver for the [[Intel PRO/Wireless 2200BG Mini-PCI Adapter]] and [[Intel PRO/Wireless 2915ABG Mini-PCI Adapter]] found in [[Centrino]] laptops. This driver only works on 2.6.x kernels (2.6.4 or newer).&lt;br /&gt;
&lt;br /&gt;
Starting with kernels 2.6.14 the driver is included in kernel.&lt;br /&gt;
&lt;br /&gt;
{{NOTE|Make sure you have installed the firmware! The ipw2200 documentation will tell you where to find these firmware files and where to install those.}}&lt;br /&gt;
&lt;br /&gt;
Included in mainline Linux kernels, tracking the SourceForge version with about 6 months delay.&lt;br /&gt;
&lt;br /&gt;
== Packages ==&lt;br /&gt;
*{{Fedora}} Packages(1): Fedora Core includes the ipw2200-drivers in FC3 (with updates) and FC4. You still need to grab the firmware from http://rpm.livna.org/&lt;br /&gt;
*{{Fedora}} Packages(2): http://www.atrpms.net/name/ipw2200/ &lt;br /&gt;
*{{Mandriva}}: The ipw2200 driver modules are included in the stock kernel package; the firmware is included in the commercial distribution or available from http://plf.zarb.org/.&lt;br /&gt;
*{{Gentoo}}: The driver is in the portage tree: emerge net-wireless/ipw2200 and net-wireless/ipw2200-firmware&lt;br /&gt;
*{{Debian Sarge}} includes the source code for the modules in package ipw2200-source (http://packages.debian.org/ipw2200-source). You additionally need to download firmware manually.&lt;br /&gt;
*{{Debian Etch}} includes a version of the modules in its kernel or for a later version install package ipw2200-modules-2.6-486 or ipw2200-modules-2.6-686 or ipw2200-modules-2.6-686-bigmem or ipw2200-modules-2.6-k7 or  ipw2200-modules-2.6-amd64; or the source code for them in ipw2200-source (http://packages.debian.org/ipw2200-source) to compile one yourself. You additionally need to download firmware manually.&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
In development, usable, WEP 128bit encryption works, WPA and WPA2 work with drivers &amp;gt;= 1.0.2 using [[wpa_supplicant]], monitor/rfmon is supported as with version &amp;gt;= 1.0.6. Generally works well, but some users experience problems (especially with firmware restarts and with WPA functionality using [[wpa_supplicant]]). Passing the &amp;lt;tt&amp;gt;hwcrypto=0&amp;lt;/tt&amp;gt; module parameter improves reliability for many users.&lt;br /&gt;
&lt;br /&gt;
The ipw2200 driver up to version 1.0.6 (in combination with some newer kernels) had a problem getting DHCP leases (it turned out to be a bug in the broadcasting code). Version 1.0.7 seems to have fixed this.&lt;br /&gt;
&lt;br /&gt;
Older ipw2200 driver versions shipped by many distributions have been reported to freeze a T43 after several minutes of intensive communication.  Installing version 1.1.2 of the driver solved the problem.&lt;br /&gt;
&lt;br /&gt;
Latest stable versions:&lt;br /&gt;
* ipw2200 driver: 1.2.0&lt;br /&gt;
* firmware: 3.0&lt;br /&gt;
* ieee80211 stack: 1.2.15&lt;br /&gt;
&lt;br /&gt;
Latest development versions:&lt;br /&gt;
* ipw2200 driver: 1.2.2&lt;br /&gt;
* firmware: 3.1&lt;br /&gt;
* ieee80211 stack: 1.2.18&lt;br /&gt;
&lt;br /&gt;
Mainline kernels contain older (but mostly functional) versions of ipw2200 and ieee80211, and still require the addition of the [http://ipw2200.sourceforge.net/firmware.php firmware] files. To get the latest versions you need to separately install the [http://ipw2200.sourceforge.net/downloads.php ipw2200] module and [http://ieee80211.sourceforge.net/downloads.php ieee80211] stack.&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
=== Source Code ===&lt;br /&gt;
Download the latest [http://ieee80211.sourceforge.net/downloads.php ieee80211] stack and install it:&lt;br /&gt;
:{{cmdroot|tar xzvf ieee80211-1.2.15.tgz}}&lt;br /&gt;
:{{cmdroot|cd ieee80211-1.2.15}}&lt;br /&gt;
:{{cmdroot|make}}&lt;br /&gt;
:{{cmdroot|make install}}&lt;br /&gt;
&lt;br /&gt;
Download the latest [http://ipw2200.sourceforge.net/downloads.php ipw2200] module and install it:&lt;br /&gt;
:{{cmdroot|tar xzvf ipw2200-1.2.0.tgz}}&lt;br /&gt;
:{{cmdroot|cd ipw2200-1.2.0}}&lt;br /&gt;
:{{cmdroot|make}}&lt;br /&gt;
:{{cmdroot|make install}}&lt;br /&gt;
&lt;br /&gt;
Download the matching [http://ipw2200.sourceforge.net/firmware.php firmware] and install it:&lt;br /&gt;
:{{cmdroot|tar xzvf ipw2200-fw-3.1.tgz -C /lib/firmware}}&lt;br /&gt;
&lt;br /&gt;
=== Debian Sarge ===&lt;br /&gt;
{{cmdroot|apt-get install ipw2200-source}}&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|module-assistant -t build ipw2200-source}}&lt;br /&gt;
&lt;br /&gt;
[is this how module-assistant works in Sarge?]&lt;br /&gt;
&lt;br /&gt;
=== Debian Etch ===&lt;br /&gt;
&lt;br /&gt;
The kernel includes a version but if you want a more recent version install the module ipw2200-modules-2.6-486 or ipw2200-modules-2.6-686 or ipw2200-modules-2.6-686-bigmem or ipw2200-modules-2.6-k7 or ipw2200-modules-2.6-amd64 depending on your architecture.&lt;br /&gt;
&lt;br /&gt;
The firmware is not distributed with Debian due to licensing reasons, download the matching version 3.0  [http://ipw2200.sourceforge.net/firmware.php firmware] and install it:&lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|tar -xvf ipw2200-fw-3.1.tgz -C /lib/firmware}}&lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|mv /lib/firmware/ipw2200-fw-3.1/* /lib/firmware}}&lt;br /&gt;
&lt;br /&gt;
=== Debian Unstable ===&lt;br /&gt;
Install ieee80211-source:&lt;br /&gt;
:{{cmdroot|apt-get install ieee80211-source}}&lt;br /&gt;
:{{cmdroot|module-assistant -t build ieee80211-source}}&lt;br /&gt;
&lt;br /&gt;
The kernel includes a version but if you want a more recent version install the module ipw2200-modules-2.6-486 or ipw2200-modules-2.6-686 or ipw2200-modules-2.6-686-bigmem or ipw2200-modules-2.6-k7 or ipw2200-modules-2.6-amd64 depending on your architecture.&lt;br /&gt;
&lt;br /&gt;
There is a bug in the {{Debian}} package (last checked: Dec 30th 2005) that prevents from linking to &amp;lt;tt&amp;gt;ieee80211&amp;lt;/tt&amp;gt; modules using module-assistant. In case it is not fixed in your version, fall back to the regular source installation procedure described above.&lt;br /&gt;
&lt;br /&gt;
The firmware is not distributed with Debian due to licensing reasons, download the matching [http://ipw2200.sourceforge.net/firmware.php firmware] and install it:&lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|tar xzvf ipw2200-fw-2.4.tgz -C /usr/lib/hotplug/firmware}}&lt;br /&gt;
&lt;br /&gt;
see /etc/hotplug/firmware.agent for details on configured firmware locations&lt;br /&gt;
&lt;br /&gt;
Make sure that your firmware files are not in a subdirectory (dmesg will give you warnings after any modprobe when firmware can't be loaded)&lt;br /&gt;
&lt;br /&gt;
=== Fedora Core ===&lt;br /&gt;
Installation on Fedora Core 5 works out of the box provided you install the ipw2200-firmware package. However, certain parts of the install process may not set up the wireless networking in a friendly manner using GNOME system tray icons and other tools. Bill Moss has written some excellent HowTo articles, including using VPNC to connect to a remote Cisco IPSec network.&lt;br /&gt;
&lt;br /&gt;
* [http://www.ces.clemson.edu/linux/fc2-ipw2200.shtml Fedora Core 5 and the IPW2200 Wireless Driver]&lt;br /&gt;
* [http://www.ces.clemson.edu/linux/nm.shtml Fedora Core 5 NetworkManager, NetworkManager-vpnc and Wireless Driver IPW2200]&lt;br /&gt;
&lt;br /&gt;
== Testing the driver ==&lt;br /&gt;
:{{cmdroot|modprobe ipw2200}}&lt;br /&gt;
:{{cmdroot|iwconfig}}&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|dmesg}} output might look similar to this:&lt;br /&gt;
 ieee80211: 802.11 data/management/control stack, 1.1.6&lt;br /&gt;
 ieee80211: Copyright (C) 2004-2005 Intel Corporation &amp;lt;jketreno@linux.intel.com&amp;gt;&lt;br /&gt;
 ipw2200: Intel(R) PRO/Wireless 2200/2915 Network Driver, 1.0.8&lt;br /&gt;
 ipw2200: Copyright(c) 2003-2005 Intel Corporation&lt;br /&gt;
 ipw2200: Detected Intel PRO/Wireless 2915ABG Network Connection&lt;br /&gt;
&lt;br /&gt;
NB: To make the wifi LED work on the thinkpad, pass the option {{bootparm|led|1}} to the kernel while loading the module. eg. {{cmdroot|1=modprobe ipw2200 led=1}}.  This can also be accomplished by adding that option to the file where your distribution looks for modprobe options so that it becomes automatic.&lt;br /&gt;
&lt;br /&gt;
In debian this can be done by putting a file named after the module in /etc/modutils with the options in it&lt;br /&gt;
&lt;br /&gt;
here we might run a cmd like this&lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|1=echo options ipw2200 led=1 &amp;gt; /etc/modutils/ipw2200 }}&lt;br /&gt;
&lt;br /&gt;
then we must run update-modules to remake /etc/module.conf&lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|update-modules}}&lt;br /&gt;
&lt;br /&gt;
== WPA support ==&lt;br /&gt;
&lt;br /&gt;
Use [[wpa_supplicant]] with the &amp;lt;tt&amp;gt;-Dwext&amp;lt;/tt&amp;gt; argument (not &amp;lt;tt&amp;gt;-Dipw&amp;lt;/tt&amp;gt;), and pass the &amp;lt;tt&amp;gt;hwcrypto=0&amp;lt;/tt&amp;gt; argument to the &amp;lt;tt&amp;gt;ipw2200&amp;lt;/tt&amp;gt; module.&lt;br /&gt;
&lt;br /&gt;
There are some very detailed instructions with working sample configurations on the following link:&lt;br /&gt;
[http://www.bughost.org/ipw/wpa_howto.txt ipw2200 WPA instruction]&lt;br /&gt;
&lt;br /&gt;
== Power Management ==&lt;br /&gt;
The ipw2200 driver has power management capabilities, which comes in handy while operating on battery. &lt;br /&gt;
&lt;br /&gt;
To enable reduced power consumption mode, issue: &lt;br /&gt;
:{{cmdroot|iwpriv wlan0 set_power 7}}&lt;br /&gt;
where &amp;lt;tt&amp;gt;wlan0&amp;lt;/tt&amp;gt; is the name of your interface. This will reduce idle power consumption by 1-2 Watts compared to no power management. To return to the &amp;quot;normal&amp;quot; operation mode, you can issue:&lt;br /&gt;
:{{cmdroot|iwpriv wlan0 set_power 6}}.&lt;br /&gt;
&lt;br /&gt;
In order to check current settings, you can issue:&lt;br /&gt;
:{{cmdroot|iwpriv wlan0 get_power}}.&lt;br /&gt;
&lt;br /&gt;
More information on these option is available in the {{path|README.ipw3945}} file in the &amp;lt;tt&amp;gt;ipw3945&amp;lt;/tt&amp;gt; package ({{path|README.ipw2200}} seems to be rather sketchy about the details of power management). You may want to turn power management on/off on demand in an ACPI script that catches battery/AC events, so that this happens automatically.&lt;br /&gt;
&lt;br /&gt;
Note that there have been [http://www.bughost.org/bugzilla/show_bug.cgi?id=1074 reports] that some versions of ipw2200 react with a firmware error to power management commands. This [http://www.bughost.org/bugzilla/attachment.cgi?id=1024 patch] could alleviate the problem.&lt;br /&gt;
&lt;br /&gt;
*To disable the radio (and further reduce power consumption) when the card is not in use, issue:&lt;br /&gt;
:{{cmdroot|echo 1 &amp;gt; /sys/bus/pci/drivers/ipw2200/*/rf_kill}}&lt;br /&gt;
*To enable the radio, issue:&lt;br /&gt;
:{{cmdroot|echo 0 &amp;gt; /sys/bus/pci/drivers/ipw2200/*/rf_kill}}&lt;br /&gt;
*To make the radio off by default after boot, add &lt;br /&gt;
 options ipw2200 disable=1&lt;br /&gt;
to your {{path|/etc/modprobe.conf}} or equivalent (on kubuntu 6.10 {{path|/etc/modprobe.d/options}}).&lt;br /&gt;
&lt;br /&gt;
See {{path|README.ipw2200}} in the &amp;lt;tt&amp;gt;ipw2200&amp;lt;/tt&amp;gt; package for details and other options.&lt;br /&gt;
&lt;br /&gt;
== Changing the enabled channels ==&lt;br /&gt;
Permitted WiFi channels vary with geography due to regulation. The EEPROM in this chip contains a country code (programmed by the hardware manufacturer), and the driver converts this to a channel list and enforces it.&lt;br /&gt;
&lt;br /&gt;
If you carry your laptop to a different regulatory region, you may need to change the list of permitted channels according to local regulations. There are two ways to accomplish this:&lt;br /&gt;
&lt;br /&gt;
===Patching the ipw2200 driver===&lt;br /&gt;
You can alter the ipw2200 driver sourcecode to hard-code the country code instead of reading it from EEPROM. For example, this will allow all 14 channels (perfect for those special occasions in international water):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--- ipw2200.c.orig&lt;br /&gt;
+++ ipw2200.c&lt;br /&gt;
@@ -11344,7 +11344,7 @@ static int ipw_up(struct ipw_priv *priv)&lt;br /&gt;
 		memcpy(priv-&amp;gt;net_dev-&amp;gt;dev_addr, priv-&amp;gt;mac_addr, ETH_ALEN);&lt;br /&gt;
 &lt;br /&gt;
 		for (j = 0; j &amp;lt; ARRAY_SIZE(ipw_geos); j++) {&lt;br /&gt;
-			if (!memcmp(&amp;amp;priv-&amp;gt;eeprom[EEPROM_COUNTRY_CODE],&lt;br /&gt;
+			if (!memcmp(&amp;quot;ZZR&amp;quot;,&lt;br /&gt;
 				    ipw_geos[j].name, 3))&lt;br /&gt;
 				break;&lt;br /&gt;
 		}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For the list of codes and their meaning, see the &amp;quot;&amp;lt;tt&amp;gt;ipw_geos&amp;lt;/tt&amp;gt;&amp;quot; table in the [http://lxr.free-electrons.com/source/drivers/net/wireless/ipw2x00/ipw2200.c#10382 ipw2200.c sourcecode].&lt;br /&gt;
&lt;br /&gt;
===Patching the EEPROM===&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can change the country code in the EEPROM once and for all, and then use the standard ipw2200 driver.&lt;br /&gt;
&lt;br /&gt;
See this guide:&lt;br /&gt;
* [http://saftware.de/#ipw2200 Patching the EEPROM].&lt;br /&gt;
&lt;br /&gt;
Instead of the &amp;lt;tt&amp;gt;hd&amp;lt;/tt&amp;gt; program mentioned there, you can use the more common &amp;lt;tt&amp;gt;od&amp;lt;/tt&amp;gt; program:&lt;br /&gt;
 echo -n ZZD | od -t x1&lt;br /&gt;
 0000000 5a 5a 44&lt;br /&gt;
 0000003&lt;br /&gt;
&lt;br /&gt;
{{WARN|If this procedure goes wrong, you may ruin your wireless card.}}&lt;br /&gt;
&lt;br /&gt;
== Additional Comments ==&lt;br /&gt;
Your kernel may include an old version of the ipw2200 driver. It is recommended to use the latest version.&lt;br /&gt;
&lt;br /&gt;
Make sure you also install the firmware version needed by the driver version you use. You can find the firmware [http://ipw2200.sourceforge.net/firmware.php here]. To install it, decompress the &amp;lt;tt&amp;gt;.tgz&amp;lt;/tt&amp;gt; file into {{path|/usr/lib/hotplug/firmware}} or {{path|/lib/firmware}} depending on your disto.&lt;br /&gt;
&lt;br /&gt;
The driver doesn't appear to support the MII interface, so any tools like automatic network configuration managers (i.e. whereami) that rely on mii-tool do not work.&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
* [http://ipw2200.sourceforge.net/ Official website]&lt;br /&gt;
&lt;br /&gt;
[[Category:Drivers]]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=BIOS_Upgrade_Downloads&amp;diff=43238</id>
		<title>BIOS Upgrade Downloads</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=BIOS_Upgrade_Downloads&amp;diff=43238"/>
		<updated>2009-05-22T14:47:37Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: /* X Series */ new firmware for X61 Tablet&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| width=&amp;quot;100%&amp;quot; columns=&amp;quot;2&amp;quot;&lt;br /&gt;
|style=&amp;quot;vertical-align:top;padding-right:20px;width:10px;white-space:nowrap;&amp;quot; rowspan=&amp;quot;2&amp;quot; | __TOC__&lt;br /&gt;
|style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
{{NOTE|Firefox or Konqueror users should disable the '''Use IBM Download Director''' option when downloading files.}}&lt;br /&gt;
&lt;br /&gt;
{{NOTE|All Lenovo T, X and R laptops have several bugs in the BIOS that are being actively fixed by Lenovo.  For these laptops, BIOS updates are not optional if you find anything to not be working properly, be it the brightness control, or suspend to RAM, or volume keys.}}&lt;br /&gt;
&lt;br /&gt;
{{WARN|You must make sure that the BIOS ID you are trying to install matches what was installed in your ThinkPad by the factory.  A few models like the A31 and R61 have different BIOSes, and will malfunction if you pick the wrong one and somehow manage to force it to install.}}&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&lt;br /&gt;
You can check current BIOS and Embedded Controller versions using &amp;lt;b&amp;gt;dmidecode&amp;lt;/b&amp;gt; command line tool. For example:&lt;br /&gt;
   bash# dmidecode -s bios-version &amp;amp;&amp;amp; dmidecode -t11&lt;br /&gt;
   1RETDRWW (3.23 )&lt;br /&gt;
   # dmidecode 2.9&lt;br /&gt;
   SMBIOS 2.33 present.&lt;br /&gt;
   Handle 0x0029, DMI type 11, 5 bytes&lt;br /&gt;
   OEM Strings&lt;br /&gt;
   String 1: IBM ThinkPad Embedded Controller -[1RHT71WW-3.04    ]-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The following table lists direct links to BIOS updates for most Thinkpad Models.  Refer to [[BIOS Upgrade]] for instructions on how to perform a BIOS upgrade.&lt;br /&gt;
&lt;br /&gt;
The '''FW model''' column is what actually identifies which sort of firmware (BIOS and Embedded Controller) should be installed in a ThinkPad.  Machines with the same firmware model use the same BIOS and Embedded Controller firmware.  It can also be found as the OEM table ID in the ACPI DSDT.  It is formed by the characters &amp;quot;TP-&amp;quot;, plus the first two characters from the BIOS/EC update part number.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; {{prettytable}}&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; rowspan=&amp;quot;3&amp;quot;| '''Models'''&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; rowspan=&amp;quot;3&amp;quot;| '''FW Model'''&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; colspan=&amp;quot;2&amp;quot;| '''Non-Diskette'''&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; colspan=&amp;quot;3&amp;quot;| '''Diskette (or bootable CD)'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; rowspan=&amp;quot;2&amp;quot;| '''BIOS'''&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; rowspan=&amp;quot;2&amp;quot;| '''EC'''&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; colspan=&amp;quot;2&amp;quot;| '''BIOS'''&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot; rowspan=&amp;quot;2&amp;quot;| '''EC'''&lt;br /&gt;
|-&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot;| '''Windows'''&lt;br /&gt;
| style=&amp;quot;background:#ffdead;&amp;quot;| '''Linux'''&lt;br /&gt;
|-&lt;br /&gt;
! colspan=7 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===200 Series===&lt;br /&gt;
|-&lt;br /&gt;
| {{240}}&lt;br /&gt;
| TP-IR&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-496LGR|1.18}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{240X}}&lt;br /&gt;
| (none)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-4MCKB8|1.09}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| 240Z&lt;br /&gt;
| TP-11&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-4PYQAK|1.72}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=7 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===300 Series===&lt;br /&gt;
|-&lt;br /&gt;
| {{365C}}, {{365CD}}, {{365CS}}, {{365CSD}}, {{365E}}, {{365ED}}&lt;br /&gt;
| (none)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-60567|2.0.14}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{365X}}, {{365XD}}&lt;br /&gt;
| (none)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-60567|1.10}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{380}}, {{380D}}, {{380E}}, {{380ED}}, {{385D}}, {{385ED}}&lt;br /&gt;
| TP-I1&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|DSHY-3XWNVG|1.14}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{380XD}}, {{385XD}}&lt;br /&gt;
| TP-IF&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|DSHY-3XWNVG|1.19}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{380Z}}&lt;br /&gt;
| TP-IG&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|DSHY-3XWNVG|1.08}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{390}}, i1720, i1721&lt;br /&gt;
| (none) &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|DSHY-427MCG|5.62}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{390E}}&lt;br /&gt;
| (none)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|DSHY-46AKPY|1.55}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{390X}}, i1700&lt;br /&gt;
| TP-IS &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-4C5UP9|0.55}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=7 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===500 Series===&lt;br /&gt;
|-&lt;br /&gt;
| {{560}}&lt;br /&gt;
| (none)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-60522|1.20}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{560E}}&lt;br /&gt;
| TP-HR&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-60522|1.13}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{560X}}&lt;br /&gt;
| TP-I8&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|DSHY-3QYK7L|1.15}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{560Z}}&lt;br /&gt;
| TP-IE&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|DSHY-3YTKKV|1.07}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{570}}&lt;br /&gt;
| TP-IM&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-47JS5Z|1.16}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{570E}}&lt;br /&gt;
| TP-IU&lt;br /&gt;
| {{IBMDOCURL|MIGR-4HT3RD|1.07}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-4HA2BF|1.07}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=7 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===600 Series===&lt;br /&gt;
|-&lt;br /&gt;
| {{600}}&lt;br /&gt;
| TP-IB&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|DSHY-3VRJPK|1.22}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{600E}} (2645 selected models, 2646)&lt;br /&gt;
| TP-IN&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|DSHY-46HLKQ|1.16}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{600E}} (2645: 55x, 56x, 57x, 58x, A5x, A6x, Bxx [except for BAU], JJ1, JJ2, RRA)&lt;br /&gt;
| TP-IH&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|DSHY-43DNQ5|1.15}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{600X}}&lt;br /&gt;
| TP-IT&lt;br /&gt;
| {{IBMDOCURL|MIGR-4HVUYL|1.11}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-4FYS2U|1.11}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=7 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===700 Series===&lt;br /&gt;
|-&lt;br /&gt;
| {{750}}, {{750CS}}, {{755C}}, {{755CS}}, {{750P}}&lt;br /&gt;
| (none)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-60440|1.43}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{755CE}}, {{755CSE}}, {{755CD}}, {{755CX}}, {{755CV}}, {{755CDV}}&lt;br /&gt;
| (none)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-60440|1.44}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{760C}}, {{760CD}}, {{760L}}, {{760LD}}&lt;br /&gt;
| TP-HV&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-59734|1.30}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{760E}} (XGA), {{760ED}} (XGA), {{760XD}}, {{765D}}, {{765L}}&lt;br /&gt;
| TP-HX&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-59734|2.13}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{760E}} (SVGA), {{760ED}} (SVGA), {{760EL}}, {{760ELD}}, {{760XL}}&lt;br /&gt;
| TP-HZ, TP-HY&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-59734|2.13}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{770}}, {{770E}}, {{770ED}}&lt;br /&gt;
| TP-ID&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|DSHY-3P2MCB|1.34}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{770X}}&lt;br /&gt;
| TP-II&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|DSHY-42QLVU|1.10}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{770Z}}&lt;br /&gt;
| TP-IO&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-47F3VA|1.05}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=7 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===A Series===&lt;br /&gt;
|-&lt;br /&gt;
| {{A20m}}&lt;br /&gt;
| TP-IW&lt;br /&gt;
| {{IBMDOCURL|MIGR-4MNN8Z|1.13}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-4JWNTQ|1.13}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{A20p}}&lt;br /&gt;
| TP-IV&lt;br /&gt;
| {{IBMDOCURL|MIGR-4MNN8Y|1.11}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-4JWNTR|1.11}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{A21e}} (2655)&lt;br /&gt;
| TP-10&lt;br /&gt;
| {{IBMDOCURL|MIGR-4UNQKX|1.07}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-4UNRRF|1.07}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{A21e}} (2628)&lt;br /&gt;
| TP-KU&lt;br /&gt;
| {{IBMDOCURL|MIGR-4Q2KLU|1.13}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-4Q2KLV|1.13}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{A21m}}&lt;br /&gt;
| TP-KX&lt;br /&gt;
| {{IBMDOCURL|MIGR-4PJMXK|1.09}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-4Q2KM4|1.09}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{A21p}}&lt;br /&gt;
| TP-KY&lt;br /&gt;
| {{IBMDOCURL|MIGR-4Q2KM3|1.11}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-4PJN8X|1.11}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{A22e}} Celeron&lt;br /&gt;
| TP-10&lt;br /&gt;
| {{IBMDOCURL|MIGR-4UNQKX|1.07}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-4UNRRF|1.07}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{A22e}} Pentium&lt;br /&gt;
| TP-1B&lt;br /&gt;
| {{IBMDOCURL|MIGR-4XQKLK|1.05}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-4XQL7B|1.05}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{A22m}}&lt;br /&gt;
| TP-KX&lt;br /&gt;
| {{IBMDOCURL|MIGR-4Q2KM4|1.09}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-4PJMXK|1.09}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{A22m}} (2628-Sxx)&lt;br /&gt;
| TP-13&lt;br /&gt;
| {{IBMDOCURL|MIGR-4VXS2T|1.05}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-4VXRG4|1.05}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{A22p}}&lt;br /&gt;
| TP-KY&lt;br /&gt;
| {{IBMDOCURL|MIGR-4Q2KM3|1.11}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-4PJN8X|1.11}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{A30}}, {{A30p}}&lt;br /&gt;
| TP-1E&lt;br /&gt;
| {{IBMDOCURL|MIGR-39863|1.18}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-40846|1.08}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-39861|1.18}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-40847|1.08}}&lt;br /&gt;
|-&lt;br /&gt;
| {{A31}}, {{A31p}} (Bios 1G*)&lt;br /&gt;
| TP-1G&lt;br /&gt;
| {{IBMDOCURL|MIGR-42654|1.12}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-45771|1.05}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-42660|1.12}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-45900|1.05}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-45770|1.05}}&lt;br /&gt;
|-&lt;br /&gt;
| {{A31}}, {{A31p}} (Bios 1N*)&lt;br /&gt;
| TP-1N&lt;br /&gt;
| {{IBMDOCURL|MIGR-44450|1.10}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-45662|1.05}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-44451|1.10}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-45898|1.02}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-45663|1.05}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=7 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===G Series===&lt;br /&gt;
|-&lt;br /&gt;
| {{G40}}&lt;br /&gt;
| TP-1T&lt;br /&gt;
| {{IBMDOCURL|MIGR-50672|1.21}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-50673|1.21}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{G41}}&lt;br /&gt;
| TP-1X&lt;br /&gt;
| {{IBMDOCURL|MIGR-58127|1.14}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-58129|1.14}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=7 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
===R Series===&lt;br /&gt;
|-&lt;br /&gt;
| {{R30}}&lt;br /&gt;
| TP-1C&lt;br /&gt;
| {{IBMDOCURL|MIGR-40216|1.38}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-40217|1.38}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{R31}}&lt;br /&gt;
| TP-1F&lt;br /&gt;
| {{IBMDOCURL|MIGR-41378|3.11}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-41535|3.11}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{R32}}&lt;br /&gt;
| TP-1M&lt;br /&gt;
| {{IBMDOCURL|MIGR-43571|2.16}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-43572|2.16}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{R40}} (2681, 2682, 2683, 2896, 2898, 2899)&lt;br /&gt;
| TP-1O&lt;br /&gt;
| {{IBMDOCURL|MIGR-46055|1.27}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-46143|1.14}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-46061|1.27}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-46144|1.14}}&lt;br /&gt;
|-&lt;br /&gt;
| {{R40}} (2722, 2723, 2724, 2897)&lt;br /&gt;
| TP-1P&lt;br /&gt;
| {{IBMDOCURL|MIGR-50320|1.33}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-46143|1.14}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-50321|1.33}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-46144|1.14}}&lt;br /&gt;
|-&lt;br /&gt;
| {{R40e}}&lt;br /&gt;
| TP-1S &lt;br /&gt;
| {{IBMDOCURL|MIGR-50302|1.38}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-50344|1.04}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-50301|1.38}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-50343|1.04}}&lt;br /&gt;
|-&lt;br /&gt;
| {{R50}}, {{R50p}}&lt;br /&gt;
| TP-1R&lt;br /&gt;
| {{IBMDOCURL|MIGR-50273|3.23}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-50279|3.04}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-50275|3.23}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-50277|3.04}}&lt;br /&gt;
|-&lt;br /&gt;
| {{R50e}}&lt;br /&gt;
| TP-1W&lt;br /&gt;
| {{IBMDOCURL|MIGR-55000|2.10}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-54996|1.04}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-55001|2.10}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-54997|1.04}}&lt;br /&gt;
|-&lt;br /&gt;
| {{R51}} (1829, 1830, 1831, 1836)&lt;br /&gt;
| TP-1R&lt;br /&gt;
| {{IBMDOCURL|MIGR-50273|3.23}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-50279|3.04}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-50275|3.23}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-50277|3.04}}&lt;br /&gt;
|-&lt;br /&gt;
| {{R51}} (2883, 2887, 2888, 2889, 2894, 2895)&lt;br /&gt;
| TP-1V &lt;br /&gt;
| {{IBMDOCURL|MIGR-55003|1.29}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-54996|1.04}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-55004|1.29}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-54997|1.04}}&lt;br /&gt;
|-&lt;br /&gt;
| {{R51e}}&lt;br /&gt;
| TP-78&lt;br /&gt;
| {{IBMDOCURL|MIGR-61681|1.59}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-61677|1.01}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-61680|1.59}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-61675|1.01}}&lt;br /&gt;
|-&lt;br /&gt;
| {{R52}} (1846, 1847, 1848, 1849, 1850, 1870)&lt;br /&gt;
| TP-76&lt;br /&gt;
| {{IBMDOCURL|MIGR-59221|1.29}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-59184|1.06}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-59220|1.29}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-59183|1.06}}&lt;br /&gt;
|-&lt;br /&gt;
| {{R52}} (1858, 1859, 1860, 1861, 1862, 1863)&lt;br /&gt;
| TP-70&lt;br /&gt;
| {{IBMDOCURL|MIGR-59379|1.29}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-59439|1.05}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-59380|1.29}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-59440|1.05}}&lt;br /&gt;
|-&lt;br /&gt;
| {{R60}}, R60i (94xx)&lt;br /&gt;
| TP-7C&lt;br /&gt;
| {{IBMDOCURL|MIGR-64578|2.22}}&lt;br /&gt;
| 1.10&lt;br /&gt;
| {{IBMDOCURL|MIGR-64580|2.22}} (CD)&lt;br /&gt;
|&lt;br /&gt;
| 1.10&lt;br /&gt;
|-&lt;br /&gt;
| {{R60e}}, R60i (06xx)&lt;br /&gt;
| TP-7E&lt;br /&gt;
| {{IBMDOCURL|MIGR-64393|2.20}}&lt;br /&gt;
| 1.07&lt;br /&gt;
| {{IBMDOCURL|MIGR-64394|2.20}} (CD)&lt;br /&gt;
|&lt;br /&gt;
| 1.07&lt;br /&gt;
|-&lt;br /&gt;
| {{R61}} (8942, 8943, 8944, 8945, 8947, 8948, 8949)&lt;br /&gt;
| TP-7Q&lt;br /&gt;
| {{IBMDOCURL|MIGR-68186|1.21}}&lt;br /&gt;
| 1.00&lt;br /&gt;
| {{IBMDOCURL|MIGR-68187|1.21}} (CD)&lt;br /&gt;
|&lt;br /&gt;
| 1.00&lt;br /&gt;
|-&lt;br /&gt;
| {{R61}}, {{R61i}} (BIOS 7K*)&lt;br /&gt;
| TP-7K&lt;br /&gt;
| {{IBMDOCURL|MIGR-68168|2.26}}&lt;br /&gt;
| 1.08&lt;br /&gt;
| {{IBMDOCURL|MIGR-68178|2.26}} (CD)&lt;br /&gt;
|&lt;br /&gt;
| 1.08&lt;br /&gt;
|-&lt;br /&gt;
| {{R61}}, {{R61i}} (BIOS 7L*)&lt;br /&gt;
| TP-7L&lt;br /&gt;
| {{IBMDOCURL|MIGR-67988|2.25}}&lt;br /&gt;
| TP-7K 1.08&lt;br /&gt;
| {{IBMDOCURL|MIGR-67989|2.25}} (CD)&lt;br /&gt;
|&lt;br /&gt;
| TP-7K 1.08&lt;br /&gt;
|-&lt;br /&gt;
| R61e, {{R61i}} (BIOS 7O*)&lt;br /&gt;
| TP-7O&lt;br /&gt;
| {{IBMDOCURL|MIGR-68183|2.21}}&lt;br /&gt;
| TP-7K 1.08&lt;br /&gt;
| {{IBMDOCURL|MIGR-68185|2.21}} (CD)&lt;br /&gt;
|&lt;br /&gt;
| TP-7K 1.08&lt;br /&gt;
|-&lt;br /&gt;
| R61e (7650), {{R61i}} (7650)&lt;br /&gt;
| TP-7P&lt;br /&gt;
| {{IBMDOCURL|MIGR-68242|2.20}}&lt;br /&gt;
| TP-7K 1.08&lt;br /&gt;
| {{IBMDOCURL|MIGR-68243|2.20}} (CD)&lt;br /&gt;
| &lt;br /&gt;
| TP-7K 1.08&lt;br /&gt;
|-&lt;br /&gt;
| {{R400}} (7438, 7439, 7440, 7440, 7443, 7445, 7446, 7447)&lt;br /&gt;
|  TP-7U&lt;br /&gt;
|&lt;br /&gt;
| &lt;br /&gt;
| {{IBMDOCURL|MIGR-70351|1.19}}? (CD)&lt;br /&gt;
| {{IBMDOCURL|MIGR-70351|1.19}}? (CD)&lt;br /&gt;
| 7UET49WW (1.19)&lt;br /&gt;
|-&lt;br /&gt;
! colspan=7 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===T Series===&lt;br /&gt;
|-&lt;br /&gt;
| {{T20}}&lt;br /&gt;
| TP-IY&lt;br /&gt;
| {{IBMDOCURL|MIGR-4MNN8X|1.22}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-4JWNJC|1.22}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{T21}}&lt;br /&gt;
| TP-KZ&lt;br /&gt;
| {{IBMDOCURL|MIGR-4Q2KM5|1.16}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-4PJN8Y|1.16}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{T22}}&lt;br /&gt;
| TP-16&lt;br /&gt;
| {{IBMDOCURL|MIGR-4VWPPU|1.12}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-4VWP54|1.12}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{T23}}&lt;br /&gt;
| TP-1A&lt;br /&gt;
| {{IBMDOCURL|MIGR-39366|1.20}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-40022|1.06a}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-39362|1.20}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-40021|1.06a}}&lt;br /&gt;
|-&lt;br /&gt;
| {{T30}}&lt;br /&gt;
| TP-1I&lt;br /&gt;
| {{IBMDOCURL|MIGR-42694|2.10}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-42711|1.07}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-42720|2.10}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-45745|2.02}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-42725|1.07}}&lt;br /&gt;
|-&lt;br /&gt;
| {{T40}}, {{T40p}}, {{T41}}, {{T41p}}, {{T42}}, {{T42p}}&lt;br /&gt;
| TP-1R&lt;br /&gt;
| {{IBMDOCURL|MIGR-50275|3.23}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-50279|3.04}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-50273|3.23}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-50277|3.04}}&lt;br /&gt;
|-&lt;br /&gt;
| {{T43}} (1871, 1872, 1873, 1874, 1875, 1876)&lt;br /&gt;
| TP-70 &lt;br /&gt;
| {{IBMDOCURL|MIGR-59379|1.29}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-59439|1.05}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-59380|1.29}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-59440|1.05}}&lt;br /&gt;
|-&lt;br /&gt;
| {{T43}} (2668, 2669, 2678, 2679, 2686, 2687), {{T43p}}&lt;br /&gt;
| TP-1Y&lt;br /&gt;
| {{IBMDOCURL|MIGR-59096|1.29}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-59120|1.06}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-59097|1.29}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-59121|1.06}}&lt;br /&gt;
|-&lt;br /&gt;
| {{T60}}, {{T60p}}&lt;br /&gt;
| TP-79&lt;br /&gt;
| {{IBMDOCURL|MIGR-63024|2.23}}&lt;br /&gt;
| 1.07&lt;br /&gt;
| {{IBMDOCURL|MIGR-63027|2.23}} (CD)&lt;br /&gt;
|&lt;br /&gt;
| 1.07&lt;br /&gt;
|-&lt;br /&gt;
| {{T60}}, {{T60p}} wide-screen&lt;br /&gt;
| TP-7I&lt;br /&gt;
| {{IBMDOCURL|MIGR-67018|1.15}}&lt;br /&gt;
| TP-79 1.07&lt;br /&gt;
| {{IBMDOCURL|MIGR-67020|1.15}} (CD)&lt;br /&gt;
|&lt;br /&gt;
| TP-79 1.07&lt;br /&gt;
|-&lt;br /&gt;
| {{T61}}&lt;br /&gt;
| TP-7L/7K&lt;br /&gt;
| {{IBMDOCURL|MIGR-67989|2.25}}&lt;br /&gt;
| 1.08&lt;br /&gt;
| {{IBMDOCURL|MIGR-67989|2.25}} (CD)&lt;br /&gt;
|&lt;br /&gt;
| 1.08&lt;br /&gt;
|-&lt;br /&gt;
! colspan=7 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===X Series===&lt;br /&gt;
|-&lt;br /&gt;
| {{X20}}, {{X21}}&lt;br /&gt;
| TP-IZ&lt;br /&gt;
| {{IBMDOCURL|MIGR-4P52BM|2.25}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-4VQNTP|1.36}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-4P52BL|2.25}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-4PBMCT|1.36}}&lt;br /&gt;
|-&lt;br /&gt;
| {{X22}}, {{X23}}, {{X24}}&lt;br /&gt;
| TP-1D&lt;br /&gt;
| {{IBMDOCURL|MIGR-39672|1.32}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-39806|1.30}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-39665|1.32}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-39808|1.30}}&lt;br /&gt;
|-&lt;br /&gt;
| {{X30}}&lt;br /&gt;
| TP-1K&lt;br /&gt;
| {{IBMDOCURL|MIGR-44135|1.09}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-44152|1.06}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-44131|1.09}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-44149|1.06}}&lt;br /&gt;
|-&lt;br /&gt;
| {{X31}}, {{X32}}&lt;br /&gt;
| TP-1Q&lt;br /&gt;
| {{IBMDOCURL|MIGR-50298|3.02}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-53480|1.08}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-50308|3.02}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-53479|1.08}}&lt;br /&gt;
|-&lt;br /&gt;
| {{X40}}&lt;br /&gt;
| TP-1U&lt;br /&gt;
| {{IBMDOCURL|MIGR-53881|2.08}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-53882|1.62}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-53883|2.08}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-53885|1.62}}&lt;br /&gt;
|-&lt;br /&gt;
| {{X41}}&lt;br /&gt;
| TP-74&lt;br /&gt;
| {{IBMDOCURL|MIGR-59206|2.09}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-59208|1.02}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-59205|2.09}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-59207|1.02}}&lt;br /&gt;
|-&lt;br /&gt;
| {{X41_Tablet}}&lt;br /&gt;
| TP-75&lt;br /&gt;
| {{IBMDOCURL|MIGR-60193|2.06}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-60191|1.02}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-60194|2.06}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-60189|1.02}}&lt;br /&gt;
|-&lt;br /&gt;
| {{X60}}, {{X60s}}&lt;br /&gt;
| TP-7B&lt;br /&gt;
| {{IBMDOCURL|MIGR-63144|2.18}}&lt;br /&gt;
| 1.13&lt;br /&gt;
| {{IBMDOCURL|MIGR-63145|2.18}} (CD)&lt;br /&gt;
|&lt;br /&gt;
| 1.13&lt;br /&gt;
|-&lt;br /&gt;
| {{X60_Tablet}}&lt;br /&gt;
| TP-7J&lt;br /&gt;
| {{IBMDOCURL|MIGR-67148|1.13}}&lt;br /&gt;
| 1.04&lt;br /&gt;
| {{IBMDOCURL|MIGR-67149|1.13}} (CD)&lt;br /&gt;
|&lt;br /&gt;
| 1.04&lt;br /&gt;
|-&lt;br /&gt;
| {{X61}}, {{X61s}}&lt;br /&gt;
| TP-7N&lt;br /&gt;
| {{IBMDOCURL|MIGR-67982|2.19}}&lt;br /&gt;
| 1.03&lt;br /&gt;
| {{IBMDOCURL|MIGR-67983|2.19}} (CD)&lt;br /&gt;
|&lt;br /&gt;
| 1.03&lt;br /&gt;
|-&lt;br /&gt;
| {{X61_Tablet}}&lt;br /&gt;
| TP-7S&lt;br /&gt;
| {{IBMDOCURL|MIGR-68005|1.23}}&lt;br /&gt;
| 1.02&lt;br /&gt;
| {{IBMDOCURL|MIGR-68006|1.23}} (CD)&lt;br /&gt;
|&lt;br /&gt;
| 1.02&lt;br /&gt;
|-&lt;br /&gt;
| {{X200}}&lt;br /&gt;
| TP-6D/7X&lt;br /&gt;
| {{IBMDOCURL|MIGR-70347|1.07}}&lt;br /&gt;
| 1.03&lt;br /&gt;
| {{IBMDOCURL|MIGR-70348|1.07}} (CD)&lt;br /&gt;
|&lt;br /&gt;
| 1.03&lt;br /&gt;
|-&lt;br /&gt;
| {{X300}}&lt;br /&gt;
| TP-7T&lt;br /&gt;
| {{IBMDOCURL|MIGR-69538|1.08}}&lt;br /&gt;
| 1.00c&lt;br /&gt;
| {{IBMDOCURL|MIGR-69539|1.08}} (CD)&lt;br /&gt;
|&lt;br /&gt;
| 1.00c &lt;br /&gt;
|-&lt;br /&gt;
! colspan=7 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===Z Series===&lt;br /&gt;
|-&lt;br /&gt;
| {{Z60m}}, {{Z60t}}&lt;br /&gt;
| TP-77&lt;br /&gt;
| {{IBMDOCURL|MIGR-61687|1.22}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-61686|1.18}}&lt;br /&gt;
| {{IBMDOCURL|MIGR-61688|1.22}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-61685|1.18}}&lt;br /&gt;
|-&lt;br /&gt;
| {{Z61e}}, {{Z61m}}, {{Z61p}}, {{Z61t}}&lt;br /&gt;
| TP-7F&lt;br /&gt;
| {{IBMDOCURL|MIGR-64409|2.26}}&lt;br /&gt;
| 1.08&lt;br /&gt;
| {{IBMDOCURL|MIGR-64305|2.26}} (CD)&lt;br /&gt;
|&lt;br /&gt;
| 1.08&lt;br /&gt;
|-&lt;br /&gt;
! colspan=7 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===Other===&lt;br /&gt;
|-&lt;br /&gt;
| {{TransNote}}&lt;br /&gt;
| TP-KV&lt;br /&gt;
| {{IBMDOCURL|MIGR-4UDSMK|1.02}}&lt;br /&gt;
|&lt;br /&gt;
| {{IBMDOCURL|MIGR-4UDRRF|1.02}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=How_to_hotswap_Ultrabay_devices&amp;diff=42330</id>
		<title>How to hotswap Ultrabay devices</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=How_to_hotswap_Ultrabay_devices&amp;diff=42330"/>
		<updated>2009-03-27T14:19:59Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: /* Using the generic bay driver and udev */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following discusses hotswap (AKA &amp;quot;hotplug&amp;quot;) of devices in the [[Ultrabay]].&lt;br /&gt;
&lt;br /&gt;
==Which driver?==&lt;br /&gt;
Since the following may be confusing for SATA ThinkPad owners, which are likely all the same for now, you have two busses and drivers: one SATA bus which works with the AHCI driver and one IDE bus for the Ultrabay for which you should pick &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; ('''not''' piix/CONFIG_BLK_DEV_PIIX). See below for hotswapping.&lt;br /&gt;
&lt;br /&gt;
Debian users: at least up the the kernel released with Lenny, Debian applies a patch in the Debian kernel sources which prevents the use of &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; with PATA devices (like the IDE bus for the Ultrabay). You will have to either use an upstream kernel or (re)patch the Debian kernel sources. &lt;br /&gt;
You may want to have a look at the following Debian bug reports as well: [http://bugs.debian.org/444182 #444182], [http://bugs.debian.org/463833 #463833].&lt;br /&gt;
&lt;br /&gt;
==Choosing the right driver: new style &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; vs old style &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt; together with &amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt;==&lt;br /&gt;
For ICH5,6,7,8, systems, whether you have an older IDE only thinkpad, or a newer thinkpad like the T/Z61p, there is one SATA bus for the system hard drive and an IDE bus for the Ultrabay (even if your Ultrabay happens to have a SATA drive, as it'll be seen as an IDE device), you'll have two drivers to chose from for your ultrabay: the old IDE/&amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt;+&amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt; driver, and the newer PATA (=IDE) support of the newer &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver.&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt;+&amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt; are part of the old original IDE driver and your Ultrabay device will show up as &amp;lt;tt&amp;gt;/dev/hda&amp;lt;/tt&amp;gt;.&amp;lt;BR&amp;gt;&amp;lt;tt&amp;gt;ata-piix&amp;lt;/tt&amp;gt; is the new SATA/PATA (=IDE) driver that will cause your Ultrabay hard drive to show up as &amp;lt;tt&amp;gt;/dev/sda&amp;lt;/tt&amp;gt; and your CD-ROM as &amp;lt;tt&amp;gt;/dev/sr0&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The two things to know are: (1) you want to use &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; and (2) if you build &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt; in (CONFIG_BLK_DEV_PIIX enabled), or load it as a module, it'll take over the IDE bus and prevent ATA_PIIX from seeing your Ultrabay. You don't want that.&lt;br /&gt;
&lt;br /&gt;
The longer details are:&amp;lt;BR&amp;gt;&lt;br /&gt;
You don't want the &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt;+&amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt; combo because even as modules, you will not be able to unload &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt; to reset the bus if there are issues swapping devices (with &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt;, even if you forget to unregister a drive before removing it, you can unload the module and reload it to reset the bus after the fact if you have a newer ThinkPad with a separate AHCI/SATA bus for the boot drive).&lt;br /&gt;
&lt;br /&gt;
As for hotswap, with &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt;+&amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt;, you can read the section below, but after more than one day of trying on 2.6.22.15 (as &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt;+&amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt; was taking over my IDE bus, and stopping me from using ata_piix before I removed it), I was not able to get hotswapping to work with piix+ide-disk (lt_hotswap would not even build on 2.6.22.15).&lt;br /&gt;
&lt;br /&gt;
hotswap just works with &amp;lt;tt&amp;gt;ata_pixx&amp;lt;/tt&amp;gt; on 2.6.22, and reportedly with anything newer than 2.6.18, so you want to get rid of &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt;+&amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt;.&lt;br /&gt;
There are several ways to do that:&lt;br /&gt;
* if &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt; is built in your kernel (CONFIG_BLK_DEV_PIIX):&lt;br /&gt;
** rebuild your kernel with CONFIG_BLK_DEV_PIIX turned off.&lt;br /&gt;
** if you don't want to rebuild your kernel, try disabling the IDE bus grabbing by that driver with &amp;lt;tt&amp;gt;ide0=noprobe hda=noprobe hdb=noprobe&amp;lt;/tt&amp;gt; in your grub/lilo config (adjust the drive letters as appropriate, but note that this did not work for me on 2.6.22.15: the drive didn't show up on the &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt; bus, but it didn't show up on the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; bus either).&lt;br /&gt;
* if &amp;lt;tt&amp;gt;piix&amp;lt;/tt&amp;gt; is built in as a module&lt;br /&gt;
** you can move out the module in {{path|/lib/modules/ver/kernel/drivers/ide/pci/piix.ko}} and reboot.&lt;br /&gt;
** or build a new kernel, again with CONFIG_BLK_DEV_PIIX turned off.&lt;br /&gt;
** or add &amp;lt;tt&amp;gt;options ide_core options=&amp;quot;ide0=noprobe hda=noprobe hdb=noprobe&amp;quot;&amp;lt;/tt&amp;gt; to your modprobe.conf is supposed to work too (but didn't work on 2.6.22.15, see comment above)&lt;br /&gt;
&lt;br /&gt;
Then, continue this document to see how to do hotswap with &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; (if you are lucky enough to have a newer SATA ThinkPad where the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver only runs the Ultrabay, and you have a separate &amp;lt;tt&amp;gt;bus&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;ahci&amp;lt;/tt&amp;gt; driver for your main drive, it is recommended to have &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; as a module (&amp;lt;tt&amp;gt;CONFIG_ATA_PIIX=m&amp;lt;/tt&amp;gt;) so that you can unload/reload it if your bus gets in a bad state after a failed hotswap)&lt;br /&gt;
&lt;br /&gt;
==When using the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver==&lt;br /&gt;
The following applies when using the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver, which is necessary for many recent ThinkPad models that use an [[Intel ICH6-M]] controller. See also [[Problems with SATA and Linux]]. &lt;br /&gt;
&lt;br /&gt;
Mainline kernels before 2.6.18 cannot reliably recognize newly (re-)inserted Ultrabay drives without a reboot. There are experimental hotplug patches against pre-2.6.18 mainline kernels [http://home-tj.org/wiki/index.php/Libata-tj-stable here].&lt;br /&gt;
&lt;br /&gt;
* Available hotplug patches&lt;br /&gt;
**[http://home-tj.org/files/libata-tj-stable/libata-tj-2.6.16.16-20060512.tar.bz2 Patch tarball against 2.6.16.16] ([http://lwn.net/Articles/183407/ Announce])&lt;br /&gt;
**[http://home-tj.org/files/libata-tj-stable/libata-tj-2.6.17-20060625-1.tar.bz2 Patch tarball against 2.6.17/2.6.17.1] ([http://article.gmane.org/gmane.linux.ide/11598 Announce])&lt;br /&gt;
**[http://home-tj.org/files/libata-tj-stable/libata-tj-2.6.17.4-20060710.tar.bz2 Patch tarball against 2.6.17.4]&lt;br /&gt;
**[http://whoopie.gmxhome.de/linux/patches/2.6.17.14-tj/00-libata-tj-2.6.17.4-20060710.patch Patch against 2.6.17.14]&lt;br /&gt;
&lt;br /&gt;
* Confirmed to work on the following laptops, with bus the following ID &lt;br /&gt;
**ThinkPad {{T23}}&lt;br /&gt;
**ThinkPad {{T30}}&lt;br /&gt;
**ThinkPad {{T43}}, {{T43p}}&lt;br /&gt;
**ThinkPad {{R52}}&lt;br /&gt;
**ThinkPad {{T60}} ID=4&lt;br /&gt;
**ThinkPad {{T61}} ID=0&lt;br /&gt;
**ThinkPad {{Z61p}} ID=4 (0-3:ahci, 5-6: ata_piix)&lt;br /&gt;
ID will typically be 1 if you only have an IDE bus (0 is boot drive, 1 is Ultrabay), and it'll be 4 if you have a SATA bus your system boots from (ID 0-3) and an IDE bus for your Ultrabay (ID 4-5).&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note that even on a given laptop model the ID can vary depending on whether your kernel has drivers that configure your boot drive is using the old style IDE driver (which doesn't add IDs before your Ultrabay), or whether your boot drive is using the new style driver (which  adds IDs before your Ultrabay)&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hotplug just works with kernels newer than 2.6.18 ( or older kernels that were patched to support &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; hotplug (don't try it otherwise!))&amp;lt;BR&amp;gt;&lt;br /&gt;
First, it is recommended you find the right SCSI ID for your drive to hotswap and unregister it before removing it (this works with all recent mainline kernels):&lt;br /&gt;
 {{cmdroot|echo 1 &amp;gt; /sys/class/scsi_device/$ID:0:0:0/device/delete}} &lt;br /&gt;
 {{cmdroot|echo eject &amp;gt;  /proc/acpi/ibm/bay}}&lt;br /&gt;
The drive can now be ejected (without this, your IDE bus may complain if you just yank a drive, but you can usually recover by unloading/reloading the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; module on a SATA laptop if your main drive is not on the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; bus)&lt;br /&gt;
&lt;br /&gt;
You can then issue the following after inserting an Ultrabay drive to rescan the port:&lt;br /&gt;
 {{cmdroot|echo 0 0 0 &amp;gt;  /sys/class/scsi_host/host$ID/scan}}&lt;br /&gt;
The inserted drive should now be recognized by the kernel, and appropriate {{path|/dev/*}} entries created automatically (e.g., by &amp;lt;tt&amp;gt;udev&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Ted T'so has also written this hotswap patch, which may or may not be needed for you, see [http://www.mail-archive.com/linux-acpi@vger.kernel.org/msg04716.html hotswap patch] and report back&lt;br /&gt;
&lt;br /&gt;
===Scripts for hotswapping===&lt;br /&gt;
&lt;br /&gt;
The following scripts and [[acpid]] daemon configuration files do the following:&lt;br /&gt;
* Automatically unmounts the relevant filesystems and power off the Ultrabay when the Ultrabay eject lever is released. Screams if some filesystem can't be unmounted.&lt;br /&gt;
* Rescans the Ultrabay port when then Ultrabay eject lever is pushed back in.&lt;br /&gt;
&lt;br /&gt;
They assumes you're using the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver with an appropriate kernel (see above).&lt;br /&gt;
&lt;br /&gt;
Create {{path|/usr/local/sbin/ultrabay_insert}} with permissions 755:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
echo 12 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
sync&lt;br /&gt;
echo 0 0 0 &amp;gt; /sys/class/scsi_host/host1/scan&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create {{path|/usr/local/sbin/ultrabay_eject}} with permissions 755:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
ULTRABAY_SYSDIR='/sys/class/scsi_device/1:0:0:0/device'&lt;br /&gt;
shopt -s nullglob&lt;br /&gt;
&lt;br /&gt;
# Umount the filesystem(s) backed by the given major:minor device(s)&lt;br /&gt;
unmount_rdev() { perl - &amp;quot;$@&amp;quot; &amp;lt;&amp;lt;'EOPERL'  # let's do it in Perl&lt;br /&gt;
	for $major_minor (@ARGV) {&lt;br /&gt;
		$major_minor =~ m/^(\d+):(\d+)$/ or die;&lt;br /&gt;
		push(@tgt_rdevs, ($1&amp;lt;&amp;lt;8)|$2);&lt;br /&gt;
	}&lt;br /&gt;
        # Sort by reverse length of mount point, to unmount sub-directories first&lt;br /&gt;
        open MOUNTS,&amp;quot;&amp;lt;/proc/mounts&amp;quot; or die &amp;quot;$!&amp;quot;;&lt;br /&gt;
        @mounts=sort { length($b-&amp;gt;[1]) &amp;lt;=&amp;gt; length($a-&amp;gt;[1]) } map { [ split ] } &amp;lt;MOUNTS&amp;gt;;&lt;br /&gt;
        close MOUNTS;&lt;br /&gt;
        foreach $m (@mounts) {&lt;br /&gt;
                ($dev,$dir)=@$m;&lt;br /&gt;
		next unless -b $dev;  $rdev=(stat($dev))[6];&lt;br /&gt;
		next unless grep($_==$rdev, @tgt_rdevs);&lt;br /&gt;
		system(&amp;quot;umount&amp;quot;,&amp;quot;-v&amp;quot;,&amp;quot;$dir&amp;quot;)==0  or  $bad=1;&lt;br /&gt;
	}&lt;br /&gt;
	exit 1 if $bad;&lt;br /&gt;
EOPERL&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Get the UltraBay's /dev/foo block device node&lt;br /&gt;
ultrabay_dev_node() {&lt;br /&gt;
	UDEV_PATH=&amp;quot;`readlink -e &amp;quot;$ULTRABAY_SYSDIR/block:&amp;quot;*`&amp;quot; || return 1&lt;br /&gt;
	UDEV_NAME=&amp;quot;`udevinfo -q name -p $UDEV_PATH`&amp;quot; || return 1&lt;br /&gt;
	echo /dev/$UDEV_NAME&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if [ -d $ULTRABAY_SYSDIR ]; then&lt;br /&gt;
	sync&lt;br /&gt;
	# Unmount filesystems backed by this device&lt;br /&gt;
	unmount_rdev `cat $ULTRABAY_SYSDIR/block\:*/dev     \&lt;br /&gt;
	                  $ULTRABAY_SYSDIR/block\:*/*/dev`  \&lt;br /&gt;
	|| {&lt;br /&gt;
		echo 10 &amp;gt; /proc/acpi/ibm/beep;  # error tone&lt;br /&gt;
		exit 1;&lt;br /&gt;
	}&lt;br /&gt;
        sync&lt;br /&gt;
        # Nicely power off the device&lt;br /&gt;
	DEVNODE=`ultrabay_dev_node` &amp;amp;&amp;amp; hdparm -Y $DEVNODE&lt;br /&gt;
        # Let HAL+KDE notice the unmount and let the disk spin down&lt;br /&gt;
	sleep 0.5&lt;br /&gt;
	# Unregister this SCSI device:&lt;br /&gt;
	sync&lt;br /&gt;
	echo 1 &amp;gt; $ULTRABAY_SYSDIR/delete&lt;br /&gt;
fi&lt;br /&gt;
sync&lt;br /&gt;
# We really need a 3 sec pause here otherwise the system will freeze..&lt;br /&gt;
sleep 3&lt;br /&gt;
# Turn off power to the UltraBay:&lt;br /&gt;
if [ -d /sys/devices/platform/bay.0 ]; then&lt;br /&gt;
	echo 1 &amp;gt; /sys/devices/platform/bay.0/eject&lt;br /&gt;
elif [ -e /proc/acpi/ibm/bay ]; then&lt;br /&gt;
	echo eject &amp;gt; /proc/acpi/ibm/bay&lt;br /&gt;
fi&lt;br /&gt;
# Tell the user we're OK&lt;br /&gt;
echo 12 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Use the modified version below if the above doesn't work for you (for kernels 2.6.25+ due to &amp;quot;ULTRABAY_SYSDIR/block\:*/dev&amp;quot; path change). It was tested on a Thinkpad X41 with Fedora 9 and kernel 2.6.25.11:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
ULTRABAY_SYSDIR='/sys/class/scsi_device/1:0:0:0/device'&lt;br /&gt;
shopt -s nullglob&lt;br /&gt;
&lt;br /&gt;
# Umount the filesystem(s) backed by the given major:minor device(s)&lt;br /&gt;
unmount_rdev() { perl - &amp;quot;$@&amp;quot; &amp;lt;&amp;lt;'EOPERL'  # let's do it in Perl&lt;br /&gt;
	for $major_minor (@ARGV) {&lt;br /&gt;
		$major_minor =~ m/^(\d+):(\d+)$/ or die;&lt;br /&gt;
		push(@tgt_rdevs, ($1&amp;lt;&amp;lt;8)|$2);&lt;br /&gt;
	}&lt;br /&gt;
        # Sort by reverse length of mount point, to unmount sub-directories first&lt;br /&gt;
        open MOUNTS,&amp;quot;&amp;lt;/proc/mounts&amp;quot; or die &amp;quot;$!&amp;quot;;&lt;br /&gt;
        @mounts=sort { length($b-&amp;gt;[1]) &amp;lt;=&amp;gt; length($a-&amp;gt;[1]) } map { [ split ] } &amp;lt;MOUNTS&amp;gt;;&lt;br /&gt;
        close MOUNTS;&lt;br /&gt;
        foreach $m (@mounts) {&lt;br /&gt;
                ($dev,$dir)=@$m;&lt;br /&gt;
		next unless -b $dev;  $rdev=(stat($dev))[6];&lt;br /&gt;
		next unless grep($_==$rdev, @tgt_rdevs);&lt;br /&gt;
		system(&amp;quot;umount&amp;quot;,&amp;quot;-v&amp;quot;,&amp;quot;$dir&amp;quot;)==0  or  $bad=1;&lt;br /&gt;
	}&lt;br /&gt;
	exit 1 if $bad;&lt;br /&gt;
EOPERL&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Get the UltraBay's /dev/foo block device node&lt;br /&gt;
ultrabay_dev_node() {&lt;br /&gt;
	UDEV_PATH=&amp;quot;`readlink -e &amp;quot;$ULTRABAY_SYSDIR/block/&amp;quot;*`&amp;quot; || return 1&lt;br /&gt;
	UDEV_NAME=&amp;quot;`udevinfo -q name -p $UDEV_PATH`&amp;quot; || return 1&lt;br /&gt;
	echo /dev/$UDEV_NAME&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if [ -d $ULTRABAY_SYSDIR ]; then&lt;br /&gt;
	sync&lt;br /&gt;
	# Unmount filesystems backed by this device&lt;br /&gt;
	unmount_rdev `cat $ULTRABAY_SYSDIR/block/*/dev     \&lt;br /&gt;
	                  $ULTRABAY_SYSDIR/block/*/*/dev`  \&lt;br /&gt;
	|| {&lt;br /&gt;
		echo 10 &amp;gt; /proc/acpi/ibm/beep;  # error tone&lt;br /&gt;
		exit 1;&lt;br /&gt;
	}&lt;br /&gt;
        sync&lt;br /&gt;
        # Nicely power off the device&lt;br /&gt;
	DEVNODE=`ultrabay_dev_node` &amp;amp;&amp;amp; hdparm -Y $DEVNODE&lt;br /&gt;
        # Let HAL+KDE notice the unmount and let the disk spin down&lt;br /&gt;
	sleep 0.5&lt;br /&gt;
	# Unregister this SCSI device:&lt;br /&gt;
	sync&lt;br /&gt;
	echo 1 &amp;gt; $ULTRABAY_SYSDIR/delete&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
# We really need a 3 sec pause here otherwise the system will freeze..&lt;br /&gt;
sleep 3&lt;br /&gt;
&lt;br /&gt;
# Turn off power to the UltraBay:&lt;br /&gt;
dock=$( /bin/grep ata_bay /sys/devices/platform/dock.?/type )&lt;br /&gt;
dock=${dock%%/type:ata_bay} # needed for 2.6.27 and later&lt;br /&gt;
if [ -n &amp;quot;$dock&amp;quot; -a -d &amp;quot;$dock&amp;quot; ]; then&lt;br /&gt;
        echo 1 &amp;gt; $dock/undock&lt;br /&gt;
elif [ -d /sys/devices/platform/bay.0 ]; then&lt;br /&gt;
	echo 1 &amp;gt; /sys/devices/platform/bay.0/eject&lt;br /&gt;
elif [ -e /proc/acpi/ibm/bay ]; then&lt;br /&gt;
	echo eject &amp;gt; /proc/acpi/ibm/bay&lt;br /&gt;
fi&lt;br /&gt;
# Tell the user we're OK&lt;br /&gt;
echo 12 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/acpi/events/ultrabay-insert}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
event=ibm/bay MSTR 00000001 00000000&lt;br /&gt;
action=/usr/local/sbin/ultrabay_insert&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/acpi/events/ultrabay-eject}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
event=ibm/bay MSTR 00000003 00000000&lt;br /&gt;
action=/usr/local/sbin/ultrabay_eject&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Restart &amp;lt;tt&amp;gt;acpid&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
If the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver is built in the kernel, it will catch bay events and you will see the&lt;br /&gt;
following message in your system log:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
thinkpad_acpi: another device driver is already handling bay events&lt;br /&gt;
thinkpad_acpi: disabling subdriver bay&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You should load &amp;lt;tt&amp;gt;thinkpad_acpi&amp;lt;/tt&amp;gt; before &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; if you want it to handle bay events.&lt;br /&gt;
&lt;br /&gt;
===Using the generic bay driver and udev===&lt;br /&gt;
&lt;br /&gt;
Starting from kernel 2.6.23-rc3, it's possible to use the generic &amp;lt;tt&amp;gt;bay&amp;lt;/tt&amp;gt; driver in combination with udev to hotswap. Please check if CONFIG_ACPI_BAY is enabled (module or built-in) in your kernel configuration.&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/udev/rules.d/ibm-ultrabay.rules}}:&lt;br /&gt;
 ENV{BAY_EVENT}==&amp;quot;3&amp;quot;, KERNEL==&amp;quot;bay.0&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;platform&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay_eject&amp;quot;&lt;br /&gt;
 ENV{BAY_EVENT}==&amp;quot;1&amp;quot;, KERNEL==&amp;quot;bay.0&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;platform&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay_insert&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Starting with kernel 2.6.28, the &amp;lt;tt&amp;gt;bay&amp;lt;/tt&amp;gt; driver was removed from the mainline kernel. The &amp;lt;tt&amp;gt;dock&amp;lt;/tt&amp;gt; driver replaced it completely. Make sure CONFIG_ACPI_DOCK is enabled in the kernel, and use the following udev rules:&lt;br /&gt;
&lt;br /&gt;
 ENV{EVENT}==&amp;quot;undock&amp;quot;, KERNEL==&amp;quot;dock.2&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;platform&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay_eject&amp;quot;&lt;br /&gt;
 ENV{EVENT}==&amp;quot;dock&amp;quot;, KERNEL==&amp;quot;dock.2&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;platform&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay_insert&amp;quot;&lt;br /&gt;
&lt;br /&gt;
However, the ultra_eject script needs to be changed, otherwise udev goes into an infinite event loop. It will send undock events every few seconds forever. That means as soon as the ultrabay is plugged in again, it will be immediately ejected. For kernels 2.6.28 and higher, the bay cannot be powered off using this method, so change the end of the script to read:&lt;br /&gt;
 # Turn off power to the UltraBay:&lt;br /&gt;
 if [ -d /sys/devices/platform/bay.0 ]; then&lt;br /&gt;
 	echo 1 &amp;gt; /sys/devices/platform/bay.0/eject&lt;br /&gt;
 elif [ -e /proc/acpi/ibm/bay ]; then&lt;br /&gt;
 	echo eject &amp;gt; /proc/acpi/ibm/bay&lt;br /&gt;
 fi&lt;br /&gt;
 # Tell the user we're OK&lt;br /&gt;
 echo 12 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
&lt;br /&gt;
Alternatively, instead of modifying the script, use the libata-acpi method below.&lt;br /&gt;
This was tested on a T61p running Gentoo with tuxonice 2.6.28-r8 without any issues.&lt;br /&gt;
&lt;br /&gt;
===Using libata-acpi and udev===&lt;br /&gt;
&lt;br /&gt;
Starting from kernel 2.6.26-rc5, it's possible to use &amp;lt;tt&amp;gt;libata-acpi&amp;lt;/tt&amp;gt; in combination with udev to hotswap. Please check if CONFIG_ATA_ACPI is enabled in your kernel configuration.&lt;br /&gt;
&lt;br /&gt;
For 2.6.25, you need two patches which can be easily backported ([http://article.gmane.org/gmane.linux.acpi.devel/31159],[http://article.gmane.org/gmane.linux.acpi.devel/31369]).&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/udev/rules.d/ibm-ultrabay.rules}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ENV{BAY_EVENT}==&amp;quot;3&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;scsi&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay_eject&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-specific notes===&lt;br /&gt;
See the table above for a list of ata_piix supported laptops and the bus ID to use.&lt;br /&gt;
&lt;br /&gt;
===HAL support===&lt;br /&gt;
&lt;br /&gt;
{{NOTE| Starting from HAL 0.5.11, you need to replace &amp;quot;storage.physical_device&amp;quot; with &amp;quot;info.parent&amp;quot;.}}&lt;br /&gt;
&lt;br /&gt;
Many programs, KDE included, rely on [[HAL]] to get notifications and information about device hotplugging. You need to tell HAL that devices connected the UltraBay port are hotpluggable. To do so, create the file {{path|/etc/hal/fdi/information/10-ultrabay.fdi}} as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt; &amp;lt;!-- -*- SGML -*- --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;deviceinfo version=&amp;quot;0.2&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;device&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- UltraBay Devices --&amp;gt;&lt;br /&gt;
    &amp;lt;match key=&amp;quot;storage.bus&amp;quot; string=&amp;quot;scsi&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;match key=&amp;quot;storage.physical_device&amp;quot; string=&amp;quot;/org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_0_scsi_device_lun0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;merge key=&amp;quot;storage.hotpluggable&amp;quot; type=&amp;quot;bool&amp;quot;&amp;gt;true&amp;lt;/merge&amp;gt;&lt;br /&gt;
      &amp;lt;/match&amp;gt;&lt;br /&gt;
    &amp;lt;/match&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/device&amp;gt;&lt;br /&gt;
&amp;lt;/deviceinfo&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The string &amp;quot;8086_2653&amp;quot; may need to be changed to match your ThinkPad model; see below.&lt;br /&gt;
&lt;br /&gt;
====Details====&lt;br /&gt;
&lt;br /&gt;
By default, HAL doesn't know that UltraBay devices are hotpluggable:&lt;br /&gt;
&lt;br /&gt;
 # PHYSDEV=/org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_0_scsi_device_lun0&lt;br /&gt;
 # UDI=`hal-find-by-property --key storage.physical_device --string $PHYSDEV` || echo Failed&lt;br /&gt;
 # hal-get-property --udi $UDI --key block.device&lt;br /&gt;
 /dev/sdb&lt;br /&gt;
 # hal-get-property --udi $UDI --key storage.hotpluggable&lt;br /&gt;
 false&lt;br /&gt;
&lt;br /&gt;
After creating {{path|/etc/hal/fdi/information/10-ultrabay.fdi}} as above and re-plugging the device, it will get marked correctly:&lt;br /&gt;
&lt;br /&gt;
 # PHYSDEV=/org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_0_scsi_device_lun0&lt;br /&gt;
 # UDI=`hal-find-by-property --key storage.physical_device --string $PHYSDEV` || echo Failed&lt;br /&gt;
 # hal-get-property --udi $UDI --key block.device&lt;br /&gt;
 /dev/sdb&lt;br /&gt;
 # hal-get-property --udi $UDI --key storage.hotpluggable&lt;br /&gt;
 true&lt;br /&gt;
&lt;br /&gt;
The string &amp;quot;8086_2653&amp;quot; gives the PCI ID of the [[Intel 82801FBM]] southbridge. If your model has a different southbridge, or the UltraBay is attached to a different port, then you can find the appropriate &amp;lt;tt&amp;gt;storage.physical_device&amp;lt;/tt&amp;gt; value by finding out the block device of the currently running UltraBay device (&amp;lt;tt&amp;gt;/dev/sdb&amp;lt;/tt&amp;gt; in the following example) and then running:&lt;br /&gt;
&lt;br /&gt;
 # DEVICE=/dev/sdb&lt;br /&gt;
 # UDI=`hal-find-by-property --key block.device --string $DEVICE` || echo Failed&lt;br /&gt;
 # hal-get-property --udi $UDI --key storage.physical_device&lt;br /&gt;
 /org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_0_scsi_device_lun0&lt;br /&gt;
&lt;br /&gt;
If you have a different &amp;lt;tt&amp;gt;storage.physical_device&amp;lt;/tt&amp;gt; value, please report your findings.&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
|+ Known South Bridge PCI IDs&lt;br /&gt;
! ID !! ThinkPad model !! South Bridge chip&lt;br /&gt;
|-&lt;br /&gt;
| 8086_248a || 2366-83U (T30), 2647-MG3 (T23)|| Intel 82801CAM IDE U100 (rev 2)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2653 || 2525FAG (X41), ? (T43) || Intel 82801FBM (ICH6-M)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_24ca || 237358U (T40), 2373KXU (T42p) || Intel 82801DBM (ICH4-M)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27c4 || X60           || Intel 82801GBM (ICH7 Family)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27df || Z61p, T60, T60p || Intel 82801GBM/GHM (ICH7 Family)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2850 || T61, T61p || Intel 82801H (ICH8 Family)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==When using the &amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt; driver==&lt;br /&gt;
The following applies if you use the &amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt; driver for the UltraBay device.&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note that essentially, you shouldn't be using this driver, and use ata_piix instead unless you're running an older kernel where ata_piix won't work for you&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hotswapping is supposed to be supported as well, using either hdparm/[http://packages.debian.org/unstable/admin/hotswap Debian hotswap] or [[lt_hotswap]] to (un)register IDE devices. The latter is the recommended method with kernels from 2.6, since it will leave DMA working. However, for recent models (R52, T43, X41, Z60 and later) no method is known to work while maintaining DMA support; see [[Problems with SATA and Linux]].&lt;br /&gt;
&lt;br /&gt;
Only IDE devices (HDD's, optical drives, zip drives) require special treatment - batteries, floppies and other devices can just be pulled from the bay, provided they are not mounted or in use at the time. However, you should still power them down first using the [[ibm-acpi]] eject function.&lt;br /&gt;
&lt;br /&gt;
The [[ibm-acpi]] kernel module has an eject function ({{cmdroot|echo eject &amp;gt; /proc/acpi/ibm/bay}}). This only manages the ACPI calls to power down the device and the bay. It does not actually unregister the device from the IDE driver. {{cmdroot|cat /proc/acpi/ibm/bay}} shows &amp;quot;unoccupied&amp;quot; unless an IDE device is present, but the eject function still works and should still be used.&lt;br /&gt;
&lt;br /&gt;
To unregister the device, you can either use the [http://packages.debian.org/unstable/admin/hotswap Debian hotswap] package, or [[lt_hotswap]]. Note that lt_hotswap doesn't seem to even build on recent (at 2.6.22 or newer, although it probably broke before 2.6.22) and on newer kernels, you should not build/load the old IDE PIIX (CONFIG_BLK_DEV_PIIX) and use the natively hotswapping ata_piix (CONFIG_ATA_PIIX) as explained on the top of this page.&lt;br /&gt;
&lt;br /&gt;
[http://packages.debian.org/unstable/admin/hotswap Debian hotswap] also allows the drive to be swapped as a normal user by default, which is useful. You should use &amp;lt;tt&amp;gt;hotswap&amp;lt;/tt&amp;gt; to unregister the device and then {{cmdroot|echo eject &amp;gt; /proc/acpi/ibm/bay}}. However, if you use this method on a 2.6 kernel, you will lose DMA support for the reinserted drive. This is due to kernel issues. This method was reported to work on a ThinkPad {{T23}} (kernels 2.6.8.1, 2.6.14.2 and 2.6.15-arch) and {{T42}} (kernel 2.6.13), but fails on a ThinkPad {{T43}} (kernel 2.6.14.3).&lt;br /&gt;
&lt;br /&gt;
[[lt_hotswap]] is now the recommended method to un- and reregister the IDE device. It installs as a kernel module and has support for automatically unregistering (if loaded with the auto_eject=1 option) the device when the eject event is generated by [[ibm-acpi]]. It will leave DMA support intact. It has supported to work on a ThinkPad {{T22}} and {{T40}} and should work with many other models (but not recent models which require the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver for disk DMA support). With the [[lt_hotswap]] kernel module loaded, run: {{cmdroot|modprobe -r ide_cd &amp;amp;&amp;amp; modprobe -r cdrom &amp;amp;&amp;amp; echo &amp;quot;MSTR eject&amp;quot; &amp;gt; /proc/acpi/lths}}&lt;br /&gt;
&lt;br /&gt;
===HAL support===&lt;br /&gt;
&lt;br /&gt;
HAL support also can also be configured To do so, create the file {{path|/etc/hal/fdi/information/10-ultrabay.fdi}} as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt; &amp;lt;!-- -*- SGML -*- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;deviceinfo version=&amp;quot;0.2&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;device&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- UltraBay Devices --&amp;gt;&lt;br /&gt;
    &amp;lt;match key=&amp;quot;storage.bus&amp;quot; string=&amp;quot;ide&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;match key=&amp;quot;storage.physical_device&amp;quot; string=&amp;quot;/org/freedesktop/Hal/devices/pci_8086_24ca_ide_1_0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;merge key=&amp;quot;storage.hotpluggable&amp;quot; type=&amp;quot;bool&amp;quot;&amp;gt;true&amp;lt;/merge&amp;gt;&lt;br /&gt;
      &amp;lt;/match&amp;gt;&lt;br /&gt;
    &amp;lt;/match&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/device&amp;gt;&lt;br /&gt;
&amp;lt;/deviceinfo&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
For more details see HAL section for ata driver.&lt;br /&gt;
&lt;br /&gt;
==Other comments==&lt;br /&gt;
&lt;br /&gt;
If you are hot-swapping a hard disk on a disk tray, make sure the disk does not have a password set, otherwise it will not be recognized on reinsertion.&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripts]]&lt;br /&gt;
[[Category:HOWTOs]]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=HDAPS&amp;diff=40846</id>
		<title>HDAPS</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=HDAPS&amp;diff=40846"/>
		<updated>2009-01-22T20:39:46Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: /* GUI monitoring */ new gnome-hdaps-applet version&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;
=== HDAPS - IBM Active Protection System Linux Driver ===&lt;br /&gt;
This is the Linux driver for monitoring the accelerometer known as [[Active Protection System|IBM Active Protection System]].&lt;br /&gt;
&lt;br /&gt;
The driver only enables reading of the acceleration data. It does '''not''' perform [[#Harddisk Protection|automatic disk head parking]]. But there are already some other useful [[#Applications|applications]] for HDAPS, using the {{path|/sys}} interface it provides.&lt;br /&gt;
&lt;br /&gt;
{{WARN|There are two versions of the hdaps driver, one in the Linux kernel mainline, and another provided by [[tp_smapi]].  '''Use of the tp_smapi version of hdaps is strongly recommended by the current hdaps developers.'''}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
*provides accelerometer values via sysfs&lt;br /&gt;
*provides a joystick type input device&lt;br /&gt;
&lt;br /&gt;
=== Project Homepage / Availability ===&lt;br /&gt;
*[http://hdaps.sourceforge.net/ Project Homepage]&lt;br /&gt;
*The driver is included in the 2.6-mm series of kernels since August, 26th 2005.&lt;br /&gt;
*The driver is now in the mainline (2.6.14).&lt;br /&gt;
*The [[tp_smapi]] package contains some patches to this driver. These are necessary for some recent models, and recommended for all.&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
A driver is included in recent Linux kernels and is actively maintained, but it is very inferior to the driver in tp_smapi (which provides its own hdaps module).&lt;br /&gt;
&lt;br /&gt;
=== How to install the driver ===&lt;br /&gt;
Recent Linux kernels include the &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; driver. However, the driver in the mainline Linux kernel has two problems with recent models:&lt;br /&gt;
* It doesn't whitelist them (you have to edit hdaps_init() in drivers/hwmon/hdaps.c to include a line like &amp;lt;tt&amp;gt;HDAPS_DMI_MATCH_LENOVO(&amp;quot;ThinkPad T60&amp;quot;)&amp;lt;/tt&amp;gt;)&lt;br /&gt;
* It doesn't work reliably, e.g., it may read out constant values (0,0). See [http://sourceforge.net/mailarchive/message.php?msg_id=15350314 here].&lt;br /&gt;
&lt;br /&gt;
To solve both problems, install the modified hdaps that is bundled with [[tp_smapi]].&lt;br /&gt;
&lt;br /&gt;
=== Harddisk Protection ===&lt;br /&gt;
As mentioned above, the hdaps kernel driver is only responsible for reading the accelerometer data and exporting it through the sysfs interface. In order to use this information to protect the disk, some additional steps are required.&lt;br /&gt;
&lt;br /&gt;
See [[How to protect the harddisk through APS]].&lt;br /&gt;
&lt;br /&gt;
=== Input device support ===&lt;br /&gt;
In more recent versions of the Linux kernel, the hdaps exports event devices with the accelerometer data.  These devices can be used as-is by some programs (e.g. hdapsd), but for most they must be handled by the additional kernel module &amp;lt;code&amp;gt;joydev&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
When both modules are loaded, joydev will provide standard joystick device emulation for hdaps (standard hdaps exports just one joystick device.  enhanced hdaps from tp_smapi will export two due to issues still unsolved on joydev, but the second one must not be used as a joystick).&lt;br /&gt;
&lt;br /&gt;
{{WARN|Letting a program bind to these joystick devices can cause surprising results if you are not aware of it. e.g.: mplayer can act quite strangely.  Also, letting a program bind to the second joystick device from enhanced HDAPS is guaranteed to be trouble}}&lt;br /&gt;
&lt;br /&gt;
Udev can be used to create device nodes in /dev for use by user space programs that access the joystick, and to set appropriate permissions.&lt;br /&gt;
&lt;br /&gt;
In order for non-root users to access these device files, their permissions must be tweaked a little through an appropriate udev rule and corresponding &amp;quot;joy&amp;quot; group.&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|addgroup joy}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{cmdroot|adduser &amp;lt;you&amp;gt; joy}}&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;# echo 'SUBSYSTEM==&amp;quot;input&amp;quot;, KERNEL==&amp;quot;js*&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;joy&amp;quot;' &amp;gt;&amp;gt; /etc/udev/hdaps-joy.rules&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{{cmdroot|ln -s ../hdaps-joy.rules /etc/udev/rules.d/z60_hdaps-joy.rules}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Programs you can use to test and calibrate the device files include &amp;lt;code&amp;gt;jscalibrator&amp;lt;/code&amp;gt; (gui) and &amp;lt;code&amp;gt;jstest&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;jscal&amp;lt;/code&amp;gt; (cli) packaged together (at least in Debian) simply as &amp;quot;joystick&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
====Disk head parking====&lt;br /&gt;
You will need the kernel patch below and the hdapsd userspace daemon. The GUI monitoring is optional.&lt;br /&gt;
&lt;br /&gt;
See [[How to protect the harddisk through APS]] for more information.&lt;br /&gt;
&lt;br /&gt;
===== Kernel patch =====&lt;br /&gt;
Due to significant changes in the way the libata module which handles disk i/o, applying any of the currently available patches to kernel 2.6.24 will intermittently cause system hangs when the queue is frozen (i.e., the heads are parked). It is recommended either that you stay at kernel [http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.17.tar.bz2 2.6.23] or do without disk protection in 2.6.24 until the kinks have been worked out. There has been significant work on the part of [http://lkml.org/lkml/2008/2/25/478 Elias Oltmanns], author of the more recent patches, to get this worked out and eventually get shock protection built into the mainline kernel.&lt;br /&gt;
&lt;br /&gt;
Below are some links to patches for various Linux kernel versions. As noted above, your mileage may vary with the 2.6.24-rc3 patch as it was after this release candidate that things stopped working nicely. &lt;br /&gt;
{{HINT|To apply a patch, change to the root directory of the kernel tree and run&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;patch -p1 -l &amp;lt; hdaps_xx.patch&amp;lt;/code&amp;gt;}}&lt;br /&gt;
* New interface (requires hdapsd dated 2008-10-04 or newer)&lt;br /&gt;
** In mainline kernel 2.6.28&lt;br /&gt;
** [http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1393 disk-protect patch for kernel 2.6.27.2]&lt;br /&gt;
* Old interface&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1324/raw disk-protect patch for kernel 2.6.26]&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1297/raw disk-protect patch for kernel 2.6.26-rc9]&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1245/raw disk-protect patch for kernel 2.6.25-rc9] &amp;amp;mdash; may cause system locks (same as patch for 2.6.24-rc3). Apply [http://mailman.linux-thinkpad.org/pipermail/linux-thinkpad/2008-February/042226.html this fix] before.&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1094 disk-protect patch for kernel 2.6.24-rc3] &amp;amp;mdash; may cause system locks (see [http://marc.info/?l=linux-thinkpad&amp;amp;m=120259594519907 here], [http://marc.info/?l=linux-thinkpad&amp;amp;m=120259929023300 here] and try [http://mailman.linux-thinkpad.org/pipermail/linux-thinkpad/2008-February/042226.html this fix])&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1092 disk-protect patch for 2.6.23.8] + [http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1113 error check fix]&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1077 disk-protect patch for 2.6.22.9 and 2.6.23-rc9]&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/993 disk-protect patch for 2.6.20-rc6]&lt;br /&gt;
* Ancient interface&lt;br /&gt;
**[http://www.nabble.com/attachment/9047418/0/hdaps_protect-2.6.20.patch.bz2 Latest sata/ide disk protection patch for 2.6.20]&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.kernel/470413 Latest sata/ide disk protection patch for 2.6.19-rc6]&lt;br /&gt;
**[http://www.dresco.co.uk/hdaps/hdaps_protect-2.6.18.3-2.patch Latest sata/ide disk protection patch for 2.6.18.3]&lt;br /&gt;
**[http://exitzero.de/t41p-configs/hdaps_protect-2.6.17.1-20060625.patch Untested patch for 2.6.17.1]: see [http://thread.gmane.org/gmane.linux.drivers.hdaps.devel/708/focus=708]&lt;br /&gt;
**[http://whoopie.gmxhome.de/linux/patches/2.6.17.14-tj/03-hdaps_protect-20060430-for-2.6.17-tj.patch Latest sata/ide disk protection patch for use with the libata hotplug 2.6.17.4 patches] - See [[How_to_hotswap_UltraBay_devices]]&lt;br /&gt;
**[http://whoopie.gmxhome.de/linux/patches/2.6.16-tj/05-hdaps_protect-20060430-for-2.6.16-tj.patch Latest sata/ide disk protection patch for use with the libata hotplug 2.6.16.16 patches] - See [[How_to_hotswap_UltraBay_devices]]&lt;br /&gt;
**[http://www.dresco.co.uk/hdaps/hdaps_protect.20060430.patch Latest sata/ide disk protection patch for 2.6.16]&lt;br /&gt;
**[http://www.dresco.co.uk/hdaps/hdaps_protect.20060118.patch sata/ide disk protection patch for 2.6.15]&lt;br /&gt;
**[http://jenster.dyndns.org/files/blk_freeze-01-nodetection-for-2.6.15.patch disk park patch adapted for the t41p model] &amp;lt;tt&amp;gt; kernel 2.6.15 ([http://sourceforge.net/mailarchive/message.php?msg_id=13214288 capability detection disabled], no libata support)&amp;lt;/tt&amp;gt;&lt;br /&gt;
**[http://jenster.dyndns.org/files/blk_freeze-01-nodetection-for-2.6.14.patch disk park patch adapted for the t41p model] &amp;lt;tt&amp;gt; kernel 2.6.14 ([http://sourceforge.net/mailarchive/message.php?msg_id=13214288 capability detection disabled], no libata support)&amp;lt;/tt&amp;gt;&lt;br /&gt;
**[http://lwn.net/Articles/154923/ disk park patch] &amp;lt;tt&amp;gt;an experimental patch for parking the disk (Linux 2.6.14 for 2.6.15 see below)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Userspace daemon =====&lt;br /&gt;
*Current version: [http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1372] or [http://www.zen24593.zen.co.uk/hdaps/hdapsd-20081004.c]&amp;lt;br&amp;gt;&lt;br /&gt;
This version optionally reduces timer interrupts (as measured by [[PowerTOP]]), and thereby reduces power consumption on modern (&amp;quot;tickless&amp;quot;) Linux kernels. Interrupt reduction requires the &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; kernel module from [[tp_smapi]] 0.32 or newer, and a udev rule. If these are not present, it will default to an older polling method that is slightly more power-hungry. The udev rule helps hdapsd find the input device, and on most distributions it can be created as follows:&lt;br /&gt;
 # echo 'KERNEL==&amp;quot;event[0-9]*&amp;quot;, ATTRS{phys}==&amp;quot;hdaps/input1&amp;quot;,ATTRS{modalias}==&amp;quot;input:b0019v1014p5054e4801-*&amp;quot;,SYMLINK+=&amp;quot;input/hdaps/accelerometer-event&amp;quot;' \&lt;br /&gt;
   &amp;gt; /etc/udev/rules.d/51-hdaps.rules&lt;br /&gt;
Then reboot or run {{cmdroot|/sbin/udevtrigger}}, and verify that the {{path|/dev/input/hdaps/accelerometer-event}} symlink exists.&lt;br /&gt;
&lt;br /&gt;
*[ftp://rohrmoser-engineering.de/pub Modified adaptive algorithm version] - uses a different (and potentially better) algorithm for the adaptive sensivity threshold.&lt;br /&gt;
{{HINT| Gentoo users : due to new interface your initscript won't be longer working. Read documentation before upgrading to this version. &lt;br /&gt;
Use an overlay listed bellow with updated versions of related packages}}&lt;br /&gt;
&lt;br /&gt;
===== GUI monitoring =====&lt;br /&gt;
*[http://roy.marples.name/node/269 khdapmonitor] KDE System Tray Monitor&lt;br /&gt;
*[http://www.dresco.co.uk/hdaps/gnome-hdaps-applet-20081204.tar.gz gnome-hdaps-applet] visual display of disk protection status in gnome panel&lt;br /&gt;
*[http://www.kde-look.org/content/show.php/Applet+HDAPS?content=78387 applet_hdaps] KDE4 Plasmoid display disk protection status&lt;br /&gt;
*[http://awn.planetblur.org/index.php?shard=forum&amp;amp;action=g_reply&amp;amp;ID=1916&amp;amp;page=1&amp;amp;isLive=true ThinkHDAPS] Avant Window Manager applet for disk protection status&lt;br /&gt;
*[http://web.student.tuwien.ac.at/~e0726415/thinkhdaps.html ThinkHDAPS] A standalone (=gtk.StatusIcon) version of onox' awn applet; v0.2 supports new sysfs layout (kernel &amp;gt;=2.6.27); Should work for the new HP driver as well.&lt;br /&gt;
&lt;br /&gt;
====Security &amp;amp; safety====&lt;br /&gt;
*[[Script for theft alarm using HDAPS]]&lt;br /&gt;
&lt;br /&gt;
====Tilt monitoring====&lt;br /&gt;
*[http://www.mulliner.org/collin/gkibm-acpi.php gkhdaps] &amp;lt;tt&amp;gt;a GKrellM applet displaying tilt data&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[https://sourceforge.net/project/showfiles.php?group_id=138242 gnome-tilt] &amp;lt;tt&amp;gt;a gnome applet showing tilt data&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Visualisation of ThinkPad orientation====&lt;br /&gt;
*[https://sourceforge.net/project/showfiles.php?group_id=138242 hdaps-gl] &amp;lt;tt&amp;gt;a little app animating a 3D-ThinkPad&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[https://sourceforge.net/project/showfiles.php?group_id=138242 hdapsgl-applet] &amp;lt;tt&amp;gt; a GNOME applet animating a 3D-ThinkPad&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[https://sourceforge.net/project/showfiles.php?group_id=138242 wmadhps] &amp;lt;tt&amp;gt;a WindowMaker DockApp animating a 3D-ThinkPad&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[http://www.cs.cmu.edu/~ecc/gyro.tar.gz OpenGL gyroscope hack] &amp;lt;tt&amp;gt;keeps your display levelled when tilting the ThinkPad&amp;lt;/tt&amp;gt; (warning: [http://en.wikipedia.org/wiki/Tarbomb uncompresses in the current directory]!)&lt;br /&gt;
&lt;br /&gt;
====Games====&lt;br /&gt;
*[http://icculus.org/neverball/ Neverball] is quite fun with HDAPS. (You'll need to have the HDAPS joystick device)&lt;br /&gt;
*Turn your ThinkPad into a Jedi Weapon (hey, it [http://isnoop.net/blog/2006/05/20/macsaber-turn-your-mac-into-a-jedi-weapon works for Mac laptops])&lt;br /&gt;
&lt;br /&gt;
====Other====&lt;br /&gt;
&lt;br /&gt;
*[http://blog.micampe.it/articles/2006/06/04/here-comes-the-smackpad smack.py] - switch workspace by smacking your laptop, inspired by the [http://blog.medallia.com/2006/05/smacbook_pro.html SmackBook] (uses EWMH)&lt;br /&gt;
**an [http://weblogs.mozillazine.org/gerv/archives/2006/09/stablilised_smackpad.html improved version] adds stabilization (by comparing smacks to previous ones, uses EWMH)&lt;br /&gt;
**another [http://pberndt.com/Programme/Linux/pyhdaps/index.html approach] adds stabilization (by requiring a certain type of value deflection, uses xmacroplay)&lt;br /&gt;
**[http://www.gnome.org/~fherrera/gtollina.c GTollina] is another smack program for use with compiz (video [http://www.gnome.org/~fherrera/blog/gtollina.html here]).&lt;br /&gt;
*[http://blog.odonnell.nu/61.html xmms-smack.py] - move through your xmms playlist by smacking, based on the two smack scripts above.&lt;br /&gt;
*[http://www-128.ibm.com/developerworks/linux/library/l-knockage.html?ca=dgr-lnxw02aKnockBasedCommands KnockBasedCommands] - Execute commands by tapping your laptop.&lt;br /&gt;
*[http://people.ksp.sk/~mic/?menu=32&amp;amp;file=rotate.py rotate.py] - rotate desktop by turning your laptop&lt;br /&gt;
*[[hdaps_ess|Enhanced smack script]] ess.py is based on the smacks scripts listed in this section. It includes stabilization, a lot of tuning options and it handles both axis (at best you should be able to map 8 commands, even if it is possible I was not able to do so). It is not perfect but on my Thinkpad it works better than the other scripts.&lt;br /&gt;
&lt;br /&gt;
=== Interesting links related to this project ===&lt;br /&gt;
* [https://lists.sourceforge.net/lists/listinfo/hdaps-devel HDAPS mailinglist and its archive]&lt;br /&gt;
* #hdaps channel on irc.freenode.org&lt;br /&gt;
* [https://sourceforge.net/projects/hdaps/ hdaps projects] overview of userspace programs using hdaps&lt;br /&gt;
* [http://www-307.ibm.com/pc/support/site.wss/document.do?lndocid=TPAD-HDFIRM IBM ThinkPads hardware drive firmware site]&lt;br /&gt;
* [http://www.paul.sladen.org/thinkpad-r31/accelerometer.html http://www.paul.sladen.org/thinkpad-r31/accelerometer/]&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=119845 Gentoo ebuild for hdaps driver and daemon including a initscript*&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137345 Gentoo ebuild for gkhdaps gkrell plugin&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137350 Gentoo ebuild for hdaps-gl application&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137351 Gentoo ebuild for gnome hdapsgl-applet&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137352 Gentoo ebuild for gnome tilt application&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137353 Gentoo ebuild for wmhdaps&lt;br /&gt;
* http://gentoo.o0o.nu Gentoo sectools overlay with fresh hdaps-related ebuilds and patches&lt;br /&gt;
* [http://lenovoblogs.com/insidethebox/?p=71 Why the ThinkPad accelerometer is only 2D] - explanation by Lenovo&lt;br /&gt;
&lt;br /&gt;
[[Category:R50]] [[Category:R50p]] [[Category:R51]] [[Category:R52]] [[Category:R60]] [[Category:T41]] [[Category:T41p]] [[Category:T42]] [[Category:T42p]] [[Category:T43]] [[Category:T43p]] [[Category:T60]] [[Category:T60p]] [[Category:T61]] [[Category:X40]] [[Category:X41]] [[Category:X41 Tablet]] [[Category:X60]] [[Category:X60s]] [[Category:Z60m]] [[Category:Z60t]] [[Category:Drivers]] [[Category:Z61m]]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=HDAPS&amp;diff=40171</id>
		<title>HDAPS</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=HDAPS&amp;diff=40171"/>
		<updated>2008-12-09T10:51:44Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: /* Userspace daemon */ point to 2nd download location&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;
=== HDAPS - IBM Active Protection System Linux Driver ===&lt;br /&gt;
This is the Linux driver for monitoring the accelerometer known as [[Active Protection System|IBM Active Protection System]].&lt;br /&gt;
&lt;br /&gt;
The driver only enables reading of the acceleration data. It does '''not''' perform [[#Harddisk Protection|automatic disk head parking]]. But there are already some other useful [[#Applications|applications]] for HDAPS, using the {{path|/sys}} interface it provides.&lt;br /&gt;
&lt;br /&gt;
{{WARN|There are two versions of the hdaps driver, one in the Linux kernel mainline, and another provided by [[tp_smapi]].  '''Use of the tp_smapi version of hdaps is strongly recommended by the current hdaps developers.'''}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
*provides accelerometer values via sysfs&lt;br /&gt;
*provides a joystick type input device&lt;br /&gt;
&lt;br /&gt;
=== Project Homepage / Availability ===&lt;br /&gt;
*[http://hdaps.sourceforge.net/ Project Homepage]&lt;br /&gt;
*The driver is included in the 2.6-mm series of kernels since August, 26th 2005.&lt;br /&gt;
*The driver is now in the mainline (2.6.14).&lt;br /&gt;
*The [[tp_smapi]] package contains some patches to this driver. These are necessary for some recent models, and recommended for all.&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
A driver is included in recent Linux kernels and is actively maintained, but it is very inferior to the driver in tp_smapi (which provides its own hdaps module).&lt;br /&gt;
&lt;br /&gt;
=== How to install the driver ===&lt;br /&gt;
Recent Linux kernels include the &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; driver. However, the driver in the mainline Linux kernel has two problems with recent models:&lt;br /&gt;
* It doesn't whitelist them (you have to edit hdaps_init() in drivers/hwmon/hdaps.c to include a line like &amp;lt;tt&amp;gt;HDAPS_DMI_MATCH_LENOVO(&amp;quot;ThinkPad T60&amp;quot;)&amp;lt;/tt&amp;gt;)&lt;br /&gt;
* It doesn't work reliably, e.g., it may read out constant values (0,0). See [http://sourceforge.net/mailarchive/message.php?msg_id=15350314 here].&lt;br /&gt;
&lt;br /&gt;
To solve both problems, install the modified hdaps that is bundled with [[tp_smapi]].&lt;br /&gt;
&lt;br /&gt;
=== Harddisk Protection ===&lt;br /&gt;
As mentioned above, the hdaps kernel driver is only responsible for reading the accelerometer data and exporting it through the sysfs interface. In order to use this information to protect the disk, some additional steps are required.&lt;br /&gt;
&lt;br /&gt;
See [[How to protect the harddisk through APS]].&lt;br /&gt;
&lt;br /&gt;
=== Input device support ===&lt;br /&gt;
In more recent versions of the Linux kernel, the hdaps exports event devices with the accelerometer data.  These devices can be used as-is by some programs (e.g. hdapsd), but for most they must be handled by the additional kernel module &amp;lt;code&amp;gt;joydev&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
When both modules are loaded, joydev will provide standard joystick device emulation for hdaps (standard hdaps exports just one joystick device.  enhanced hdaps from tp_smapi will export two due to issues still unsolved on joydev, but the second one must not be used as a joystick).&lt;br /&gt;
&lt;br /&gt;
{{WARN|Letting a program bind to these joystick devices can cause surprising results if you are not aware of it. e.g.: mplayer can act quite strangely.  Also, letting a program bind to the second joystick device from enhanced HDAPS is guaranteed to be trouble}}&lt;br /&gt;
&lt;br /&gt;
Udev can be used to create device nodes in /dev for use by user space programs that access the joystick, and to set appropriate permissions.&lt;br /&gt;
&lt;br /&gt;
In order for non-root users to access these device files, their permissions must be tweaked a little through an appropriate udev rule and corresponding &amp;quot;joy&amp;quot; group.&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|addgroup joy}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{cmdroot|adduser &amp;lt;you&amp;gt; joy}}&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;# echo 'SUBSYSTEM==&amp;quot;input&amp;quot;, KERNEL==&amp;quot;js*&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;joy&amp;quot;' &amp;gt;&amp;gt; /etc/udev/hdaps-joy.rules&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{{cmdroot|ln -s ../hdaps-joy.rules /etc/udev/rules.d/z60_hdaps-joy.rules}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Programs you can use to test and calibrate the device files include &amp;lt;code&amp;gt;jscalibrator&amp;lt;/code&amp;gt; (gui) and &amp;lt;code&amp;gt;jstest&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;jscal&amp;lt;/code&amp;gt; (cli) packaged together (at least in Debian) simply as &amp;quot;joystick&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
====Disk head parking====&lt;br /&gt;
You will need the kernel patch below and the hdapsd userspace daemon. The GUI monitoring is optional.&lt;br /&gt;
&lt;br /&gt;
See [[How to protect the harddisk through APS]] for more information.&lt;br /&gt;
&lt;br /&gt;
===== Kernel patch =====&lt;br /&gt;
Due to significant changes in the way the libata module which handles disk i/o, applying any of the currently available patches to kernel 2.6.24 will intermittently cause system hangs when the queue is frozen (i.e., the heads are parked). It is recommended either that you stay at kernel [http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.17.tar.bz2 2.6.23] or do without disk protection in 2.6.24 until the kinks have been worked out. There has been significant work on the part of [http://lkml.org/lkml/2008/2/25/478 Elias Oltmanns], author of the more recent patches, to get this worked out and eventually get shock protection built into the mainline kernel.&lt;br /&gt;
&lt;br /&gt;
Below are some links to patches for various Linux kernel versions. As noted above, your mileage may vary with the 2.6.24-rc3 patch as it was after this release candidate that things stopped working nicely. &lt;br /&gt;
{{HINT|To apply a patch, change to the root directory of the kernel tree and run&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;patch -p1 -l &amp;lt; hdaps_xx.patch&amp;lt;/code&amp;gt;}}&lt;br /&gt;
* New interface (requires hdapsd dated 2008-10-04 or newer)&lt;br /&gt;
** Expected in mainline kernel 2.6.28&lt;br /&gt;
** [http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1393 disk-protect patch for kernel 2.6.27.2]&lt;br /&gt;
* Old interface&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1324/raw disk-protect patch for kernel 2.6.26]&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1297/raw disk-protect patch for kernel 2.6.26-rc9]&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1245/raw disk-protect patch for kernel 2.6.25-rc9] &amp;amp;mdash; may cause system locks (same as patch for 2.6.24-rc3). Apply [http://mailman.linux-thinkpad.org/pipermail/linux-thinkpad/2008-February/042226.html this fix] before.&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1094 disk-protect patch for kernel 2.6.24-rc3] &amp;amp;mdash; may cause system locks (see [http://marc.info/?l=linux-thinkpad&amp;amp;m=120259594519907 here], [http://marc.info/?l=linux-thinkpad&amp;amp;m=120259929023300 here] and try [http://mailman.linux-thinkpad.org/pipermail/linux-thinkpad/2008-February/042226.html this fix])&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1092 disk-protect patch for 2.6.23.8] + [http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1113 error check fix]&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1077 disk-protect patch for 2.6.22.9 and 2.6.23-rc9]&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/993 disk-protect patch for 2.6.20-rc6]&lt;br /&gt;
* Ancient interface&lt;br /&gt;
**[http://www.nabble.com/attachment/9047418/0/hdaps_protect-2.6.20.patch.bz2 Latest sata/ide disk protection patch for 2.6.20]&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.kernel/470413 Latest sata/ide disk protection patch for 2.6.19-rc6]&lt;br /&gt;
**[http://www.dresco.co.uk/hdaps/hdaps_protect-2.6.18.3-2.patch Latest sata/ide disk protection patch for 2.6.18.3]&lt;br /&gt;
**[http://exitzero.de/t41p-configs/hdaps_protect-2.6.17.1-20060625.patch Untested patch for 2.6.17.1]: see [http://thread.gmane.org/gmane.linux.drivers.hdaps.devel/708/focus=708]&lt;br /&gt;
**[http://whoopie.gmxhome.de/linux/patches/2.6.17.14-tj/03-hdaps_protect-20060430-for-2.6.17-tj.patch Latest sata/ide disk protection patch for use with the libata hotplug 2.6.17.4 patches] - See [[How_to_hotswap_UltraBay_devices]]&lt;br /&gt;
**[http://whoopie.gmxhome.de/linux/patches/2.6.16-tj/05-hdaps_protect-20060430-for-2.6.16-tj.patch Latest sata/ide disk protection patch for use with the libata hotplug 2.6.16.16 patches] - See [[How_to_hotswap_UltraBay_devices]]&lt;br /&gt;
**[http://www.dresco.co.uk/hdaps/hdaps_protect.20060430.patch Latest sata/ide disk protection patch for 2.6.16]&lt;br /&gt;
**[http://www.dresco.co.uk/hdaps/hdaps_protect.20060118.patch sata/ide disk protection patch for 2.6.15]&lt;br /&gt;
**[http://jenster.dyndns.org/files/blk_freeze-01-nodetection-for-2.6.15.patch disk park patch adapted for the t41p model] &amp;lt;tt&amp;gt; kernel 2.6.15 ([http://sourceforge.net/mailarchive/message.php?msg_id=13214288 capability detection disabled], no libata support)&amp;lt;/tt&amp;gt;&lt;br /&gt;
**[http://jenster.dyndns.org/files/blk_freeze-01-nodetection-for-2.6.14.patch disk park patch adapted for the t41p model] &amp;lt;tt&amp;gt; kernel 2.6.14 ([http://sourceforge.net/mailarchive/message.php?msg_id=13214288 capability detection disabled], no libata support)&amp;lt;/tt&amp;gt;&lt;br /&gt;
**[http://lwn.net/Articles/154923/ disk park patch] &amp;lt;tt&amp;gt;an experimental patch for parking the disk (Linux 2.6.14 for 2.6.15 see below)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Userspace daemon =====&lt;br /&gt;
*Current version: [http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1372] or [http://www.zen24593.zen.co.uk/hdaps/hdapsd-20081004.c]&amp;lt;br&amp;gt;&lt;br /&gt;
This version optionally reduces timer interrupts (as measured by [[PowerTOP]]), and thereby reduces power consumption on modern (&amp;quot;tickless&amp;quot;) Linux kernels. Interrupt reduction requires the &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; kernel module from [[tp_smapi]] 0.32 or newer, and a udev rule. If these are not present, it will default to an older polling method that is slightly more power-hungry. The udev rule helps hdapsd find the input device, and on most distributions it can be created as follows:&lt;br /&gt;
 # echo 'KERNEL==&amp;quot;event[0-9]*&amp;quot;, ATTRS{phys}==&amp;quot;hdaps/input1&amp;quot;,ATTRS{modalias}==&amp;quot;input:b0019v1014p5054e4801-*&amp;quot;,SYMLINK+=&amp;quot;input/hdaps/accelerometer-event&amp;quot;' \&lt;br /&gt;
   &amp;gt; /etc/udev/rules.d/51-hdaps.rules&lt;br /&gt;
Then reboot or run {{cmdroot|/sbin/udevtrigger}}, and verify that the {{path|/dev/input/hdaps/accelerometer-event}} symlink exists.&lt;br /&gt;
&lt;br /&gt;
*[ftp://rohrmoser-engineering.de/pub Modified adaptive algorithm version] - uses a different (and potentially better) algorithm for the adaptive sensivity threshold.&lt;br /&gt;
{{HINT| Gentoo users : due to new interface your initscript won't be longer working. Read documentation before upgrading to this version. &lt;br /&gt;
Use an overlay listed bellow with updated versions of related packages}}&lt;br /&gt;
&lt;br /&gt;
===== GUI monitoring =====&lt;br /&gt;
*[http://roy.marples.name/node/269 khdapmonitor] KDE System Tray Monitor&lt;br /&gt;
*[http://www.dresco.co.uk/hdaps/gnome-hdaps-applet-20060120.tar.gz gnome-hdaps-applet] visual display of disk protection status in gnome panel&lt;br /&gt;
*[http://www.kde-look.org/content/show.php/Applet+HDAPS?content=78387 applet_hdaps] KDE4 Plasmoid display disk protection status&lt;br /&gt;
*[http://awn.planetblur.org/index.php?shard=forum&amp;amp;action=g_reply&amp;amp;ID=1916&amp;amp;page=1&amp;amp;isLive=true ThinkHDAPS] Avant Window Manager applet for disk protection status&lt;br /&gt;
&lt;br /&gt;
====Security &amp;amp; safety====&lt;br /&gt;
*[[Script for theft alarm using HDAPS]]&lt;br /&gt;
&lt;br /&gt;
====Tilt monitoring====&lt;br /&gt;
*[http://www.mulliner.org/collin/gkibm-acpi.php gkhdaps] &amp;lt;tt&amp;gt;a GKrellM applet displaying tilt data&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[https://sourceforge.net/project/showfiles.php?group_id=138242 gnome-tilt] &amp;lt;tt&amp;gt;a gnome applet showing tilt data&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Visualisation of ThinkPad orientation====&lt;br /&gt;
*[https://sourceforge.net/project/showfiles.php?group_id=138242 hdaps-gl] &amp;lt;tt&amp;gt;a little app animating a 3D-ThinkPad&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[https://sourceforge.net/project/showfiles.php?group_id=138242 hdapsgl-applet] &amp;lt;tt&amp;gt; a GNOME applet animating a 3D-ThinkPad&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[https://sourceforge.net/project/showfiles.php?group_id=138242 wmadhps] &amp;lt;tt&amp;gt;a WindowMaker DockApp animating a 3D-ThinkPad&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[http://www.cs.cmu.edu/~ecc/gyro.tar.gz OpenGL gyroscope hack] &amp;lt;tt&amp;gt;keeps your display levelled when tilting the ThinkPad&amp;lt;/tt&amp;gt; (warning: [http://en.wikipedia.org/wiki/Tarbomb uncompresses in the current directory]!)&lt;br /&gt;
&lt;br /&gt;
====Games====&lt;br /&gt;
*[http://icculus.org/neverball/ Neverball] is quite fun with HDAPS. (You'll need to have the HDAPS joystick device)&lt;br /&gt;
*Turn your ThinkPad into a Jedi Weapon (hey, it [http://isnoop.net/blog/2006/05/20/macsaber-turn-your-mac-into-a-jedi-weapon works for Mac laptops])&lt;br /&gt;
&lt;br /&gt;
====Other====&lt;br /&gt;
&lt;br /&gt;
*[http://blog.micampe.it/articles/2006/06/04/here-comes-the-smackpad smack.py] - switch workspace by smacking your laptop, inspired by the [http://blog.medallia.com/2006/05/smacbook_pro.html SmackBook] (uses EWMH)&lt;br /&gt;
**an [http://weblogs.mozillazine.org/gerv/archives/2006/09/stablilised_smackpad.html improved version] adds stabilization (by comparing smacks to previous ones, uses EWMH)&lt;br /&gt;
**another [http://pberndt.com/Programme/Linux/pyhdaps/index.html approach] adds stabilization (by requiring a certain type of value deflection, uses xmacroplay)&lt;br /&gt;
**[http://www.gnome.org/~fherrera/gtollina.c GTollina] is another smack program for use with compiz (video [http://www.gnome.org/~fherrera/blog/gtollina.html here]).&lt;br /&gt;
*[http://blog.odonnell.nu/61.html xmms-smack.py] - move through your xmms playlist by smacking, based on the two smack scripts above.&lt;br /&gt;
*[http://www-128.ibm.com/developerworks/linux/library/l-knockage.html?ca=dgr-lnxw02aKnockBasedCommands KnockBasedCommands] - Execute commands by tapping your laptop.&lt;br /&gt;
*[http://people.ksp.sk/~mic/?menu=32&amp;amp;file=rotate.py rotate.py] - rotate desktop by turning your laptop&lt;br /&gt;
*[[hdaps_ess|Enhanced smack script]] ess.py is based on the smacks scripts listed in this section. It includes stabilization, a lot of tuning options and it handles both axis (at best you should be able to map 8 commands, even if it is possible I was not able to do so). It is not perfect but on my Thinkpad it works better than the other scripts.&lt;br /&gt;
&lt;br /&gt;
=== Interesting links related to this project ===&lt;br /&gt;
* [https://lists.sourceforge.net/lists/listinfo/hdaps-devel HDAPS mailinglist and its archive]&lt;br /&gt;
* #hdaps channel on irc.freenode.org&lt;br /&gt;
* [https://sourceforge.net/projects/hdaps/ hdaps projects] overview of userspace programs using hdaps&lt;br /&gt;
* [http://www-307.ibm.com/pc/support/site.wss/document.do?lndocid=TPAD-HDFIRM IBM ThinkPads hardware drive firmware site]&lt;br /&gt;
* [http://www.paul.sladen.org/thinkpad-r31/accelerometer.html http://www.paul.sladen.org/thinkpad-r31/accelerometer/]&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=119845 Gentoo ebuild for hdaps driver and daemon including a initscript*&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137345 Gentoo ebuild for gkhdaps gkrell plugin&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137350 Gentoo ebuild for hdaps-gl application&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137351 Gentoo ebuild for gnome hdapsgl-applet&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137352 Gentoo ebuild for gnome tilt application&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137353 Gentoo ebuild for wmhdaps&lt;br /&gt;
* http://gentoo.o0o.nu Gentoo sectools overlay with fresh hdaps-related ebuilds and patches&lt;br /&gt;
* [http://lenovoblogs.com/insidethebox/?p=71 Why the ThinkPad accelerometer is only 2D] - explanation by Lenovo&lt;br /&gt;
&lt;br /&gt;
[[Category:R50]] [[Category:R50p]] [[Category:R51]] [[Category:R52]] [[Category:R60]] [[Category:T41]] [[Category:T41p]] [[Category:T42]] [[Category:T42p]] [[Category:T43]] [[Category:T43p]] [[Category:T60]] [[Category:T60p]] [[Category:T61]] [[Category:X40]] [[Category:X41]] [[Category:X41 Tablet]] [[Category:X60]] [[Category:X60s]] [[Category:Z60m]] [[Category:Z60t]] [[Category:Drivers]] [[Category:Z61m]]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=HDAPS&amp;diff=39176</id>
		<title>HDAPS</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=HDAPS&amp;diff=39176"/>
		<updated>2008-10-23T09:45:06Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: /* Kernel patch */ update link to patch, don't use &amp;quot;raw&amp;quot; as it's easier to download the patch without it.&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;
=== HDAPS - IBM Active Protection System Linux Driver ===&lt;br /&gt;
This is the Linux driver for monitoring the accelerometer known as [[Active Protection System|IBM Active Protection System]].&lt;br /&gt;
&lt;br /&gt;
The driver only enables reading of the acceleration data. It does '''not''' perform [[#Harddisk Protection|automatic disk head parking]]. But there are already some other useful [[#Applications|applications]] for HDAPS, using the {{path|/sys}} interface it provides.&lt;br /&gt;
&lt;br /&gt;
{{WARN|There are two versions of the hdaps driver, one in the Linux kernel mainline, and another provided by [[tp_smapi]].  '''Use of the tp_smapi version of hdaps is strongly recommended by the current hdaps developers.'''}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
*provides accelerometer values via sysfs&lt;br /&gt;
*provides a joystick type input device&lt;br /&gt;
&lt;br /&gt;
=== Project Homepage / Availability ===&lt;br /&gt;
*[http://hdaps.sourceforge.net/ Project Homepage]&lt;br /&gt;
*The driver is included in the 2.6-mm series of kernels since August, 26th 2005.&lt;br /&gt;
*The driver is now in the mainline (2.6.14).&lt;br /&gt;
*The [[tp_smapi]] package contains some patches to this driver. These are necessary for some recent models, and recommended for all.&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
A driver is included in recent Linux kernels and is actively maintained, but it is very inferior to the driver in tp_smapi (which provides its own hdaps module).&lt;br /&gt;
&lt;br /&gt;
=== How to install the driver ===&lt;br /&gt;
Recent Linux kernels include the &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; driver. However, the driver in the mainline Linux kernel has two problems with recent models:&lt;br /&gt;
* It doesn't whitelist them (you have to edit hdaps_init() in drivers/hwmon/hdaps.c to include a line like &amp;lt;tt&amp;gt;HDAPS_DMI_MATCH_LENOVO(&amp;quot;ThinkPad T60&amp;quot;)&amp;lt;/tt&amp;gt;)&lt;br /&gt;
* It doesn't work reliably, e.g., it may read out constant values (0,0). See [http://sourceforge.net/mailarchive/message.php?msg_id=15350314 here].&lt;br /&gt;
&lt;br /&gt;
To solve both problems, install the modified hdaps that is bundled with [[tp_smapi]].&lt;br /&gt;
&lt;br /&gt;
=== Harddisk Protection ===&lt;br /&gt;
As mentioned above, the hdaps kernel driver is only responsible for reading the accelerometer data and exporting it through the sysfs interface. In order to use this information to protect the disk, some additional steps are required.&lt;br /&gt;
&lt;br /&gt;
See [[How to protect the harddisk through APS]].&lt;br /&gt;
&lt;br /&gt;
=== Input device support ===&lt;br /&gt;
In more recent versions of the Linux kernel, the hdaps exports event devices with the accelerometer data.  These devices can be used as-is by some programs (e.g. hdapsd), but for most they must be handled by the additional kernel module &amp;lt;code&amp;gt;joydev&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
When both modules are loaded, joydev will provide standard joystick device emulation for hdaps (standard hdaps exports just one joystick device.  enhanced hdaps from tp_smapi will export two due to issues still unsolved on joydev, but the second one must not be used as a joystick).&lt;br /&gt;
&lt;br /&gt;
{{WARN|Letting a program bind to these joystick devices can cause surprising results if you are not aware of it. e.g.: mplayer can act quite strangely.  Also, letting a program bind to the second joystick device from enhanced HDAPS is guaranteed to be trouble}}&lt;br /&gt;
&lt;br /&gt;
Udev can be used to create device nodes in /dev for use by user space programs that access the joystick, and to set appropriate permissions.&lt;br /&gt;
&lt;br /&gt;
In order for non-root users to access these device files, their permissions must be tweaked a little through an appropriate udev rule and corresponding &amp;quot;joy&amp;quot; group.&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|addgroup joy}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{cmdroot|adduser &amp;lt;you&amp;gt; joy}}&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;# echo 'SUBSYSTEM==&amp;quot;input&amp;quot;, KERNEL==&amp;quot;js*&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;joy&amp;quot;' &amp;gt;&amp;gt; /etc/udev/hdaps-joy.rules&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{{cmdroot|ln -s ../hdaps-joy.rules /etc/udev/rules.d/z60_hdaps-joy.rules}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Programs you can use to test and calibrate the device files include &amp;lt;code&amp;gt;jscalibrator&amp;lt;/code&amp;gt; (gui) and &amp;lt;code&amp;gt;jstest&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;jscal&amp;lt;/code&amp;gt; (cli) packaged together (at least in Debian) simply as &amp;quot;joystick&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
====Disk head parking====&lt;br /&gt;
You will need the kernel patch below and the hdapsd userspace daemon. The GUI monitoring is optional.&lt;br /&gt;
&lt;br /&gt;
See [[How to protect the harddisk through APS]] for more information.&lt;br /&gt;
&lt;br /&gt;
===== Kernel patch =====&lt;br /&gt;
Due to significant changes in the way the libata module which handles disk i/o, applying any of the currently available patches to kernel 2.6.24 will intermittently cause system hangs when the queue is frozen (i.e., the heads are parked). It is recommended either that you stay at kernel [http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.17.tar.bz2 2.6.23] or do without disk protection in 2.6.24 until the kinks have been worked out. There has been significant work on the part of [http://lkml.org/lkml/2008/2/25/478 Elias Oltmanns], author of the more recent patches, to get this worked out and eventually get shock protection built into the mainline kernel.&lt;br /&gt;
&lt;br /&gt;
Below are some links to patches for various Linux kernel versions. As noted above, your mileage may vary with the 2.6.24-rc3 patch as it was after this release candidate that things stopped working nicely. &lt;br /&gt;
{{HINT|To apply a patch, change to the root directory of the kernel tree and run&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;patch -p1 -l &amp;lt; hdaps_xx.patch&amp;lt;/code&amp;gt;}}&lt;br /&gt;
* New interface (requires hdapsd dated 2008-10-04 or newer)&lt;br /&gt;
** Expected in mainline kernel 2.6.28&lt;br /&gt;
** [http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1393 disk-protect patch for kernel 2.6.27.2]&lt;br /&gt;
* Old interface&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1324/raw disk-protect patch for kernel 2.6.26]&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1297/raw disk-protect patch for kernel 2.6.26-rc9]&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1245/raw disk-protect patch for kernel 2.6.25-rc9] &amp;amp;mdash; may cause system locks (same as patch for 2.6.24-rc3). Apply [http://mailman.linux-thinkpad.org/pipermail/linux-thinkpad/2008-February/042226.html this fix] before.&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1094 disk-protect patch for kernel 2.6.24-rc3] &amp;amp;mdash; may cause system locks (see [http://marc.info/?l=linux-thinkpad&amp;amp;m=120259594519907 here], [http://marc.info/?l=linux-thinkpad&amp;amp;m=120259929023300 here] and try [http://mailman.linux-thinkpad.org/pipermail/linux-thinkpad/2008-February/042226.html this fix])&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1092 disk-protect patch for 2.6.23.8] + [http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1113 error check fix]&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1077 disk-protect patch for 2.6.22.9 and 2.6.23-rc9]&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/993 disk-protect patch for 2.6.20-rc6]&lt;br /&gt;
* Ancient interface&lt;br /&gt;
**[http://www.nabble.com/attachment/9047418/0/hdaps_protect-2.6.20.patch.bz2 Latest sata/ide disk protection patch for 2.6.20]&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.kernel/470413 Latest sata/ide disk protection patch for 2.6.19-rc6]&lt;br /&gt;
**[http://www.dresco.co.uk/hdaps/hdaps_protect-2.6.18.3-2.patch Latest sata/ide disk protection patch for 2.6.18.3]&lt;br /&gt;
**[http://exitzero.de/t41p-configs/hdaps_protect-2.6.17.1-20060625.patch Untested patch for 2.6.17.1]: see [http://thread.gmane.org/gmane.linux.drivers.hdaps.devel/708/focus=708]&lt;br /&gt;
**[http://whoopie.gmxhome.de/linux/patches/2.6.17.14-tj/03-hdaps_protect-20060430-for-2.6.17-tj.patch Latest sata/ide disk protection patch for use with the libata hotplug 2.6.17.4 patches] - See [[How_to_hotswap_UltraBay_devices]]&lt;br /&gt;
**[http://whoopie.gmxhome.de/linux/patches/2.6.16-tj/05-hdaps_protect-20060430-for-2.6.16-tj.patch Latest sata/ide disk protection patch for use with the libata hotplug 2.6.16.16 patches] - See [[How_to_hotswap_UltraBay_devices]]&lt;br /&gt;
**[http://www.dresco.co.uk/hdaps/hdaps_protect.20060430.patch Latest sata/ide disk protection patch for 2.6.16]&lt;br /&gt;
**[http://www.dresco.co.uk/hdaps/hdaps_protect.20060118.patch sata/ide disk protection patch for 2.6.15]&lt;br /&gt;
**[http://jenster.dyndns.org/files/blk_freeze-01-nodetection-for-2.6.15.patch disk park patch adapted for the t41p model] &amp;lt;tt&amp;gt; kernel 2.6.15 ([http://sourceforge.net/mailarchive/message.php?msg_id=13214288 capability detection disabled], no libata support)&amp;lt;/tt&amp;gt;&lt;br /&gt;
**[http://jenster.dyndns.org/files/blk_freeze-01-nodetection-for-2.6.14.patch disk park patch adapted for the t41p model] &amp;lt;tt&amp;gt; kernel 2.6.14 ([http://sourceforge.net/mailarchive/message.php?msg_id=13214288 capability detection disabled], no libata support)&amp;lt;/tt&amp;gt;&lt;br /&gt;
**[http://lwn.net/Articles/154923/ disk park patch] &amp;lt;tt&amp;gt;an experimental patch for parking the disk (Linux 2.6.14 for 2.6.15 see below)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Userspace daemon =====&lt;br /&gt;
*[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1372 Current version]&amp;lt;br&amp;gt;&lt;br /&gt;
This version optionally reduces timer interrupts (as measured by [[PowerTOP]]), and thereby reduces power consumption on modern (&amp;quot;tickless&amp;quot;) Linux kernels. Interrupt reduction requires the &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; kernel module from [[tp_smapi]] 0.32 or newer, and a udev rule. If these are not present, it will default to an older polling method that is slightly more power-hungry. The udev rule helps hdapsd find the input device, and on most distributions it can be created as follows:&lt;br /&gt;
 # echo 'KERNEL==&amp;quot;event[0-9]*&amp;quot;, ATTRS{phys}==&amp;quot;hdaps/input1&amp;quot;,ATTRS{modalias}==&amp;quot;input:b0019v1014p5054e4801-*&amp;quot;,SYMLINK+=&amp;quot;input/hdaps/accelerometer-event&amp;quot;' \&lt;br /&gt;
   &amp;gt; /etc/udev/rules.d/51-hdaps.rules&lt;br /&gt;
Then reboot or run {{cmdroot|/sbin/udevtrigger}}, and verify that the {{path|/dev/input/hdaps/accelerometer-event}} symlink exists.&lt;br /&gt;
&lt;br /&gt;
*[ftp://rohrmoser-engineering.de/pub Modified adaptive algorithm version] - uses a different (and potentially better) algorithm for the adaptive sensivity threshold.&lt;br /&gt;
&lt;br /&gt;
===== GUI monitoring =====&lt;br /&gt;
*[http://roy.marples.name/node/269 khdapmonitor] KDE System Tray Monitor&lt;br /&gt;
*[http://www.dresco.co.uk/hdaps/gnome-hdaps-applet-20060120.tar.gz gnome-hdaps-applet] visual display of disk protection status in gnome panel&lt;br /&gt;
*[http://www.kde-look.org/content/show.php/Applet+HDAPS?content=78387 applet_hdaps] KDE4 Plasmoid display disk protection status&lt;br /&gt;
*[http://awn.planetblur.org/index.php?shard=forum&amp;amp;action=g_reply&amp;amp;ID=1916&amp;amp;page=1&amp;amp;isLive=true ThinkHDAPS] Avant Window Manager applet for disk protection status&lt;br /&gt;
&lt;br /&gt;
====Security &amp;amp; safety====&lt;br /&gt;
*[[Script for theft alarm using HDAPS]]&lt;br /&gt;
&lt;br /&gt;
====Tilt monitoring====&lt;br /&gt;
*[http://www.mulliner.org/collin/gkibm-acpi.php gkhdaps] &amp;lt;tt&amp;gt;a GKrellM applet displaying tilt data&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[https://sourceforge.net/project/showfiles.php?group_id=138242 gnome-tilt] &amp;lt;tt&amp;gt;a gnome applet showing tilt data&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Visualisation of ThinkPad orientation====&lt;br /&gt;
*[https://sourceforge.net/project/showfiles.php?group_id=138242 hdaps-gl] &amp;lt;tt&amp;gt;a little app animating a 3D-ThinkPad&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[https://sourceforge.net/project/showfiles.php?group_id=138242 hdapsgl-applet] &amp;lt;tt&amp;gt; a GNOME applet animating a 3D-ThinkPad&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[https://sourceforge.net/project/showfiles.php?group_id=138242 wmadhps] &amp;lt;tt&amp;gt;a WindowMaker DockApp animating a 3D-ThinkPad&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[http://www.cs.cmu.edu/~ecc/gyro.tar.gz OpenGL gyroscope hack] &amp;lt;tt&amp;gt;keeps your display levelled when tilting the ThinkPad&amp;lt;/tt&amp;gt; (warning: [http://en.wikipedia.org/wiki/Tarbomb uncompresses in the current directory]!)&lt;br /&gt;
&lt;br /&gt;
====Games====&lt;br /&gt;
*[http://icculus.org/neverball/ Neverball] is quite fun with HDAPS. (You'll need to have the HDAPS joystick device)&lt;br /&gt;
*Turn your ThinkPad into a Jedi Weapon (hey, it [http://isnoop.net/blog/2006/05/20/macsaber-turn-your-mac-into-a-jedi-weapon works for Mac laptops])&lt;br /&gt;
&lt;br /&gt;
====Other====&lt;br /&gt;
&lt;br /&gt;
*[http://blog.micampe.it/articles/2006/06/04/here-comes-the-smackpad smack.py] - switch workspace by smacking your laptop, inspired by the [http://blog.medallia.com/2006/05/smacbook_pro.html SmackBook] (uses EWMH)&lt;br /&gt;
**an [http://weblogs.mozillazine.org/gerv/archives/2006/09/stablilised_smackpad.html improved version] adds stabilization (by comparing smacks to previous ones, uses EWMH)&lt;br /&gt;
**another [http://pberndt.com/Programme/Linux/pyhdaps/index.html approach] adds stabilization (by requiring a certain type of value deflection, uses xmacroplay)&lt;br /&gt;
**[http://www.gnome.org/~fherrera/gtollina.c GTollina] is another smack program for use with compiz (video [http://www.gnome.org/~fherrera/blog/gtollina.html here]).&lt;br /&gt;
*[http://blog.odonnell.nu/61.html xmms-smack.py] - move through your xmms playlist by smacking, based on the two smack scripts above.&lt;br /&gt;
*[http://www-128.ibm.com/developerworks/linux/library/l-knockage.html?ca=dgr-lnxw02aKnockBasedCommands KnockBasedCommands] - Execute commands by tapping your laptop.&lt;br /&gt;
*[http://people.ksp.sk/~mic/?menu=32&amp;amp;file=rotate.py rotate.py] - rotate desktop by turning your laptop&lt;br /&gt;
*[[hdaps_ess|Enhanced smack script]] ess.py is based on the smacks scripts listed in this section. It includes stabilization, a lot of tuning options and it handles both axis (at best you should be able to map 8 commands, even if it is possible I was not able to do so). It is not perfect but on my Thinkpad it works better than the other scripts.&lt;br /&gt;
&lt;br /&gt;
=== Interesting links related to this project ===&lt;br /&gt;
* [https://lists.sourceforge.net/lists/listinfo/hdaps-devel HDAPS mailinglist and its archive]&lt;br /&gt;
* #hdaps channel on irc.freenode.org&lt;br /&gt;
* [https://sourceforge.net/projects/hdaps/ hdaps projects] overview of userspace programs using hdaps&lt;br /&gt;
* [http://www-307.ibm.com/pc/support/site.wss/document.do?lndocid=TPAD-HDFIRM IBM ThinkPads hardware drive firmware site]&lt;br /&gt;
* [http://www.paul.sladen.org/thinkpad-r31/accelerometer.html http://www.paul.sladen.org/thinkpad-r31/accelerometer/]&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=119845 Gentoo ebuild for hdaps driver and daemon including a initscript*&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137345 Gentoo ebuild for gkhdaps gkrell plugin&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137350 Gentoo ebuild for hdaps-gl application&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137351 Gentoo ebuild for gnome hdapsgl-applet&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137352 Gentoo ebuild for gnome tilt application&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137353 Gentoo ebuild for wmhdaps&lt;br /&gt;
* http://gentoo.o0o.nu Gentoo sectools overlay with fresh hdaps-related ebuilds and patches&lt;br /&gt;
* [http://lenovoblogs.com/insidethebox/?p=71 Why the ThinkPad accelerometer is only 2D] - explanation by Lenovo&lt;br /&gt;
&lt;br /&gt;
[[Category:R50]] [[Category:R50p]] [[Category:R51]] [[Category:R52]] [[Category:R60]] [[Category:T41]] [[Category:T41p]] [[Category:T42]] [[Category:T42p]] [[Category:T43]] [[Category:T43p]] [[Category:T60]] [[Category:T60p]] [[Category:T61]] [[Category:X40]] [[Category:X41]] [[Category:X41 Tablet]] [[Category:X60]] [[Category:X60s]] [[Category:Z60m]] [[Category:Z60t]] [[Category:Drivers]] [[Category:Z61m]]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=HDAPS&amp;diff=39157</id>
		<title>HDAPS</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=HDAPS&amp;diff=39157"/>
		<updated>2008-10-21T09:41:10Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: revert changes, everything is already there, just some lines below&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;
=== HDAPS - IBM Active Protection System Linux Driver ===&lt;br /&gt;
This is the Linux driver for monitoring the accelerometer known as [[Active Protection System|IBM Active Protection System]].&lt;br /&gt;
&lt;br /&gt;
The driver only enables reading of the acceleration data. It does '''not''' perform [[#Harddisk Protection|automatic disk head parking]]. But there are already some other useful [[#Applications|applications]] for HDAPS, using the {{path|/sys}} interface it provides.&lt;br /&gt;
&lt;br /&gt;
{{WARN|There are two versions of the hdaps driver, one in the Linux kernel mainline, and another provided by [[tp_smapi]].  '''Use of the tp_smapi version of hdaps is strongly recommended by the current hdaps developers.'''}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
*provides accelerometer values via sysfs&lt;br /&gt;
*provides a joystick type input device&lt;br /&gt;
&lt;br /&gt;
=== Project Homepage / Availability ===&lt;br /&gt;
*[http://hdaps.sourceforge.net/ Project Homepage]&lt;br /&gt;
*The driver is included in the 2.6-mm series of kernels since August, 26th 2005.&lt;br /&gt;
*The driver is now in the mainline (2.6.14).&lt;br /&gt;
*The [[tp_smapi]] package contains some patches to this driver. These are necessary for some recent models, and recommended for all.&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
A driver is included in recent Linux kernels and is actively maintained, but it is very inferior to the driver in tp_smapi (which provides its own hdaps module).&lt;br /&gt;
&lt;br /&gt;
=== How to install the driver ===&lt;br /&gt;
Recent Linux kernels include the &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; driver. However, the driver in the mainline Linux kernel has two problems with recent models:&lt;br /&gt;
* It doesn't whitelist them (you have to edit hdaps_init() in drivers/hwmon/hdaps.c to include a line like &amp;lt;tt&amp;gt;HDAPS_DMI_MATCH_LENOVO(&amp;quot;ThinkPad T60&amp;quot;)&amp;lt;/tt&amp;gt;)&lt;br /&gt;
* It doesn't work reliably, e.g., it may read out constant values (0,0). See [http://sourceforge.net/mailarchive/message.php?msg_id=15350314 here].&lt;br /&gt;
&lt;br /&gt;
To solve both problems, install the modified hdaps that is bundled with [[tp_smapi]].&lt;br /&gt;
&lt;br /&gt;
=== Harddisk Protection ===&lt;br /&gt;
As mentioned above, the hdaps kernel driver is only responsible for reading the accelerometer data and exporting it through the sysfs interface. In order to use this information to protect the disk, some additional steps are required.&lt;br /&gt;
&lt;br /&gt;
See [[How to protect the harddisk through APS]].&lt;br /&gt;
&lt;br /&gt;
=== Input device support ===&lt;br /&gt;
In more recent versions of the Linux kernel, the hdaps exports event devices with the accelerometer data.  These devices can be used as-is by some programs (e.g. hdapsd), but for most they must be handled by the additional kernel module &amp;lt;code&amp;gt;joydev&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
When both modules are loaded, joydev will provide standard joystick device emulation for hdaps (standard hdaps exports just one joystick device.  enhanced hdaps from tp_smapi will export two due to issues still unsolved on joydev, but the second one must not be used as a joystick).&lt;br /&gt;
&lt;br /&gt;
{{WARN|Letting a program bind to these joystick devices can cause surprising results if you are not aware of it. e.g.: mplayer can act quite strangely.  Also, letting a program bind to the second joystick device from enhanced HDAPS is guaranteed to be trouble}}&lt;br /&gt;
&lt;br /&gt;
Udev can be used to create device nodes in /dev for use by user space programs that access the joystick, and to set appropriate permissions.&lt;br /&gt;
&lt;br /&gt;
In order for non-root users to access these device files, their permissions must be tweaked a little through an appropriate udev rule and corresponding &amp;quot;joy&amp;quot; group.&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|addgroup joy}}&amp;lt;br&amp;gt;&lt;br /&gt;
{{cmdroot|adduser &amp;lt;you&amp;gt; joy}}&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;# echo 'SUBSYSTEM==&amp;quot;input&amp;quot;, KERNEL==&amp;quot;js*&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;joy&amp;quot;' &amp;gt;&amp;gt; /etc/udev/hdaps-joy.rules&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
{{cmdroot|ln -s ../hdaps-joy.rules /etc/udev/rules.d/z60_hdaps-joy.rules}}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Programs you can use to test and calibrate the device files include &amp;lt;code&amp;gt;jscalibrator&amp;lt;/code&amp;gt; (gui) and &amp;lt;code&amp;gt;jstest&amp;lt;/code&amp;gt;/&amp;lt;code&amp;gt;jscal&amp;lt;/code&amp;gt; (cli) packaged together (at least in Debian) simply as &amp;quot;joystick&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
====Disk head parking====&lt;br /&gt;
You will need the kernel patch below and the hdapsd userspace daemon. The GUI monitoring is optional.&lt;br /&gt;
&lt;br /&gt;
See [[How to protect the harddisk through APS]] for more information.&lt;br /&gt;
&lt;br /&gt;
===== Kernel patch =====&lt;br /&gt;
Due to significant changes in the way the libata module which handles disk i/o, applying any of the currently available patches to kernel 2.6.24 will intermittently cause system hangs when the queue is frozen (i.e., the heads are parked). It is recommended either that you stay at kernel [http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.23.17.tar.bz2 2.6.23] or do without disk protection in 2.6.24 until the kinks have been worked out. There has been significant work on the part of [http://lkml.org/lkml/2008/2/25/478 Elias Oltmanns], author of the more recent patches, to get this worked out and eventually get shock protection built into the mainline kernel.&lt;br /&gt;
&lt;br /&gt;
Below are some links to patches for various Linux kernel versions. As noted above, your mileage may vary with the 2.6.24-rc3 patch as it was after this release candidate that things stopped working nicely. &lt;br /&gt;
{{HINT|To apply a patch, change to the root directory of the kernel tree and run&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;patch -p1 -l &amp;lt; hdaps_xx.patch&amp;lt;/code&amp;gt;}}&lt;br /&gt;
* New interface (requires hdapsd dated 2008-10-04 or newer)&lt;br /&gt;
** Expected in mainline kernel 2.6.28&lt;br /&gt;
** [http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1379/raw disk-protect patch for kernel 2.6.27-rc8]&lt;br /&gt;
* Old interface&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1324/raw disk-protect patch for kernel 2.6.26]&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1297/raw disk-protect patch for kernel 2.6.26-rc9]&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1245/raw disk-protect patch for kernel 2.6.25-rc9] &amp;amp;mdash; may cause system locks (same as patch for 2.6.24-rc3). Apply [http://mailman.linux-thinkpad.org/pipermail/linux-thinkpad/2008-February/042226.html this fix] before.&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1094 disk-protect patch for kernel 2.6.24-rc3] &amp;amp;mdash; may cause system locks (see [http://marc.info/?l=linux-thinkpad&amp;amp;m=120259594519907 here], [http://marc.info/?l=linux-thinkpad&amp;amp;m=120259929023300 here] and try [http://mailman.linux-thinkpad.org/pipermail/linux-thinkpad/2008-February/042226.html this fix])&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1092 disk-protect patch for 2.6.23.8] + [http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1113 error check fix]&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1077 disk-protect patch for 2.6.22.9 and 2.6.23-rc9]&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/993 disk-protect patch for 2.6.20-rc6]&lt;br /&gt;
* Ancient interface&lt;br /&gt;
**[http://www.nabble.com/attachment/9047418/0/hdaps_protect-2.6.20.patch.bz2 Latest sata/ide disk protection patch for 2.6.20]&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.kernel/470413 Latest sata/ide disk protection patch for 2.6.19-rc6]&lt;br /&gt;
**[http://www.dresco.co.uk/hdaps/hdaps_protect-2.6.18.3-2.patch Latest sata/ide disk protection patch for 2.6.18.3]&lt;br /&gt;
**[http://exitzero.de/t41p-configs/hdaps_protect-2.6.17.1-20060625.patch Untested patch for 2.6.17.1]: see [http://thread.gmane.org/gmane.linux.drivers.hdaps.devel/708/focus=708]&lt;br /&gt;
**[http://whoopie.gmxhome.de/linux/patches/2.6.17.14-tj/03-hdaps_protect-20060430-for-2.6.17-tj.patch Latest sata/ide disk protection patch for use with the libata hotplug 2.6.17.4 patches] - See [[How_to_hotswap_UltraBay_devices]]&lt;br /&gt;
**[http://whoopie.gmxhome.de/linux/patches/2.6.16-tj/05-hdaps_protect-20060430-for-2.6.16-tj.patch Latest sata/ide disk protection patch for use with the libata hotplug 2.6.16.16 patches] - See [[How_to_hotswap_UltraBay_devices]]&lt;br /&gt;
**[http://www.dresco.co.uk/hdaps/hdaps_protect.20060430.patch Latest sata/ide disk protection patch for 2.6.16]&lt;br /&gt;
**[http://www.dresco.co.uk/hdaps/hdaps_protect.20060118.patch sata/ide disk protection patch for 2.6.15]&lt;br /&gt;
**[http://jenster.dyndns.org/files/blk_freeze-01-nodetection-for-2.6.15.patch disk park patch adapted for the t41p model] &amp;lt;tt&amp;gt; kernel 2.6.15 ([http://sourceforge.net/mailarchive/message.php?msg_id=13214288 capability detection disabled], no libata support)&amp;lt;/tt&amp;gt;&lt;br /&gt;
**[http://jenster.dyndns.org/files/blk_freeze-01-nodetection-for-2.6.14.patch disk park patch adapted for the t41p model] &amp;lt;tt&amp;gt; kernel 2.6.14 ([http://sourceforge.net/mailarchive/message.php?msg_id=13214288 capability detection disabled], no libata support)&amp;lt;/tt&amp;gt;&lt;br /&gt;
**[http://lwn.net/Articles/154923/ disk park patch] &amp;lt;tt&amp;gt;an experimental patch for parking the disk (Linux 2.6.14 for 2.6.15 see below)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Userspace daemon =====&lt;br /&gt;
*[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1372 Current version]&amp;lt;br&amp;gt;&lt;br /&gt;
This version optionally reduces timer interrupts (as measured by [[PowerTOP]]), and thereby reduces power consumption on modern (&amp;quot;tickless&amp;quot;) Linux kernels. Interrupt reduction requires the &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; kernel module from [[tp_smapi]] 0.32 or newer, and a udev rule. If these are not present, it will default to an older polling method that is slightly more power-hungry. The udev rule helps hdapsd find the input device, and on most distributions it can be created as follows:&lt;br /&gt;
 # echo 'KERNEL==&amp;quot;event[0-9]*&amp;quot;, ATTRS{phys}==&amp;quot;hdaps/input1&amp;quot;,ATTRS{modalias}==&amp;quot;input:b0019v1014p5054e4801-*&amp;quot;,SYMLINK+=&amp;quot;input/hdaps/accelerometer-event&amp;quot;' \&lt;br /&gt;
   &amp;gt; /etc/udev/rules.d/51-hdaps.rules&lt;br /&gt;
Then reboot or run {{cmdroot|/sbin/udevtrigger}}, and verify that the {{path|/dev/input/hdaps/accelerometer-event}} symlink exists.&lt;br /&gt;
&lt;br /&gt;
*[ftp://rohrmoser-engineering.de/pub Modified adaptive algorithm version] - uses a different (and potentially better) algorithm for the adaptive sensivity threshold.&lt;br /&gt;
&lt;br /&gt;
===== GUI monitoring =====&lt;br /&gt;
*[http://roy.marples.name/node/269 khdapmonitor] KDE System Tray Monitor&lt;br /&gt;
*[http://www.dresco.co.uk/hdaps/gnome-hdaps-applet-20060120.tar.gz gnome-hdaps-applet] visual display of disk protection status in gnome panel&lt;br /&gt;
*[http://www.kde-look.org/content/show.php/Applet+HDAPS?content=78387 applet_hdaps] KDE4 Plasmoid display disk protection status&lt;br /&gt;
*[http://awn.planetblur.org/index.php?shard=forum&amp;amp;action=g_reply&amp;amp;ID=1916&amp;amp;page=1&amp;amp;isLive=true ThinkHDAPS] Avant Window Manager applet for disk protection status&lt;br /&gt;
&lt;br /&gt;
====Security &amp;amp; safety====&lt;br /&gt;
*[[Script for theft alarm using HDAPS]]&lt;br /&gt;
&lt;br /&gt;
====Tilt monitoring====&lt;br /&gt;
*[http://www.mulliner.org/collin/gkibm-acpi.php gkhdaps] &amp;lt;tt&amp;gt;a GKrellM applet displaying tilt data&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[https://sourceforge.net/project/showfiles.php?group_id=138242 gnome-tilt] &amp;lt;tt&amp;gt;a gnome applet showing tilt data&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Visualisation of ThinkPad orientation====&lt;br /&gt;
*[https://sourceforge.net/project/showfiles.php?group_id=138242 hdaps-gl] &amp;lt;tt&amp;gt;a little app animating a 3D-ThinkPad&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[https://sourceforge.net/project/showfiles.php?group_id=138242 hdapsgl-applet] &amp;lt;tt&amp;gt; a GNOME applet animating a 3D-ThinkPad&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[https://sourceforge.net/project/showfiles.php?group_id=138242 wmadhps] &amp;lt;tt&amp;gt;a WindowMaker DockApp animating a 3D-ThinkPad&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[http://www.cs.cmu.edu/~ecc/gyro.tar.gz OpenGL gyroscope hack] &amp;lt;tt&amp;gt;keeps your display levelled when tilting the ThinkPad&amp;lt;/tt&amp;gt; (warning: [http://en.wikipedia.org/wiki/Tarbomb uncompresses in the current directory]!)&lt;br /&gt;
&lt;br /&gt;
====Games====&lt;br /&gt;
*[http://icculus.org/neverball/ Neverball] is quite fun with HDAPS. (You'll need to have the HDAPS joystick device)&lt;br /&gt;
*Turn your ThinkPad into a Jedi Weapon (hey, it [http://isnoop.net/blog/2006/05/20/macsaber-turn-your-mac-into-a-jedi-weapon works for Mac laptops])&lt;br /&gt;
&lt;br /&gt;
====Other====&lt;br /&gt;
&lt;br /&gt;
*[http://blog.micampe.it/articles/2006/06/04/here-comes-the-smackpad smack.py] - switch workspace by smacking your laptop, inspired by the [http://blog.medallia.com/2006/05/smacbook_pro.html SmackBook] (uses EWMH)&lt;br /&gt;
**an [http://weblogs.mozillazine.org/gerv/archives/2006/09/stablilised_smackpad.html improved version] adds stabilization (by comparing smacks to previous ones, uses EWMH)&lt;br /&gt;
**another [http://pberndt.com/Programme/Linux/pyhdaps/index.html approach] adds stabilization (by requiring a certain type of value deflection, uses xmacroplay)&lt;br /&gt;
**[http://www.gnome.org/~fherrera/gtollina.c GTollina] is another smack program for use with compiz (video [http://www.gnome.org/~fherrera/blog/gtollina.html here]).&lt;br /&gt;
*[http://blog.odonnell.nu/61.html xmms-smack.py] - move through your xmms playlist by smacking, based on the two smack scripts above.&lt;br /&gt;
*[http://www-128.ibm.com/developerworks/linux/library/l-knockage.html?ca=dgr-lnxw02aKnockBasedCommands KnockBasedCommands] - Execute commands by tapping your laptop.&lt;br /&gt;
*[http://people.ksp.sk/~mic/?menu=32&amp;amp;file=rotate.py rotate.py] - rotate desktop by turning your laptop&lt;br /&gt;
*[[hdaps_ess|Enhanced smack script]] ess.py is based on the smacks scripts listed in this section. It includes stabilization, a lot of tuning options and it handles both axis (at best you should be able to map 8 commands, even if it is possible I was not able to do so). It is not perfect but on my Thinkpad it works better than the other scripts.&lt;br /&gt;
&lt;br /&gt;
=== Interesting links related to this project ===&lt;br /&gt;
* [https://lists.sourceforge.net/lists/listinfo/hdaps-devel HDAPS mailinglist and its archive]&lt;br /&gt;
* #hdaps channel on irc.freenode.org&lt;br /&gt;
* [https://sourceforge.net/projects/hdaps/ hdaps projects] overview of userspace programs using hdaps&lt;br /&gt;
* [http://www-307.ibm.com/pc/support/site.wss/document.do?lndocid=TPAD-HDFIRM IBM ThinkPads hardware drive firmware site]&lt;br /&gt;
* [http://www.paul.sladen.org/thinkpad-r31/accelerometer.html http://www.paul.sladen.org/thinkpad-r31/accelerometer/]&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=119845 Gentoo ebuild for hdaps driver and daemon including a initscript*&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137345 Gentoo ebuild for gkhdaps gkrell plugin&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137350 Gentoo ebuild for hdaps-gl application&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137351 Gentoo ebuild for gnome hdapsgl-applet&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137352 Gentoo ebuild for gnome tilt application&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137353 Gentoo ebuild for wmhdaps&lt;br /&gt;
* http://gentoo.o0o.nu Gentoo sectools overlay with fresh hdaps-related ebuilds and patches&lt;br /&gt;
* [http://lenovoblogs.com/insidethebox/?p=71 Why the ThinkPad accelerometer is only 2D] - explanation by Lenovo&lt;br /&gt;
&lt;br /&gt;
[[Category:R50]] [[Category:R50p]] [[Category:R51]] [[Category:R52]] [[Category:R60]] [[Category:T41]] [[Category:T41p]] [[Category:T42]] [[Category:T42p]] [[Category:T43]] [[Category:T43p]] [[Category:T60]] [[Category:T60p]] [[Category:T61]] [[Category:X40]] [[Category:X41]] [[Category:X41 Tablet]] [[Category:X60]] [[Category:X60s]] [[Category:Z60m]] [[Category:Z60t]] [[Category:Drivers]] [[Category:Z61m]]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Category:R52&amp;diff=38666</id>
		<title>Category:R52</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Category:R52&amp;diff=38666"/>
		<updated>2008-08-22T11:37:39Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: Undo revision 36950 by Lithiumbattery (Talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 0; margin-right:10px; border: 1px solid #dfdfdf; padding: 0em 1em 1em 1em; background-color:#F8F8FF; align:right;&amp;quot;&amp;gt;&lt;br /&gt;
=== ThinkPad R52 ===&lt;br /&gt;
This page gives an overview of all ThinkPad R52 related topics.&lt;br /&gt;
&lt;br /&gt;
Machine Type: 1858, 1859, 1860, 1861, 1862, 1863, 1958 (Intel graphics)&amp;lt;br&amp;gt;&lt;br /&gt;
Machine Type: 1846, 1847, 1848, 1849, 1850, 1870 (ATI graphics)&lt;br /&gt;
==== Standard Features ====&lt;br /&gt;
* One of the following processors:&lt;br /&gt;
** [[Intel Celeron M]] 1.3, 1.4 or 1.5 GHz&lt;br /&gt;
** [[Intel Pentium M (Dothan)]] 1.73, 1.86 or 2.0 GHz&lt;br /&gt;
* One of the following video adapters:&lt;br /&gt;
** [[Intel Graphics Media Accelerator 900]] ([http://www-307.ibm.com/pc/support/site.wss/document.do?sitestyle=lenovo&amp;amp;lndocid=MIGR-58833#vid no dvi docking support])&lt;br /&gt;
** [[ATI Mobility Radeon X300]] with 32 or 64 MB&lt;br /&gt;
* One of the following displays:&lt;br /&gt;
** 14.1&amp;quot; TFT display with 1024x768 resolution&lt;br /&gt;
** 15.0&amp;quot; TFT display with 1024x768 resolution&lt;br /&gt;
** 15.0&amp;quot; TFT display with 1400x1050 resolution&lt;br /&gt;
* 256, 512 MB or 1 GB [[PC2-4200]] memory standard&lt;br /&gt;
* 40, 60, 80 or 100 GB IDE HDD&lt;br /&gt;
* [[AD1981B]] AC'97 Audio controller&lt;br /&gt;
* [[UltraBay|UltraBay Enhanced]] with the following:&lt;br /&gt;
** CD-ROM drive&lt;br /&gt;
** CD-RW/DVD-ROM Combo drive&lt;br /&gt;
** DVD±RW drive&lt;br /&gt;
* [[Ethernet Controllers#Broadcom Gigabit (10/100/1000)|Broadcom 10/100/1000]] Ethernet&lt;br /&gt;
* [[CDC slot]] with one of the following:&lt;br /&gt;
** [[IBM Integrated 56K Modem (MDC-2)]]&lt;br /&gt;
** [[IBM Integrated Bluetooth IV with 56K Modem (BMDC-3)]]&lt;br /&gt;
* [[MiniPCI slot]] with one of the following:&lt;br /&gt;
** none (open)&lt;br /&gt;
** [[Intel PRO/Wireless 2200BG Mini-PCI Adapter]]&lt;br /&gt;
** [[Intel PRO/Wireless 2915ABG Mini-PCI Adapter]]&lt;br /&gt;
* [[CardBus slot]] (Type 2)&lt;br /&gt;
* [[ExpressCard slot|ExpressCard/54 slot]]&lt;br /&gt;
* [[Embedded Security Subsystem|IBM Embedded Security Subsystem 2.0]]&lt;br /&gt;
* [[Active Protection System|IBM Active Protection System]]&lt;br /&gt;
* FireWire (IEEE1394) on select systems&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
[[image:ThinkPadR50.jpg|ThinkPad R52]]&lt;br /&gt;
|}&lt;br /&gt;
* [ftp://ftp.software.ibm.com/pc/pccbbs/mobiles_pdf/39t2462.pdf ThinkPad R50e, R51e, R52 - Hardware Maintenance Manual (August 2005)] (4,398,428  	 Bytes)&lt;br /&gt;
&lt;br /&gt;
[[Category:R Series]]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Category:T42&amp;diff=38665</id>
		<title>Category:T42</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Category:T42&amp;diff=38665"/>
		<updated>2008-08-22T11:35:57Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: remove two other spam links&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
[[image:ThinkPadT40.jpg|ThinkPad T42]]&lt;br /&gt;
|style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 0; margin-right:10px; border: 1px solid #dfdfdf; padding: 0em 1em 1em 1em; background-color:#F8F8FF; align:right;&amp;quot;&amp;gt;&lt;br /&gt;
=== ThinkPad T42 ===&lt;br /&gt;
This pages gives an overview of all ThinkPad T42 related topics.&lt;br /&gt;
&lt;br /&gt;
Machine Type: 2373, 2374, 2378, 2379&lt;br /&gt;
==== Features ====&lt;br /&gt;
* One of the following processors:&lt;br /&gt;
** [[Intel Pentium M (Banias)]] 1.5 GHz&lt;br /&gt;
** [[Intel Pentium M (Dothan)]] 1.6, 1.7, 1.8 or 2.0 GHz&lt;br /&gt;
* One of the following graphics controllers:&lt;br /&gt;
** [[ATI Mobility Radeon 7500]] with 32MB&lt;br /&gt;
** [[ATI Mobility Radeon 9000]] with 64MB&lt;br /&gt;
** [[ATI Mobility Radeon 9600]] with 64MB&lt;br /&gt;
* One of the following displays:&lt;br /&gt;
** 14.1&amp;quot; TFT display with 1024x768 resolution (XGA)&lt;br /&gt;
** 14.1&amp;quot; TFT display with 1400x1050 resolution (SXGA+)&lt;br /&gt;
** 15.0&amp;quot; TFT display with 1024x768 resolution (XGA)&lt;br /&gt;
** 15.0&amp;quot; TFT display with 1400x1050 resolution (SXGA+)&lt;br /&gt;
* 256, 512MB or 1GB [[PC2700]] memory standard, 2GB maximum&lt;br /&gt;
* 30, 40, 60 or 80GB HDD&lt;br /&gt;
* [[AD1981B]] AC'97 Audio controller&lt;br /&gt;
* [[Ethernet Controllers|Intel 10/100/1000 Ethernet]]&lt;br /&gt;
* [[UltraBay|UltraBay Slim]] with one of the following:&lt;br /&gt;
** DVD-ROM&lt;br /&gt;
** DVD-ROM/CD-RW Combo&lt;br /&gt;
** DVD-RW&lt;br /&gt;
* [[CDC slot]] with one of the following:&lt;br /&gt;
** [[IBM Integrated 56K Modem (MDC-2)]]&lt;br /&gt;
** [[IBM Integrated Bluetooth III with 56K Modem (BMDC-2)]]&lt;br /&gt;
* [[MiniPCI slot]] with one of the following:&lt;br /&gt;
** none (open)&lt;br /&gt;
** [[IBM 11b/g Wireless LAN Mini PCI Adapter]]&lt;br /&gt;
** [[IBM 11a/b/g Wireless LAN Mini PCI Adapter]]&lt;br /&gt;
** [[IBM 11a/b/g Wireless LAN Mini PCI Adapter II]]&lt;br /&gt;
** [[Intel PRO/Wireless LAN 2100 3B Mini PCI Adapter]]&lt;br /&gt;
** [[Intel PRO/Wireless 2200BG Mini-PCI Adapter]]&lt;br /&gt;
** [[Intel PRO/Wireless 2915ABG Mini-PCI Adapter]]&lt;br /&gt;
* (2) Type II [[CardBus slot|CardBus slots]] or (1) type III&lt;br /&gt;
* [[Embedded Security Subsystem|IBM Embedded Security Subsystem 2.0]]&lt;br /&gt;
* [[Active Protection System|IBM Active Protection System]]&lt;br /&gt;
* [[Integrated Fingerprint Reader]] on selected systems&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
* [ftp://ftp.software.ibm.com/pc/pccbbs/mobiles_pdf/13n6243.pdf ThinkPad T40/p, T41/p, T42/p - Hardware Maintenance Manual (April 2004)] (5,391,719 Bytes)&lt;br /&gt;
* [ftp://ftp.software.ibm.com/pc/pccbbs/mobiles_pdf/39t6192_01.pdf ThinkPad T40, T40p, T41, T41p, T42, T42p Hardware Maintenance Manual (February 2006)] (4,772,697 Bytes)&lt;br /&gt;
* [http://www-307.ibm.com/pc/support/site.wss/document.do?sitestyle=lenovo&amp;amp;lndocid=MIGR-50233 ThinkPad T40/p, T41/p, T42/p, T43/p Videos of Hardware removal and installation]&lt;br /&gt;
[[Category:T Series]]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=How_to_hotswap_Ultrabay_devices&amp;diff=37914</id>
		<title>How to hotswap Ultrabay devices</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=How_to_hotswap_Ultrabay_devices&amp;diff=37914"/>
		<updated>2008-06-05T06:45:39Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: /* using libata-acpi and udev */ the patches are included in 2.6.26-rc5&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following discusses hotswap (AKA &amp;quot;hotplug&amp;quot;) of devices in the [[UltraBay]].&lt;br /&gt;
&lt;br /&gt;
==Which driver?==&lt;br /&gt;
Since this may be confusing for SATA thinkpad owners, which are likely all the same for now, you have two busses and drivers: one SATA bus which works with the AHCI driver and one IDE bus for the ultrabay for which you should pick ata_piix (not piix/CONFIG_BLK_DEV_PIIX). See below for hotswapping.&lt;br /&gt;
&lt;br /&gt;
==Choosing the right driver: new style &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; vs old style &amp;lt;tt&amp;gt;piix/ide-disk&amp;lt;/tt&amp;gt;==&lt;br /&gt;
For ICH5,6,7,8, systems, whether you have an older IDE only thinkpad, or a newer thinkpad like the T/Z61p, there is one SATA bus for the system hard drive and an IDE bus for the ultrabay (even if your ultrabay happens to have a SATA drive, as it'll be seen as an IDE device), you'll have two drivers to chose from for your ultrabay: the old IDE/piix+ide-disk driver, and the newer PATA (=IDE) support of the newer ata_piix driver.&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;piix+ide-disk&amp;lt;/tt&amp;gt; are part of the old original IDE driver and your ultrabay device will show up as &amp;lt;tt&amp;gt;/dev/hda&amp;lt;/tt&amp;gt;.&amp;lt;BR&amp;gt;&amp;lt;tt&amp;gt;ata-piix&amp;lt;/tt&amp;gt; is the new SATA/PATA (=IDE) driver that will cause your ultrabay Hard Drive to show up as &amp;lt;tt&amp;gt;/dev/sda&amp;lt;/tt&amp;gt; and your CD-Rom as &amp;lt;tt&amp;gt;/dev/sr0&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The two things to know are: 1) you want to use ata_piix and 2) if you build piix in (CONFIG_BLK_DEV_PIIX enabled), or load it as a module, it'll take over the IDE bus and prevent ATA_PIIX from seeing your ultrabay. You don't want that.&lt;br /&gt;
&lt;br /&gt;
The longer details are:&amp;lt;BR&amp;gt;&lt;br /&gt;
You don't want the piix+ide-disk combo because even as modules, you will not be able to unload piix to reset the bus if there are issues swapping devices (with ata_piix, even if you forget to unregister a drive before removing it, you can unload the module and reload it to reset the bus after the fact if you have a newer thinkpad with a separate AHCI/SATA bus for the boot drive).&lt;br /&gt;
&lt;br /&gt;
As for hotswap, with piix+ide-disk, you can read the section below, but after more than one day of trying on 2.6.22.15 (as piix+ide-disk was taking over my IDE bus, and stopping me from using ata_piix before I removed it), I was not able to get hotswapping to work with piix+ide-disk (lt_hotswap would not even build on 2.6.22.15).&lt;br /&gt;
&lt;br /&gt;
hotswap just works with ata_pixx on 2.6.22, and reportedly with anything newer than 2.6.18, so you want to get rid of piix+ide-disk.&lt;br /&gt;
There are several ways to do that:&lt;br /&gt;
* if piix is built in your kernel (CONFIG_BLK_DEV_PIIX):&lt;br /&gt;
** rebuild your kernel with CONFIG_BLK_DEV_PIIX turned off.&lt;br /&gt;
** if you don't want to rebuild your kernel, try disabling the IDE bus grabbing by that driver with &amp;lt;tt&amp;gt;ide0=noprobe hda=noprobe hdb=noprobe&amp;lt;/tt&amp;gt; in your grub/lilo config (adjust the drive letters as appropriate, but note that this did not work for me on 2.6.22.15: the drive didn't show up on the piix bus, but it didn't show up on the ata_piix bus either).&lt;br /&gt;
* if piix is built in as a module&lt;br /&gt;
** you can move out the module in {{path|/lib/modules/ver/kernel/drivers/ide/pci/piix.ko}} and reboot.&lt;br /&gt;
** or build a new kernel, again with CONFIG_BLK_DEV_PIIX turned off.&lt;br /&gt;
** or add &amp;lt;tt&amp;gt;options ide_core options=&amp;quot;ide0=noprobe hda=noprobe hdb=noprobe&amp;quot;&amp;lt;/tt&amp;gt; to your modprobe.conf is supposed to work too (but didn't work on 2.6.22.15, see comment above)&lt;br /&gt;
&lt;br /&gt;
Then, continue this document to see how to do hotswap with ata_piix (if you are lucky enough to have a newer SATA thinkpad where the ata_piix driver only runs the ultrabay, and you have a separate bus and ahci driver for your main drive, it is recommended to have ata_piix as a module (&amp;lt;tt&amp;gt;CONFIG_ATA_PIIX=m&amp;lt;/tt&amp;gt;) so that you can unload/reload it if your bus gets in a bad state after a failed hotswap)&lt;br /&gt;
&lt;br /&gt;
==When using the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver==&lt;br /&gt;
The following applies when using the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver, which is necessary for many recent ThinkPad models that use an [[Intel ICH6-M]] controller. See also [[Problems with SATA and Linux]]. &lt;br /&gt;
&lt;br /&gt;
Mainline kernels before 2.6.18 cannot reliably recognize newly (re-)inserted UltraBay drives without a reboot. There are experimental hotplug patches against pre-2.6.18 mainline kernels [http://home-tj.org/wiki/index.php/Libata-tj-stable here].&lt;br /&gt;
&lt;br /&gt;
* Available hotplug patches&lt;br /&gt;
**[http://home-tj.org/files/libata-tj-stable/libata-tj-2.6.16.16-20060512.tar.bz2 Patch tarball against 2.6.16.16] ([http://lwn.net/Articles/183407/ Announce])&lt;br /&gt;
**[http://home-tj.org/files/libata-tj-stable/libata-tj-2.6.17-20060625-1.tar.bz2 Patch tarball against 2.6.17/2.6.17.1] ([http://article.gmane.org/gmane.linux.ide/11598 Announce])&lt;br /&gt;
**[http://home-tj.org/files/libata-tj-stable/libata-tj-2.6.17.4-20060710.tar.bz2 Patch tarball against 2.6.17.4]&lt;br /&gt;
**[http://whoopie.gmxhome.de/linux/patches/2.6.17.14-tj/00-libata-tj-2.6.17.4-20060710.patch Patch against 2.6.17.14]&lt;br /&gt;
&lt;br /&gt;
* Confirmed to work on the following laptops, with bus the following ID &lt;br /&gt;
**ThinkPad {{T30}}&lt;br /&gt;
**ThinkPad {{T43}}, {{T43p}}&lt;br /&gt;
**ThinkPad {{R52}}&lt;br /&gt;
**ThinkPad {{T60}} ID=4&lt;br /&gt;
**ThinkPad {{T61}} ID=0&lt;br /&gt;
**ThinkPad {{Z61p}} ID=4 (0-3:ahci, 5-6: ata_piix)&lt;br /&gt;
ID will typically be 1 if you only have an IDE bus (0 is boot drive, 1 is ultrabay), and it'll be 4 if you have a SATA bus your system boots from (ID 0-3) and an IDE bus for your ultrabay (ID 4-5).&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note that even on a given laptop model the ID can vary depending on whether your kernel has drivers that configure your boot drive is using the old style IDE driver (which doesn't add IDs before your ultrabay), or whether your boot drive is using the new style driver (which  adds IDs before your ultrabay)&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hotplug just works with kernels newer than 2.6.18 ( or older kernels that were patched to support &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; hotplug (don't try it otherwise!))&amp;lt;BR&amp;gt;&lt;br /&gt;
First, it is recommended you find the right SCSI ID for your drive to hotswap and unregister it before removing it (this works with all recent mainline kernels):&lt;br /&gt;
 {{cmdroot|echo 1 &amp;gt; /sys/class/scsi_device/$ID:0:0:0/device/delete}} &lt;br /&gt;
 {{cmdroot|echo eject &amp;gt;  /proc/acpi/ibm/bay}}&lt;br /&gt;
The drive can now be ejected (without this, your IDE bus may complain if you just yank a drive, but you can usually recover by unloading/reloading the ata_piix module on a SATA laptop if your main drive is not on the ata_piix bus)&lt;br /&gt;
&lt;br /&gt;
You can then issue the following after inserting an UltraBay drive to rescan the port:&lt;br /&gt;
 {{cmdroot|echo 0 0 0 &amp;gt;  /sys/class/scsi_host/host$ID/scan}}&lt;br /&gt;
The inserted drive should now be recognized by the kernel, and appropriate {{path|/dev/*}} entries created automatically (e.g., by &amp;lt;tt&amp;gt;udev&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Ted T'so has also written this hotswap patch, which may or may not be needed for you, see [http://www.mail-archive.com/linux-acpi@vger.kernel.org/msg04716.html hotswap patch] and report back&lt;br /&gt;
&lt;br /&gt;
===Scripts for hotswapping===&lt;br /&gt;
&lt;br /&gt;
The following scripts and [[acpid]] daemon configuration files do the following:&lt;br /&gt;
* Automatically unmounts the relevant filesystems and power off the UltraBay when the UltraBay eject lever is released. Screams if some filesystem can't be unmounted.&lt;br /&gt;
* Rescans the UltraBay port when then UltraBay eject lever is pushed back in.&lt;br /&gt;
&lt;br /&gt;
They assumes you're using the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver with an appropriate kernel (see above).&lt;br /&gt;
&lt;br /&gt;
Create {{path|/usr/local/sbin/ultrabay_insert}} with permissions 755:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
echo 12 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
sync&lt;br /&gt;
echo 0 0 0 &amp;gt; /sys/class/scsi_host/host1/scan&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create {{path|/usr/local/sbin/ultrabay_eject}} with permissions 755:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
ULTRABAY_SYSDIR='/sys/class/scsi_device/1:0:0:0/device'&lt;br /&gt;
shopt -s nullglob&lt;br /&gt;
&lt;br /&gt;
# Umount the filesystem(s) backed by the given major:minor device(s)&lt;br /&gt;
unmount_rdev() { perl - &amp;quot;$@&amp;quot; &amp;lt;&amp;lt;'EOPERL'  # let's do it in Perl&lt;br /&gt;
	for $major_minor (@ARGV) {&lt;br /&gt;
		$major_minor =~ m/^(\d+):(\d+)$/ or die;&lt;br /&gt;
		push(@tgt_rdevs, ($1&amp;lt;&amp;lt;8)|$2);&lt;br /&gt;
	}&lt;br /&gt;
        # Sort by reverse length of mount point, to unmount sub-directories first&lt;br /&gt;
        open MOUNTS,&amp;quot;&amp;lt;/proc/mounts&amp;quot; or die &amp;quot;$!&amp;quot;;&lt;br /&gt;
        @mounts=sort { length($b-&amp;gt;[1]) &amp;lt;=&amp;gt; length($a-&amp;gt;[1]) } map { [ split ] } &amp;lt;MOUNTS&amp;gt;;&lt;br /&gt;
        close MOUNTS;&lt;br /&gt;
        foreach $m (@mounts) {&lt;br /&gt;
                ($dev,$dir)=@$m;&lt;br /&gt;
		next unless -b $dev;  $rdev=(stat($dev))[6];&lt;br /&gt;
		next unless grep($_==$rdev, @tgt_rdevs);&lt;br /&gt;
		system(&amp;quot;umount&amp;quot;,&amp;quot;-v&amp;quot;,&amp;quot;$dir&amp;quot;)==0  or  $bad=1;&lt;br /&gt;
	}&lt;br /&gt;
	exit 1 if $bad;&lt;br /&gt;
EOPERL&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Get the UltraBay's /dev/foo block device node&lt;br /&gt;
ultrabay_dev_node() {&lt;br /&gt;
	UDEV_PATH=&amp;quot;`readlink -e &amp;quot;$ULTRABAY_SYSDIR/block:&amp;quot;*`&amp;quot; || return 1&lt;br /&gt;
	UDEV_NAME=&amp;quot;`udevinfo -q name -p $UDEV_PATH`&amp;quot; || return 1&lt;br /&gt;
	echo /dev/$UDEV_NAME&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if [ -d $ULTRABAY_SYSDIR ]; then&lt;br /&gt;
	sync&lt;br /&gt;
	# Unmount filesystems backed by this device&lt;br /&gt;
	unmount_rdev `cat $ULTRABAY_SYSDIR/block\:*/dev     \&lt;br /&gt;
	                  $ULTRABAY_SYSDIR/block\:*/*/dev`  \&lt;br /&gt;
	|| {&lt;br /&gt;
		echo 10 &amp;gt; /proc/acpi/ibm/beep;  # error tone&lt;br /&gt;
		exit 1;&lt;br /&gt;
	}&lt;br /&gt;
        sync&lt;br /&gt;
        # Nicely power off the device&lt;br /&gt;
	DEVNODE=`ultrabay_dev_node` &amp;amp;&amp;amp; hdparm -Y $DEVNODE&lt;br /&gt;
        # Let HAL+KDE notice the unmount and let the disk spin down&lt;br /&gt;
	sleep 0.5&lt;br /&gt;
	# Unregister this SCSI device:&lt;br /&gt;
	sync&lt;br /&gt;
	echo 1 &amp;gt; $ULTRABAY_SYSDIR/delete&lt;br /&gt;
fi&lt;br /&gt;
sync&lt;br /&gt;
# Turn off power to the UltraBay:&lt;br /&gt;
if [ -d /sys/devices/platform/bay.0 ]; then&lt;br /&gt;
	echo 1 &amp;gt; /sys/devices/platform/bay.0/eject&lt;br /&gt;
elif [ -e /proc/acpi/ibm/bay ]; then&lt;br /&gt;
	echo eject &amp;gt; /proc/acpi/ibm/bay&lt;br /&gt;
fi&lt;br /&gt;
# Tell the user we're OK&lt;br /&gt;
echo 12 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/acpi/events/ultrabay-insert}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
event=ibm/bay MSTR 00000001 00000000&lt;br /&gt;
action=/usr/local/sbin/ultrabay_insert&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/acpi/events/ultrabay-eject}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
event=ibm/bay MSTR 00000003 00000000&lt;br /&gt;
action=/usr/local/sbin/ultrabay_eject&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Restart &amp;lt;tt&amp;gt;acpid&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===using the generic bay driver and udev===&lt;br /&gt;
&lt;br /&gt;
Starting from kernel 2.6.23-rc3, it's possible to use the generic &amp;lt;tt&amp;gt;bay&amp;lt;/tt&amp;gt; driver in combination with udev to hotswap. Please check if CONFIG_ACPI_BAY is enabled (module or built-in) in your kernel configuration.&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/udev/rules.d/ibm-ultrabay.rules}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ENV{BAY_EVENT}==&amp;quot;3&amp;quot;, KERNEL==&amp;quot;bay.0&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;platform&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay_eject&amp;quot;&lt;br /&gt;
ENV{BAY_EVENT}==&amp;quot;1&amp;quot;, KERNEL==&amp;quot;bay.0&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;platform&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay_insert&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===using libata-acpi and udev===&lt;br /&gt;
&lt;br /&gt;
Starting from kernel 2.6.26-rc5, it's possible to use &amp;lt;tt&amp;gt;libata-acpi&amp;lt;/tt&amp;gt; in combination with udev to hotswap. Please check if CONFIG_ATA_ACPI is enabled in your kernel configuration.&lt;br /&gt;
&lt;br /&gt;
For 2.6.25, you need two patches which can be easily backported ([http://article.gmane.org/gmane.linux.acpi.devel/31159],[http://article.gmane.org/gmane.linux.acpi.devel/31369]).&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/udev/rules.d/ibm-ultrabay.rules}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ENV{BAY_EVENT}==&amp;quot;3&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;scsi&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay_eject&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-specific notes===&lt;br /&gt;
See the table above for a list of ata_piix supported laptops and the bus ID to use.&lt;br /&gt;
&lt;br /&gt;
===HAL support===&lt;br /&gt;
&lt;br /&gt;
{{NOTE| Starting from HAL 0.5.11, you need to replace &amp;quot;storage.physical_device&amp;quot; with &amp;quot;info.parent&amp;quot;.}}&lt;br /&gt;
&lt;br /&gt;
Many programs, KDE included, rely on [[HAL]] to get notifications and information about device hotplugging. You need to tell HAL that devices connected the UltraBay port are hotpluggable. To do so, create the file {{path|/etc/hal/fdi/information/10-ultrabay.fdi}} as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt; &amp;lt;!-- -*- SGML -*- --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;deviceinfo version=&amp;quot;0.2&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;device&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- UltraBay Devices --&amp;gt;&lt;br /&gt;
    &amp;lt;match key=&amp;quot;storage.bus&amp;quot; string=&amp;quot;scsi&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;match key=&amp;quot;storage.physical_device&amp;quot; string=&amp;quot;/org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_0_scsi_device_lun0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;merge key=&amp;quot;storage.hotpluggable&amp;quot; type=&amp;quot;bool&amp;quot;&amp;gt;true&amp;lt;/merge&amp;gt;&lt;br /&gt;
      &amp;lt;/match&amp;gt;&lt;br /&gt;
    &amp;lt;/match&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/device&amp;gt;&lt;br /&gt;
&amp;lt;/deviceinfo&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The string &amp;quot;8086_2653&amp;quot; may need to be changed to match your ThinkPad model; see below.&lt;br /&gt;
&lt;br /&gt;
====Details====&lt;br /&gt;
&lt;br /&gt;
By default, HAL doesn't know that UltraBay devices are hotpluggable:&lt;br /&gt;
&lt;br /&gt;
 # PHYSDEV=/org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_0_scsi_device_lun0&lt;br /&gt;
 # UDI=`hal-find-by-property --key storage.physical_device --string $PHYSDEV` || echo Failed&lt;br /&gt;
 # hal-get-property --udi $UDI --key block.device&lt;br /&gt;
 /dev/sdb&lt;br /&gt;
 # hal-get-property --udi $UDI --key storage.hotpluggable&lt;br /&gt;
 false&lt;br /&gt;
&lt;br /&gt;
After creating {{path|/etc/hal/fdi/information/10-ultrabay.fdi}} as above and re-plugging the device, it will get marked correctly:&lt;br /&gt;
&lt;br /&gt;
 # PHYSDEV=/org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_0_scsi_device_lun0&lt;br /&gt;
 # UDI=`hal-find-by-property --key storage.physical_device --string $PHYSDEV` || echo Failed&lt;br /&gt;
 # hal-get-property --udi $UDI --key block.device&lt;br /&gt;
 /dev/sdb&lt;br /&gt;
 # hal-get-property --udi $UDI --key storage.hotpluggable&lt;br /&gt;
 true&lt;br /&gt;
&lt;br /&gt;
The string &amp;quot;8086_2653&amp;quot; gives the PCI ID of the [[Intel 82801FBM]] southbridge. If your model has a different southbridge, or the UltraBay is attached to a different port, then you can find the appropriate &amp;lt;tt&amp;gt;storage.physical_device&amp;lt;/tt&amp;gt; value by finding out the block device of the currently running UltraBay device (&amp;lt;tt&amp;gt;/dev/sdb&amp;lt;/tt&amp;gt; in the following example) and then running:&lt;br /&gt;
&lt;br /&gt;
 # DEVICE=/dev/sdb&lt;br /&gt;
 # UDI=`hal-find-by-property --key block.device --string $DEVICE` || echo Failed&lt;br /&gt;
 # hal-get-property --udi $UDI --key storage.physical_device&lt;br /&gt;
 /org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_0_scsi_device_lun0&lt;br /&gt;
&lt;br /&gt;
If you have a different &amp;lt;tt&amp;gt;storage.physical_device&amp;lt;/tt&amp;gt; value, please report your findings.&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
|+ Known South Bridge PCI IDs&lt;br /&gt;
! ID !! ThinkPad model !! South Bridge chip&lt;br /&gt;
|-&lt;br /&gt;
| 8086_248a || 2366-83U (T30) || Intel 82801CAM IDE U100 (rev 2)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2653 || 2525FAG (X41) || Intel 82801FBM (ICH6-M)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_24ca || 237358U (T40), 2373KXU (T42p) || Intel 82801DBM (ICH4-M)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27c4 || X60           || Intel 82801GBM (ICH7 Family)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27df || Z61p, T60, T60p || Intel 82801GBM/GHM (ICH7 Family)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2850 || T61p || Intel 82801H (ICH8 Family)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==When using the &amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt; driver==&lt;br /&gt;
The following applies if you use the &amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt; driver for the UltraBay device.&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note that essentially, you shouldn't be using this driver, and use ata_piix instead unless you're running an older kernel where ata_piix won't work for you&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hotswapping is supposed to be supported as well, using either hdparm/[http://packages.debian.org/unstable/admin/hotswap Debian hotswap] or [[lt_hotswap]] to (un)register IDE devices. The latter is the recommended method with kernels from 2.6, since it will leave DMA working. However, for recent models (R52, T43, X41, Z60 and later) no method is known to work while maintaining DMA support; see [[Problems with SATA and Linux]].&lt;br /&gt;
&lt;br /&gt;
Only IDE devices (HDD's, optical drives, zip drives) require special treatment - batteries, floppies and other devices can just be pulled from the bay, provided they are not mounted or in use at the time. However, you should still power them down first using the [[ibm-acpi]] eject function.&lt;br /&gt;
&lt;br /&gt;
The [[ibm-acpi]] kernel module has an eject function ({{cmdroot|echo eject &amp;gt; /proc/acpi/ibm/bay}}). This only manages the ACPI calls to power down the device and the bay. It does not actually unregister the device from the IDE driver. {{cmdroot|cat /proc/acpi/ibm/bay}} shows &amp;quot;unoccupied&amp;quot; unless an IDE device is present, but the eject function still works and should still be used.&lt;br /&gt;
&lt;br /&gt;
To unregister the device, you can either use the [http://packages.debian.org/unstable/admin/hotswap Debian hotswap] package, or [[lt_hotswap]]. Note that lt_hotswap doesn't seem to even build on recent (at 2.6.22 or newer, although it probably broke before 2.6.22) and on newer kernels, you should not build/load the old IDE PIIX (CONFIG_BLK_DEV_PIIX) and use the natively hotswapping ata_piix (CONFIG_ATA_PIIX) as explained on the top of this page.&lt;br /&gt;
&lt;br /&gt;
[http://packages.debian.org/unstable/admin/hotswap Debian hotswap] also allows the drive to be swapped as a normal user by default, which is useful. You should use &amp;lt;tt&amp;gt;hotswap&amp;lt;/tt&amp;gt; to unregister the device and then {{cmdroot|echo eject &amp;gt; /proc/acpi/ibm/bay}}. However, if you use this method on a 2.6 kernel, you will lose DMA support for the reinserted drive. This is due to kernel issues. This method was reported to work on a ThinkPad {{T23}} (kernels 2.6.8.1, 2.6.14.2 and 2.6.15-arch) and {{T42}} (kernel 2.6.13), but fails on a ThinkPad {{T43}} (kernel 2.6.14.3).&lt;br /&gt;
&lt;br /&gt;
[[lt_hotswap]] is now the recommended method to un- and reregister the IDE device. It installs as a kernel module and has support for automatically unregistering (if loaded with the auto_eject=1 option) the device when the eject event is generated by [[ibm-acpi]]. It will leave DMA support intact. It has supported to work on a ThinkPad {{T22}} and {{T40}} and should work with many other models (but not recent models which require the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver for disk DMA support). With the [[lt_hotswap]] kernel module loaded, run: {{cmdroot|modprobe -r ide_cd &amp;amp;&amp;amp; modprobe -r cdrom &amp;amp;&amp;amp; echo &amp;quot;MSTR eject&amp;quot; &amp;gt; /proc/acpi/lths}}&lt;br /&gt;
&lt;br /&gt;
===HAL support===&lt;br /&gt;
&lt;br /&gt;
HAL support also can also be configured To do so, create the file {{path|/etc/hal/fdi/information/10-ultrabay.fdi}} as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt; &amp;lt;!-- -*- SGML -*- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;deviceinfo version=&amp;quot;0.2&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;device&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- UltraBay Devices --&amp;gt;&lt;br /&gt;
    &amp;lt;match key=&amp;quot;storage.bus&amp;quot; string=&amp;quot;ide&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;match key=&amp;quot;storage.physical_device&amp;quot; string=&amp;quot;/org/freedesktop/Hal/devices/pci_8086_24ca_ide_1_0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;merge key=&amp;quot;storage.hotpluggable&amp;quot; type=&amp;quot;bool&amp;quot;&amp;gt;true&amp;lt;/merge&amp;gt;&lt;br /&gt;
      &amp;lt;/match&amp;gt;&lt;br /&gt;
    &amp;lt;/match&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/device&amp;gt;&lt;br /&gt;
&amp;lt;/deviceinfo&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
For more details see HAL section for ata driver.&lt;br /&gt;
&lt;br /&gt;
==Other comments==&lt;br /&gt;
&lt;br /&gt;
If you are hot-swapping a hard disk on a disk tray, make sure the disk does not have a password set, otherwise it will not be recognized on reinsertion.&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripts]]&lt;br /&gt;
[[Category:HOWTOs]]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=How_to_hotswap_Ultrabay_devices&amp;diff=37907</id>
		<title>How to hotswap Ultrabay devices</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=How_to_hotswap_Ultrabay_devices&amp;diff=37907"/>
		<updated>2008-06-03T20:54:02Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: /* HAL support */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following discusses hotswap (AKA &amp;quot;hotplug&amp;quot;) of devices in the [[UltraBay]].&lt;br /&gt;
&lt;br /&gt;
==Which driver?==&lt;br /&gt;
Since this may be confusing for SATA thinkpad owners, which are likely all the same for now, you have two busses and drivers: one SATA bus which works with the AHCI driver and one IDE bus for the ultrabay for which you should pick ata_piix (not piix/CONFIG_BLK_DEV_PIIX). See below for hotswapping.&lt;br /&gt;
&lt;br /&gt;
==Choosing the right driver: new style &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; vs old style &amp;lt;tt&amp;gt;piix/ide-disk&amp;lt;/tt&amp;gt;==&lt;br /&gt;
For ICH5,6,7,8, systems, whether you have an older IDE only thinkpad, or a newer thinkpad like the T/Z61p, there is one SATA bus for the system hard drive and an IDE bus for the ultrabay (even if your ultrabay happens to have a SATA drive, as it'll be seen as an IDE device), you'll have two drivers to chose from for your ultrabay: the old IDE/piix+ide-disk driver, and the newer PATA (=IDE) support of the newer ata_piix driver.&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;piix+ide-disk&amp;lt;/tt&amp;gt; are part of the old original IDE driver and your ultrabay device will show up as &amp;lt;tt&amp;gt;/dev/hda&amp;lt;/tt&amp;gt;.&amp;lt;BR&amp;gt;&amp;lt;tt&amp;gt;ata-piix&amp;lt;/tt&amp;gt; is the new SATA/PATA (=IDE) driver that will cause your ultrabay Hard Drive to show up as &amp;lt;tt&amp;gt;/dev/sda&amp;lt;/tt&amp;gt; and your CD-Rom as &amp;lt;tt&amp;gt;/dev/sr0&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The two things to know are: 1) you want to use ata_piix and 2) if you build piix in (CONFIG_BLK_DEV_PIIX enabled), or load it as a module, it'll take over the IDE bus and prevent ATA_PIIX from seeing your ultrabay. You don't want that.&lt;br /&gt;
&lt;br /&gt;
The longer details are:&amp;lt;BR&amp;gt;&lt;br /&gt;
You don't want the piix+ide-disk combo because even as modules, you will not be able to unload piix to reset the bus if there are issues swapping devices (with ata_piix, even if you forget to unregister a drive before removing it, you can unload the module and reload it to reset the bus after the fact if you have a newer thinkpad with a separate AHCI/SATA bus for the boot drive).&lt;br /&gt;
&lt;br /&gt;
As for hotswap, with piix+ide-disk, you can read the section below, but after more than one day of trying on 2.6.22.15 (as piix+ide-disk was taking over my IDE bus, and stopping me from using ata_piix before I removed it), I was not able to get hotswapping to work with piix+ide-disk (lt_hotswap would not even build on 2.6.22.15).&lt;br /&gt;
&lt;br /&gt;
hotswap just works with ata_pixx on 2.6.22, and reportedly with anything newer than 2.6.18, so you want to get rid of piix+ide-disk.&lt;br /&gt;
There are several ways to do that:&lt;br /&gt;
* if piix is built in your kernel (CONFIG_BLK_DEV_PIIX):&lt;br /&gt;
** rebuild your kernel with CONFIG_BLK_DEV_PIIX turned off.&lt;br /&gt;
** if you don't want to rebuild your kernel, try disabling the IDE bus grabbing by that driver with &amp;lt;tt&amp;gt;ide0=noprobe hda=noprobe hdb=noprobe&amp;lt;/tt&amp;gt; in your grub/lilo config (adjust the drive letters as appropriate, but note that this did not work for me on 2.6.22.15: the drive didn't show up on the piix bus, but it didn't show up on the ata_piix bus either).&lt;br /&gt;
* if piix is built in as a module&lt;br /&gt;
** you can move out the module in {{path|/lib/modules/ver/kernel/drivers/ide/pci/piix.ko}} and reboot.&lt;br /&gt;
** or build a new kernel, again with CONFIG_BLK_DEV_PIIX turned off.&lt;br /&gt;
** or add &amp;lt;tt&amp;gt;options ide_core options=&amp;quot;ide0=noprobe hda=noprobe hdb=noprobe&amp;quot;&amp;lt;/tt&amp;gt; to your modprobe.conf is supposed to work too (but didn't work on 2.6.22.15, see comment above)&lt;br /&gt;
&lt;br /&gt;
Then, continue this document to see how to do hotswap with ata_piix (if you are lucky enough to have a newer SATA thinkpad where the ata_piix driver only runs the ultrabay, and you have a separate bus and ahci driver for your main drive, it is recommended to have ata_piix as a module (&amp;lt;tt&amp;gt;CONFIG_ATA_PIIX=m&amp;lt;/tt&amp;gt;) so that you can unload/reload it if your bus gets in a bad state after a failed hotswap)&lt;br /&gt;
&lt;br /&gt;
==When using the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver==&lt;br /&gt;
The following applies when using the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver, which is necessary for many recent ThinkPad models that use an [[Intel ICH6-M]] controller. See also [[Problems with SATA and Linux]]. &lt;br /&gt;
&lt;br /&gt;
Mainline kernels before 2.6.18 cannot reliably recognize newly (re-)inserted UltraBay drives without a reboot. There are experimental hotplug patches against pre-2.6.18 mainline kernels [http://home-tj.org/wiki/index.php/Libata-tj-stable here].&lt;br /&gt;
&lt;br /&gt;
* Available hotplug patches&lt;br /&gt;
**[http://home-tj.org/files/libata-tj-stable/libata-tj-2.6.16.16-20060512.tar.bz2 Patch tarball against 2.6.16.16] ([http://lwn.net/Articles/183407/ Announce])&lt;br /&gt;
**[http://home-tj.org/files/libata-tj-stable/libata-tj-2.6.17-20060625-1.tar.bz2 Patch tarball against 2.6.17/2.6.17.1] ([http://article.gmane.org/gmane.linux.ide/11598 Announce])&lt;br /&gt;
**[http://home-tj.org/files/libata-tj-stable/libata-tj-2.6.17.4-20060710.tar.bz2 Patch tarball against 2.6.17.4]&lt;br /&gt;
**[http://whoopie.gmxhome.de/linux/patches/2.6.17.14-tj/00-libata-tj-2.6.17.4-20060710.patch Patch against 2.6.17.14]&lt;br /&gt;
&lt;br /&gt;
* Confirmed to work on the following laptops, with bus the following ID &lt;br /&gt;
**ThinkPad {{T30}}&lt;br /&gt;
**ThinkPad {{T43}}, {{T43p}}&lt;br /&gt;
**ThinkPad {{R52}}&lt;br /&gt;
**ThinkPad {{T60}} ID=4&lt;br /&gt;
**ThinkPad {{T61}} ID=0&lt;br /&gt;
**ThinkPad {{Z61p}} ID=4 (0-3:ahci, 5-6: ata_piix)&lt;br /&gt;
ID will typically be 1 if you only have an IDE bus (0 is boot drive, 1 is ultrabay), and it'll be 4 if you have a SATA bus your system boots from (ID 0-3) and an IDE bus for your ultrabay (ID 4-5).&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note that even on a given laptop model the ID can vary depending on whether your kernel has drivers that configure your boot drive is using the old style IDE driver (which doesn't add IDs before your ultrabay), or whether your boot drive is using the new style driver (which  adds IDs before your ultrabay)&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hotplug just works with kernels newer than 2.6.18 ( or older kernels that were patched to support &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; hotplug (don't try it otherwise!))&amp;lt;BR&amp;gt;&lt;br /&gt;
First, it is recommended you find the right SCSI ID for your drive to hotswap and unregister it before removing it (this works with all recent mainline kernels):&lt;br /&gt;
 {{cmdroot|echo 1 &amp;gt; /sys/class/scsi_device/$ID:0:0:0/device/delete}} &lt;br /&gt;
 {{cmdroot|echo eject &amp;gt;  /proc/acpi/ibm/bay}}&lt;br /&gt;
The drive can now be ejected (without this, your IDE bus may complain if you just yank a drive, but you can usually recover by unloading/reloading the ata_piix module on a SATA laptop if your main drive is not on the ata_piix bus)&lt;br /&gt;
&lt;br /&gt;
You can then issue the following after inserting an UltraBay drive to rescan the port:&lt;br /&gt;
 {{cmdroot|echo 0 0 0 &amp;gt;  /sys/class/scsi_host/host$ID/scan}}&lt;br /&gt;
The inserted drive should now be recognized by the kernel, and appropriate {{path|/dev/*}} entries created automatically (e.g., by &amp;lt;tt&amp;gt;udev&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Ted T'so has also written this hotswap patch, which may or may not be needed for you, see [http://www.mail-archive.com/linux-acpi@vger.kernel.org/msg04716.html hotswap patch] and report back&lt;br /&gt;
&lt;br /&gt;
===Scripts for hotswapping===&lt;br /&gt;
&lt;br /&gt;
The following scripts and [[acpid]] daemon configuration files do the following:&lt;br /&gt;
* Automatically unmounts the relevant filesystems and power off the UltraBay when the UltraBay eject lever is released. Screams if some filesystem can't be unmounted.&lt;br /&gt;
* Rescans the UltraBay port when then UltraBay eject lever is pushed back in.&lt;br /&gt;
&lt;br /&gt;
They assumes you're using the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver with an appropriate kernel (see above).&lt;br /&gt;
&lt;br /&gt;
Create {{path|/usr/local/sbin/ultrabay_insert}} with permissions 755:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
echo 12 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
sync&lt;br /&gt;
echo 0 0 0 &amp;gt; /sys/class/scsi_host/host1/scan&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create {{path|/usr/local/sbin/ultrabay_eject}} with permissions 755:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
ULTRABAY_SYSDIR='/sys/class/scsi_device/1:0:0:0/device'&lt;br /&gt;
shopt -s nullglob&lt;br /&gt;
&lt;br /&gt;
# Umount the filesystem(s) backed by the given major:minor device(s)&lt;br /&gt;
unmount_rdev() { perl - &amp;quot;$@&amp;quot; &amp;lt;&amp;lt;'EOPERL'  # let's do it in Perl&lt;br /&gt;
	for $major_minor (@ARGV) {&lt;br /&gt;
		$major_minor =~ m/^(\d+):(\d+)$/ or die;&lt;br /&gt;
		push(@tgt_rdevs, ($1&amp;lt;&amp;lt;8)|$2);&lt;br /&gt;
	}&lt;br /&gt;
        # Sort by reverse length of mount point, to unmount sub-directories first&lt;br /&gt;
        open MOUNTS,&amp;quot;&amp;lt;/proc/mounts&amp;quot; or die &amp;quot;$!&amp;quot;;&lt;br /&gt;
        @mounts=sort { length($b-&amp;gt;[1]) &amp;lt;=&amp;gt; length($a-&amp;gt;[1]) } map { [ split ] } &amp;lt;MOUNTS&amp;gt;;&lt;br /&gt;
        close MOUNTS;&lt;br /&gt;
        foreach $m (@mounts) {&lt;br /&gt;
                ($dev,$dir)=@$m;&lt;br /&gt;
		next unless -b $dev;  $rdev=(stat($dev))[6];&lt;br /&gt;
		next unless grep($_==$rdev, @tgt_rdevs);&lt;br /&gt;
		system(&amp;quot;umount&amp;quot;,&amp;quot;-v&amp;quot;,&amp;quot;$dir&amp;quot;)==0  or  $bad=1;&lt;br /&gt;
	}&lt;br /&gt;
	exit 1 if $bad;&lt;br /&gt;
EOPERL&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Get the UltraBay's /dev/foo block device node&lt;br /&gt;
ultrabay_dev_node() {&lt;br /&gt;
	UDEV_PATH=&amp;quot;`readlink -e &amp;quot;$ULTRABAY_SYSDIR/block:&amp;quot;*`&amp;quot; || return 1&lt;br /&gt;
	UDEV_NAME=&amp;quot;`udevinfo -q name -p $UDEV_PATH`&amp;quot; || return 1&lt;br /&gt;
	echo /dev/$UDEV_NAME&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if [ -d $ULTRABAY_SYSDIR ]; then&lt;br /&gt;
	sync&lt;br /&gt;
	# Unmount filesystems backed by this device&lt;br /&gt;
	unmount_rdev `cat $ULTRABAY_SYSDIR/block\:*/dev     \&lt;br /&gt;
	                  $ULTRABAY_SYSDIR/block\:*/*/dev`  \&lt;br /&gt;
	|| {&lt;br /&gt;
		echo 10 &amp;gt; /proc/acpi/ibm/beep;  # error tone&lt;br /&gt;
		exit 1;&lt;br /&gt;
	}&lt;br /&gt;
        sync&lt;br /&gt;
        # Nicely power off the device&lt;br /&gt;
	DEVNODE=`ultrabay_dev_node` &amp;amp;&amp;amp; hdparm -Y $DEVNODE&lt;br /&gt;
        # Let HAL+KDE notice the unmount and let the disk spin down&lt;br /&gt;
	sleep 0.5&lt;br /&gt;
	# Unregister this SCSI device:&lt;br /&gt;
	sync&lt;br /&gt;
	echo 1 &amp;gt; $ULTRABAY_SYSDIR/delete&lt;br /&gt;
fi&lt;br /&gt;
sync&lt;br /&gt;
# Turn off power to the UltraBay:&lt;br /&gt;
if [ -d /sys/devices/platform/bay.0 ]; then&lt;br /&gt;
	echo 1 &amp;gt; /sys/devices/platform/bay.0/eject&lt;br /&gt;
elif [ -e /proc/acpi/ibm/bay ]; then&lt;br /&gt;
	echo eject &amp;gt; /proc/acpi/ibm/bay&lt;br /&gt;
fi&lt;br /&gt;
# Tell the user we're OK&lt;br /&gt;
echo 12 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/acpi/events/ultrabay-insert}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
event=ibm/bay MSTR 00000001 00000000&lt;br /&gt;
action=/usr/local/sbin/ultrabay_insert&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/acpi/events/ultrabay-eject}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
event=ibm/bay MSTR 00000003 00000000&lt;br /&gt;
action=/usr/local/sbin/ultrabay_eject&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Restart &amp;lt;tt&amp;gt;acpid&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===using the generic bay driver and udev===&lt;br /&gt;
&lt;br /&gt;
Starting from kernel 2.6.23-rc3, it's possible to use the generic &amp;lt;tt&amp;gt;bay&amp;lt;/tt&amp;gt; driver in combination with udev to hotswap. Please check if CONFIG_ACPI_BAY is enabled (module or built-in) in your kernel configuration.&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/udev/rules.d/ibm-ultrabay.rules}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ENV{BAY_EVENT}==&amp;quot;3&amp;quot;, KERNEL==&amp;quot;bay.0&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;platform&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay_eject&amp;quot;&lt;br /&gt;
ENV{BAY_EVENT}==&amp;quot;1&amp;quot;, KERNEL==&amp;quot;bay.0&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;platform&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay_insert&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===using libata-acpi and udev===&lt;br /&gt;
&lt;br /&gt;
You can also use &amp;lt;tt&amp;gt;libata-acpi&amp;lt;/tt&amp;gt; for hotswapping and udev for unmounting. You need two patches which can be easily backported to 2.6.25 ([http://article.gmane.org/gmane.linux.acpi.devel/31159],[http://article.gmane.org/gmane.linux.acpi.devel/31369]).&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/udev/rules.d/ibm-ultrabay.rules}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ENV{BAY_EVENT}==&amp;quot;3&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;scsi&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay_eject&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-specific notes===&lt;br /&gt;
See the table above for a list of ata_piix supported laptops and the bus ID to use.&lt;br /&gt;
&lt;br /&gt;
===HAL support===&lt;br /&gt;
&lt;br /&gt;
{{NOTE| Starting from HAL 0.5.11, you need to replace &amp;quot;storage.physical_device&amp;quot; with &amp;quot;info.parent&amp;quot;.}}&lt;br /&gt;
&lt;br /&gt;
Many programs, KDE included, rely on [[HAL]] to get notifications and information about device hotplugging. You need to tell HAL that devices connected the UltraBay port are hotpluggable. To do so, create the file {{path|/etc/hal/fdi/information/10-ultrabay.fdi}} as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt; &amp;lt;!-- -*- SGML -*- --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;deviceinfo version=&amp;quot;0.2&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;device&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- UltraBay Devices --&amp;gt;&lt;br /&gt;
    &amp;lt;match key=&amp;quot;storage.bus&amp;quot; string=&amp;quot;scsi&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;match key=&amp;quot;storage.physical_device&amp;quot; string=&amp;quot;/org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_0_scsi_device_lun0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;merge key=&amp;quot;storage.hotpluggable&amp;quot; type=&amp;quot;bool&amp;quot;&amp;gt;true&amp;lt;/merge&amp;gt;&lt;br /&gt;
      &amp;lt;/match&amp;gt;&lt;br /&gt;
    &amp;lt;/match&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/device&amp;gt;&lt;br /&gt;
&amp;lt;/deviceinfo&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The string &amp;quot;8086_2653&amp;quot; may need to be changed to match your ThinkPad model; see below.&lt;br /&gt;
&lt;br /&gt;
====Details====&lt;br /&gt;
&lt;br /&gt;
By default, HAL doesn't know that UltraBay devices are hotpluggable:&lt;br /&gt;
&lt;br /&gt;
 # PHYSDEV=/org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_0_scsi_device_lun0&lt;br /&gt;
 # UDI=`hal-find-by-property --key storage.physical_device --string $PHYSDEV` || echo Failed&lt;br /&gt;
 # hal-get-property --udi $UDI --key block.device&lt;br /&gt;
 /dev/sdb&lt;br /&gt;
 # hal-get-property --udi $UDI --key storage.hotpluggable&lt;br /&gt;
 false&lt;br /&gt;
&lt;br /&gt;
After creating {{path|/etc/hal/fdi/information/10-ultrabay.fdi}} as above and re-plugging the device, it will get marked correctly:&lt;br /&gt;
&lt;br /&gt;
 # PHYSDEV=/org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_0_scsi_device_lun0&lt;br /&gt;
 # UDI=`hal-find-by-property --key storage.physical_device --string $PHYSDEV` || echo Failed&lt;br /&gt;
 # hal-get-property --udi $UDI --key block.device&lt;br /&gt;
 /dev/sdb&lt;br /&gt;
 # hal-get-property --udi $UDI --key storage.hotpluggable&lt;br /&gt;
 true&lt;br /&gt;
&lt;br /&gt;
The string &amp;quot;8086_2653&amp;quot; gives the PCI ID of the [[Intel 82801FBM]] southbridge. If your model has a different southbridge, or the UltraBay is attached to a different port, then you can find the appropriate &amp;lt;tt&amp;gt;storage.physical_device&amp;lt;/tt&amp;gt; value by finding out the block device of the currently running UltraBay device (&amp;lt;tt&amp;gt;/dev/sdb&amp;lt;/tt&amp;gt; in the following example) and then running:&lt;br /&gt;
&lt;br /&gt;
 # DEVICE=/dev/sdb&lt;br /&gt;
 # UDI=`hal-find-by-property --key block.device --string $DEVICE` || echo Failed&lt;br /&gt;
 # hal-get-property --udi $UDI --key storage.physical_device&lt;br /&gt;
 /org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_0_scsi_device_lun0&lt;br /&gt;
&lt;br /&gt;
If you have a different &amp;lt;tt&amp;gt;storage.physical_device&amp;lt;/tt&amp;gt; value, please report your findings.&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
|+ Known South Bridge PCI IDs&lt;br /&gt;
! ID !! ThinkPad model !! South Bridge chip&lt;br /&gt;
|-&lt;br /&gt;
| 8086_248a || 2366-83U (T30) || Intel 82801CAM IDE U100 (rev 2)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2653 || 2525FAG (X41) || Intel 82801FBM (ICH6-M)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_24ca || 237358U (T40), 2373KXU (T42p) || Intel 82801DBM (ICH4-M)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27c4 || X60           || Intel 82801GBM (ICH7 Family)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27df || Z61p, T60, T60p || Intel 82801GBM/GHM (ICH7 Family)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2850 || T61p || Intel 82801H (ICH8 Family)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==When using the &amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt; driver==&lt;br /&gt;
The following applies if you use the &amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt; driver for the UltraBay device.&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note that essentially, you shouldn't be using this driver, and use ata_piix instead unless you're running an older kernel where ata_piix won't work for you&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hotswapping is supposed to be supported as well, using either hdparm/[http://packages.debian.org/unstable/admin/hotswap Debian hotswap] or [[lt_hotswap]] to (un)register IDE devices. The latter is the recommended method with kernels from 2.6, since it will leave DMA working. However, for recent models (R52, T43, X41, Z60 and later) no method is known to work while maintaining DMA support; see [[Problems with SATA and Linux]].&lt;br /&gt;
&lt;br /&gt;
Only IDE devices (HDD's, optical drives, zip drives) require special treatment - batteries, floppies and other devices can just be pulled from the bay, provided they are not mounted or in use at the time. However, you should still power them down first using the [[ibm-acpi]] eject function.&lt;br /&gt;
&lt;br /&gt;
The [[ibm-acpi]] kernel module has an eject function ({{cmdroot|echo eject &amp;gt; /proc/acpi/ibm/bay}}). This only manages the ACPI calls to power down the device and the bay. It does not actually unregister the device from the IDE driver. {{cmdroot|cat /proc/acpi/ibm/bay}} shows &amp;quot;unoccupied&amp;quot; unless an IDE device is present, but the eject function still works and should still be used.&lt;br /&gt;
&lt;br /&gt;
To unregister the device, you can either use the [http://packages.debian.org/unstable/admin/hotswap Debian hotswap] package, or [[lt_hotswap]]. Note that lt_hotswap doesn't seem to even build on recent (at 2.6.22 or newer, although it probably broke before 2.6.22) and on newer kernels, you should not build/load the old IDE PIIX (CONFIG_BLK_DEV_PIIX) and use the natively hotswapping ata_piix (CONFIG_ATA_PIIX) as explained on the top of this page.&lt;br /&gt;
&lt;br /&gt;
[http://packages.debian.org/unstable/admin/hotswap Debian hotswap] also allows the drive to be swapped as a normal user by default, which is useful. You should use &amp;lt;tt&amp;gt;hotswap&amp;lt;/tt&amp;gt; to unregister the device and then {{cmdroot|echo eject &amp;gt; /proc/acpi/ibm/bay}}. However, if you use this method on a 2.6 kernel, you will lose DMA support for the reinserted drive. This is due to kernel issues. This method was reported to work on a ThinkPad {{T23}} (kernels 2.6.8.1, 2.6.14.2 and 2.6.15-arch) and {{T42}} (kernel 2.6.13), but fails on a ThinkPad {{T43}} (kernel 2.6.14.3).&lt;br /&gt;
&lt;br /&gt;
[[lt_hotswap]] is now the recommended method to un- and reregister the IDE device. It installs as a kernel module and has support for automatically unregistering (if loaded with the auto_eject=1 option) the device when the eject event is generated by [[ibm-acpi]]. It will leave DMA support intact. It has supported to work on a ThinkPad {{T22}} and {{T40}} and should work with many other models (but not recent models which require the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver for disk DMA support). With the [[lt_hotswap]] kernel module loaded, run: {{cmdroot|modprobe -r ide_cd &amp;amp;&amp;amp; modprobe -r cdrom &amp;amp;&amp;amp; echo &amp;quot;MSTR eject&amp;quot; &amp;gt; /proc/acpi/lths}}&lt;br /&gt;
&lt;br /&gt;
===HAL support===&lt;br /&gt;
&lt;br /&gt;
HAL support also can also be configured To do so, create the file {{path|/etc/hal/fdi/information/10-ultrabay.fdi}} as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt; &amp;lt;!-- -*- SGML -*- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;deviceinfo version=&amp;quot;0.2&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;device&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- UltraBay Devices --&amp;gt;&lt;br /&gt;
    &amp;lt;match key=&amp;quot;storage.bus&amp;quot; string=&amp;quot;ide&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;match key=&amp;quot;storage.physical_device&amp;quot; string=&amp;quot;/org/freedesktop/Hal/devices/pci_8086_24ca_ide_1_0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;merge key=&amp;quot;storage.hotpluggable&amp;quot; type=&amp;quot;bool&amp;quot;&amp;gt;true&amp;lt;/merge&amp;gt;&lt;br /&gt;
      &amp;lt;/match&amp;gt;&lt;br /&gt;
    &amp;lt;/match&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/device&amp;gt;&lt;br /&gt;
&amp;lt;/deviceinfo&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
For more details see HAL section for ata driver.&lt;br /&gt;
&lt;br /&gt;
==Other comments==&lt;br /&gt;
&lt;br /&gt;
If you are hot-swapping a hard disk on a disk tray, make sure the disk does not have a password set, otherwise it will not be recognized on reinsertion.&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripts]]&lt;br /&gt;
[[Category:HOWTOs]]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=How_to_hotswap_Ultrabay_devices&amp;diff=37906</id>
		<title>How to hotswap Ultrabay devices</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=How_to_hotswap_Ultrabay_devices&amp;diff=37906"/>
		<updated>2008-06-03T20:07:02Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: adding info for libata-acpi and udev&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following discusses hotswap (AKA &amp;quot;hotplug&amp;quot;) of devices in the [[UltraBay]].&lt;br /&gt;
&lt;br /&gt;
==Which driver?==&lt;br /&gt;
Since this may be confusing for SATA thinkpad owners, which are likely all the same for now, you have two busses and drivers: one SATA bus which works with the AHCI driver and one IDE bus for the ultrabay for which you should pick ata_piix (not piix/CONFIG_BLK_DEV_PIIX). See below for hotswapping.&lt;br /&gt;
&lt;br /&gt;
==Choosing the right driver: new style &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; vs old style &amp;lt;tt&amp;gt;piix/ide-disk&amp;lt;/tt&amp;gt;==&lt;br /&gt;
For ICH5,6,7,8, systems, whether you have an older IDE only thinkpad, or a newer thinkpad like the T/Z61p, there is one SATA bus for the system hard drive and an IDE bus for the ultrabay (even if your ultrabay happens to have a SATA drive, as it'll be seen as an IDE device), you'll have two drivers to chose from for your ultrabay: the old IDE/piix+ide-disk driver, and the newer PATA (=IDE) support of the newer ata_piix driver.&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;tt&amp;gt;piix+ide-disk&amp;lt;/tt&amp;gt; are part of the old original IDE driver and your ultrabay device will show up as &amp;lt;tt&amp;gt;/dev/hda&amp;lt;/tt&amp;gt;.&amp;lt;BR&amp;gt;&amp;lt;tt&amp;gt;ata-piix&amp;lt;/tt&amp;gt; is the new SATA/PATA (=IDE) driver that will cause your ultrabay Hard Drive to show up as &amp;lt;tt&amp;gt;/dev/sda&amp;lt;/tt&amp;gt; and your CD-Rom as &amp;lt;tt&amp;gt;/dev/sr0&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The two things to know are: 1) you want to use ata_piix and 2) if you build piix in (CONFIG_BLK_DEV_PIIX enabled), or load it as a module, it'll take over the IDE bus and prevent ATA_PIIX from seeing your ultrabay. You don't want that.&lt;br /&gt;
&lt;br /&gt;
The longer details are:&amp;lt;BR&amp;gt;&lt;br /&gt;
You don't want the piix+ide-disk combo because even as modules, you will not be able to unload piix to reset the bus if there are issues swapping devices (with ata_piix, even if you forget to unregister a drive before removing it, you can unload the module and reload it to reset the bus after the fact if you have a newer thinkpad with a separate AHCI/SATA bus for the boot drive).&lt;br /&gt;
&lt;br /&gt;
As for hotswap, with piix+ide-disk, you can read the section below, but after more than one day of trying on 2.6.22.15 (as piix+ide-disk was taking over my IDE bus, and stopping me from using ata_piix before I removed it), I was not able to get hotswapping to work with piix+ide-disk (lt_hotswap would not even build on 2.6.22.15).&lt;br /&gt;
&lt;br /&gt;
hotswap just works with ata_pixx on 2.6.22, and reportedly with anything newer than 2.6.18, so you want to get rid of piix+ide-disk.&lt;br /&gt;
There are several ways to do that:&lt;br /&gt;
* if piix is built in your kernel (CONFIG_BLK_DEV_PIIX):&lt;br /&gt;
** rebuild your kernel with CONFIG_BLK_DEV_PIIX turned off.&lt;br /&gt;
** if you don't want to rebuild your kernel, try disabling the IDE bus grabbing by that driver with &amp;lt;tt&amp;gt;ide0=noprobe hda=noprobe hdb=noprobe&amp;lt;/tt&amp;gt; in your grub/lilo config (adjust the drive letters as appropriate, but note that this did not work for me on 2.6.22.15: the drive didn't show up on the piix bus, but it didn't show up on the ata_piix bus either).&lt;br /&gt;
* if piix is built in as a module&lt;br /&gt;
** you can move out the module in {{path|/lib/modules/ver/kernel/drivers/ide/pci/piix.ko}} and reboot.&lt;br /&gt;
** or build a new kernel, again with CONFIG_BLK_DEV_PIIX turned off.&lt;br /&gt;
** or add &amp;lt;tt&amp;gt;options ide_core options=&amp;quot;ide0=noprobe hda=noprobe hdb=noprobe&amp;quot;&amp;lt;/tt&amp;gt; to your modprobe.conf is supposed to work too (but didn't work on 2.6.22.15, see comment above)&lt;br /&gt;
&lt;br /&gt;
Then, continue this document to see how to do hotswap with ata_piix (if you are lucky enough to have a newer SATA thinkpad where the ata_piix driver only runs the ultrabay, and you have a separate bus and ahci driver for your main drive, it is recommended to have ata_piix as a module (&amp;lt;tt&amp;gt;CONFIG_ATA_PIIX=m&amp;lt;/tt&amp;gt;) so that you can unload/reload it if your bus gets in a bad state after a failed hotswap)&lt;br /&gt;
&lt;br /&gt;
==When using the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver==&lt;br /&gt;
The following applies when using the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver, which is necessary for many recent ThinkPad models that use an [[Intel ICH6-M]] controller. See also [[Problems with SATA and Linux]]. &lt;br /&gt;
&lt;br /&gt;
Mainline kernels before 2.6.18 cannot reliably recognize newly (re-)inserted UltraBay drives without a reboot. There are experimental hotplug patches against pre-2.6.18 mainline kernels [http://home-tj.org/wiki/index.php/Libata-tj-stable here].&lt;br /&gt;
&lt;br /&gt;
* Available hotplug patches&lt;br /&gt;
**[http://home-tj.org/files/libata-tj-stable/libata-tj-2.6.16.16-20060512.tar.bz2 Patch tarball against 2.6.16.16] ([http://lwn.net/Articles/183407/ Announce])&lt;br /&gt;
**[http://home-tj.org/files/libata-tj-stable/libata-tj-2.6.17-20060625-1.tar.bz2 Patch tarball against 2.6.17/2.6.17.1] ([http://article.gmane.org/gmane.linux.ide/11598 Announce])&lt;br /&gt;
**[http://home-tj.org/files/libata-tj-stable/libata-tj-2.6.17.4-20060710.tar.bz2 Patch tarball against 2.6.17.4]&lt;br /&gt;
**[http://whoopie.gmxhome.de/linux/patches/2.6.17.14-tj/00-libata-tj-2.6.17.4-20060710.patch Patch against 2.6.17.14]&lt;br /&gt;
&lt;br /&gt;
* Confirmed to work on the following laptops, with bus the following ID &lt;br /&gt;
**ThinkPad {{T30}}&lt;br /&gt;
**ThinkPad {{T43}}, {{T43p}}&lt;br /&gt;
**ThinkPad {{R52}}&lt;br /&gt;
**ThinkPad {{T60}} ID=4&lt;br /&gt;
**ThinkPad {{T61}} ID=0&lt;br /&gt;
**ThinkPad {{Z61p}} ID=4 (0-3:ahci, 5-6: ata_piix)&lt;br /&gt;
ID will typically be 1 if you only have an IDE bus (0 is boot drive, 1 is ultrabay), and it'll be 4 if you have a SATA bus your system boots from (ID 0-3) and an IDE bus for your ultrabay (ID 4-5).&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note that even on a given laptop model the ID can vary depending on whether your kernel has drivers that configure your boot drive is using the old style IDE driver (which doesn't add IDs before your ultrabay), or whether your boot drive is using the new style driver (which  adds IDs before your ultrabay)&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hotplug just works with kernels newer than 2.6.18 ( or older kernels that were patched to support &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; hotplug (don't try it otherwise!))&amp;lt;BR&amp;gt;&lt;br /&gt;
First, it is recommended you find the right SCSI ID for your drive to hotswap and unregister it before removing it (this works with all recent mainline kernels):&lt;br /&gt;
 {{cmdroot|echo 1 &amp;gt; /sys/class/scsi_device/$ID:0:0:0/device/delete}} &lt;br /&gt;
 {{cmdroot|echo eject &amp;gt;  /proc/acpi/ibm/bay}}&lt;br /&gt;
The drive can now be ejected (without this, your IDE bus may complain if you just yank a drive, but you can usually recover by unloading/reloading the ata_piix module on a SATA laptop if your main drive is not on the ata_piix bus)&lt;br /&gt;
&lt;br /&gt;
You can then issue the following after inserting an UltraBay drive to rescan the port:&lt;br /&gt;
 {{cmdroot|echo 0 0 0 &amp;gt;  /sys/class/scsi_host/host$ID/scan}}&lt;br /&gt;
The inserted drive should now be recognized by the kernel, and appropriate {{path|/dev/*}} entries created automatically (e.g., by &amp;lt;tt&amp;gt;udev&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Ted T'so has also written this hotswap patch, which may or may not be needed for you, see [http://www.mail-archive.com/linux-acpi@vger.kernel.org/msg04716.html hotswap patch] and report back&lt;br /&gt;
&lt;br /&gt;
===Scripts for hotswapping===&lt;br /&gt;
&lt;br /&gt;
The following scripts and [[acpid]] daemon configuration files do the following:&lt;br /&gt;
* Automatically unmounts the relevant filesystems and power off the UltraBay when the UltraBay eject lever is released. Screams if some filesystem can't be unmounted.&lt;br /&gt;
* Rescans the UltraBay port when then UltraBay eject lever is pushed back in.&lt;br /&gt;
&lt;br /&gt;
They assumes you're using the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver with an appropriate kernel (see above).&lt;br /&gt;
&lt;br /&gt;
Create {{path|/usr/local/sbin/ultrabay_insert}} with permissions 755:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
echo 12 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
sync&lt;br /&gt;
echo 0 0 0 &amp;gt; /sys/class/scsi_host/host1/scan&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create {{path|/usr/local/sbin/ultrabay_eject}} with permissions 755:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
ULTRABAY_SYSDIR='/sys/class/scsi_device/1:0:0:0/device'&lt;br /&gt;
shopt -s nullglob&lt;br /&gt;
&lt;br /&gt;
# Umount the filesystem(s) backed by the given major:minor device(s)&lt;br /&gt;
unmount_rdev() { perl - &amp;quot;$@&amp;quot; &amp;lt;&amp;lt;'EOPERL'  # let's do it in Perl&lt;br /&gt;
	for $major_minor (@ARGV) {&lt;br /&gt;
		$major_minor =~ m/^(\d+):(\d+)$/ or die;&lt;br /&gt;
		push(@tgt_rdevs, ($1&amp;lt;&amp;lt;8)|$2);&lt;br /&gt;
	}&lt;br /&gt;
        # Sort by reverse length of mount point, to unmount sub-directories first&lt;br /&gt;
        open MOUNTS,&amp;quot;&amp;lt;/proc/mounts&amp;quot; or die &amp;quot;$!&amp;quot;;&lt;br /&gt;
        @mounts=sort { length($b-&amp;gt;[1]) &amp;lt;=&amp;gt; length($a-&amp;gt;[1]) } map { [ split ] } &amp;lt;MOUNTS&amp;gt;;&lt;br /&gt;
        close MOUNTS;&lt;br /&gt;
        foreach $m (@mounts) {&lt;br /&gt;
                ($dev,$dir)=@$m;&lt;br /&gt;
		next unless -b $dev;  $rdev=(stat($dev))[6];&lt;br /&gt;
		next unless grep($_==$rdev, @tgt_rdevs);&lt;br /&gt;
		system(&amp;quot;umount&amp;quot;,&amp;quot;-v&amp;quot;,&amp;quot;$dir&amp;quot;)==0  or  $bad=1;&lt;br /&gt;
	}&lt;br /&gt;
	exit 1 if $bad;&lt;br /&gt;
EOPERL&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Get the UltraBay's /dev/foo block device node&lt;br /&gt;
ultrabay_dev_node() {&lt;br /&gt;
	UDEV_PATH=&amp;quot;`readlink -e &amp;quot;$ULTRABAY_SYSDIR/block:&amp;quot;*`&amp;quot; || return 1&lt;br /&gt;
	UDEV_NAME=&amp;quot;`udevinfo -q name -p $UDEV_PATH`&amp;quot; || return 1&lt;br /&gt;
	echo /dev/$UDEV_NAME&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if [ -d $ULTRABAY_SYSDIR ]; then&lt;br /&gt;
	sync&lt;br /&gt;
	# Unmount filesystems backed by this device&lt;br /&gt;
	unmount_rdev `cat $ULTRABAY_SYSDIR/block\:*/dev     \&lt;br /&gt;
	                  $ULTRABAY_SYSDIR/block\:*/*/dev`  \&lt;br /&gt;
	|| {&lt;br /&gt;
		echo 10 &amp;gt; /proc/acpi/ibm/beep;  # error tone&lt;br /&gt;
		exit 1;&lt;br /&gt;
	}&lt;br /&gt;
        sync&lt;br /&gt;
        # Nicely power off the device&lt;br /&gt;
	DEVNODE=`ultrabay_dev_node` &amp;amp;&amp;amp; hdparm -Y $DEVNODE&lt;br /&gt;
        # Let HAL+KDE notice the unmount and let the disk spin down&lt;br /&gt;
	sleep 0.5&lt;br /&gt;
	# Unregister this SCSI device:&lt;br /&gt;
	sync&lt;br /&gt;
	echo 1 &amp;gt; $ULTRABAY_SYSDIR/delete&lt;br /&gt;
fi&lt;br /&gt;
sync&lt;br /&gt;
# Turn off power to the UltraBay:&lt;br /&gt;
if [ -d /sys/devices/platform/bay.0 ]; then&lt;br /&gt;
	echo 1 &amp;gt; /sys/devices/platform/bay.0/eject&lt;br /&gt;
elif [ -e /proc/acpi/ibm/bay ]; then&lt;br /&gt;
	echo eject &amp;gt; /proc/acpi/ibm/bay&lt;br /&gt;
fi&lt;br /&gt;
# Tell the user we're OK&lt;br /&gt;
echo 12 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/acpi/events/ultrabay-insert}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
event=ibm/bay MSTR 00000001 00000000&lt;br /&gt;
action=/usr/local/sbin/ultrabay_insert&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/acpi/events/ultrabay-eject}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
event=ibm/bay MSTR 00000003 00000000&lt;br /&gt;
action=/usr/local/sbin/ultrabay_eject&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Restart &amp;lt;tt&amp;gt;acpid&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===using the generic bay driver and udev===&lt;br /&gt;
&lt;br /&gt;
Starting from kernel 2.6.23-rc3, it's possible to use the generic &amp;lt;tt&amp;gt;bay&amp;lt;/tt&amp;gt; driver in combination with udev to hotswap. Please check if CONFIG_ACPI_BAY is enabled (module or built-in) in your kernel configuration.&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/udev/rules.d/ibm-ultrabay.rules}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ENV{BAY_EVENT}==&amp;quot;3&amp;quot;, KERNEL==&amp;quot;bay.0&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;platform&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay_eject&amp;quot;&lt;br /&gt;
ENV{BAY_EVENT}==&amp;quot;1&amp;quot;, KERNEL==&amp;quot;bay.0&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;platform&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay_insert&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===using libata-acpi and udev===&lt;br /&gt;
&lt;br /&gt;
You can also use &amp;lt;tt&amp;gt;libata-acpi&amp;lt;/tt&amp;gt; for hotswapping and udev for unmounting. You need two patches which can be easily backported to 2.6.25 ([http://article.gmane.org/gmane.linux.acpi.devel/31159],[http://article.gmane.org/gmane.linux.acpi.devel/31369]).&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/udev/rules.d/ibm-ultrabay.rules}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ENV{BAY_EVENT}==&amp;quot;3&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;scsi&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay_eject&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Model-specific notes===&lt;br /&gt;
See the table above for a list of ata_piix supported laptops and the bus ID to use.&lt;br /&gt;
&lt;br /&gt;
===HAL support===&lt;br /&gt;
&lt;br /&gt;
Many programs, KDE included, rely on [[HAL]] to get notifications and information about device hotplugging. You need to tell HAL that devices connected the UltraBay port are hotpluggable. To do so, create the file {{path|/etc/hal/fdi/information/10-ultrabay.fdi}} as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt; &amp;lt;!-- -*- SGML -*- --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;deviceinfo version=&amp;quot;0.2&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;device&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- UltraBay Devices --&amp;gt;&lt;br /&gt;
    &amp;lt;match key=&amp;quot;storage.bus&amp;quot; string=&amp;quot;scsi&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;match key=&amp;quot;storage.physical_device&amp;quot; string=&amp;quot;/org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_0_scsi_device_lun0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;merge key=&amp;quot;storage.hotpluggable&amp;quot; type=&amp;quot;bool&amp;quot;&amp;gt;true&amp;lt;/merge&amp;gt;&lt;br /&gt;
      &amp;lt;/match&amp;gt;&lt;br /&gt;
    &amp;lt;/match&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/device&amp;gt;&lt;br /&gt;
&amp;lt;/deviceinfo&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The string &amp;quot;8086_2653&amp;quot; may need to be changed to match your ThinkPad model; see below.&lt;br /&gt;
&lt;br /&gt;
====Details====&lt;br /&gt;
&lt;br /&gt;
By default, HAL doesn't know that UltraBay devices are hotpluggable:&lt;br /&gt;
&lt;br /&gt;
 # PHYSDEV=/org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_0_scsi_device_lun0&lt;br /&gt;
 # UDI=`hal-find-by-property --key storage.physical_device --string $PHYSDEV` || echo Failed&lt;br /&gt;
 # hal-get-property --udi $UDI --key block.device&lt;br /&gt;
 /dev/sdb&lt;br /&gt;
 # hal-get-property --udi $UDI --key storage.hotpluggable&lt;br /&gt;
 false&lt;br /&gt;
&lt;br /&gt;
After creating {{path|/etc/hal/fdi/information/10-ultrabay.fdi}} as above and re-plugging the device, it will get marked correctly:&lt;br /&gt;
&lt;br /&gt;
 # PHYSDEV=/org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_0_scsi_device_lun0&lt;br /&gt;
 # UDI=`hal-find-by-property --key storage.physical_device --string $PHYSDEV` || echo Failed&lt;br /&gt;
 # hal-get-property --udi $UDI --key block.device&lt;br /&gt;
 /dev/sdb&lt;br /&gt;
 # hal-get-property --udi $UDI --key storage.hotpluggable&lt;br /&gt;
 true&lt;br /&gt;
&lt;br /&gt;
The string &amp;quot;8086_2653&amp;quot; gives the PCI ID of the [[Intel 82801FBM]] southbridge. If your model has a different southbridge, or the UltraBay is attached to a different port, then you can find the appropriate &amp;lt;tt&amp;gt;storage.physical_device&amp;lt;/tt&amp;gt; value by finding out the block device of the currently running UltraBay device (&amp;lt;tt&amp;gt;/dev/sdb&amp;lt;/tt&amp;gt; in the following example) and then running:&lt;br /&gt;
&lt;br /&gt;
 # DEVICE=/dev/sdb&lt;br /&gt;
 # UDI=`hal-find-by-property --key block.device --string $DEVICE` || echo Failed&lt;br /&gt;
 # hal-get-property --udi $UDI --key storage.physical_device&lt;br /&gt;
 /org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_0_scsi_device_lun0&lt;br /&gt;
&lt;br /&gt;
If you have a different &amp;lt;tt&amp;gt;storage.physical_device&amp;lt;/tt&amp;gt; value, please report your findings.&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
|+ Known South Bridge PCI IDs&lt;br /&gt;
! ID !! ThinkPad model !! South Bridge chip&lt;br /&gt;
|-&lt;br /&gt;
| 8086_248a || 2366-83U (T30) || Intel 82801CAM IDE U100 (rev 2)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2653 || 2525FAG (X41) || Intel 82801FBM (ICH6-M)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_24ca || 237358U (T40), 2373KXU (T42p) || Intel 82801DBM (ICH4-M)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27c4 || X60           || Intel 82801GBM (ICH7 Family)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27df || Z61p, T60, T60p || Intel 82801GBM/GHM (ICH7 Family)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2850 || T61p || Intel 82801H (ICH8 Family)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==When using the &amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt; driver==&lt;br /&gt;
The following applies if you use the &amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt; driver for the UltraBay device.&amp;lt;BR&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Note that essentially, you shouldn't be using this driver, and use ata_piix instead unless you're running an older kernel where ata_piix won't work for you&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Hotswapping is supposed to be supported as well, using either hdparm/[http://packages.debian.org/unstable/admin/hotswap Debian hotswap] or [[lt_hotswap]] to (un)register IDE devices. The latter is the recommended method with kernels from 2.6, since it will leave DMA working. However, for recent models (R52, T43, X41, Z60 and later) no method is known to work while maintaining DMA support; see [[Problems with SATA and Linux]].&lt;br /&gt;
&lt;br /&gt;
Only IDE devices (HDD's, optical drives, zip drives) require special treatment - batteries, floppies and other devices can just be pulled from the bay, provided they are not mounted or in use at the time. However, you should still power them down first using the [[ibm-acpi]] eject function.&lt;br /&gt;
&lt;br /&gt;
The [[ibm-acpi]] kernel module has an eject function ({{cmdroot|echo eject &amp;gt; /proc/acpi/ibm/bay}}). This only manages the ACPI calls to power down the device and the bay. It does not actually unregister the device from the IDE driver. {{cmdroot|cat /proc/acpi/ibm/bay}} shows &amp;quot;unoccupied&amp;quot; unless an IDE device is present, but the eject function still works and should still be used.&lt;br /&gt;
&lt;br /&gt;
To unregister the device, you can either use the [http://packages.debian.org/unstable/admin/hotswap Debian hotswap] package, or [[lt_hotswap]]. Note that lt_hotswap doesn't seem to even build on recent (at 2.6.22 or newer, although it probably broke before 2.6.22) and on newer kernels, you should not build/load the old IDE PIIX (CONFIG_BLK_DEV_PIIX) and use the natively hotswapping ata_piix (CONFIG_ATA_PIIX) as explained on the top of this page.&lt;br /&gt;
&lt;br /&gt;
[http://packages.debian.org/unstable/admin/hotswap Debian hotswap] also allows the drive to be swapped as a normal user by default, which is useful. You should use &amp;lt;tt&amp;gt;hotswap&amp;lt;/tt&amp;gt; to unregister the device and then {{cmdroot|echo eject &amp;gt; /proc/acpi/ibm/bay}}. However, if you use this method on a 2.6 kernel, you will lose DMA support for the reinserted drive. This is due to kernel issues. This method was reported to work on a ThinkPad {{T23}} (kernels 2.6.8.1, 2.6.14.2 and 2.6.15-arch) and {{T42}} (kernel 2.6.13), but fails on a ThinkPad {{T43}} (kernel 2.6.14.3).&lt;br /&gt;
&lt;br /&gt;
[[lt_hotswap]] is now the recommended method to un- and reregister the IDE device. It installs as a kernel module and has support for automatically unregistering (if loaded with the auto_eject=1 option) the device when the eject event is generated by [[ibm-acpi]]. It will leave DMA support intact. It has supported to work on a ThinkPad {{T22}} and {{T40}} and should work with many other models (but not recent models which require the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver for disk DMA support). With the [[lt_hotswap]] kernel module loaded, run: {{cmdroot|modprobe -r ide_cd &amp;amp;&amp;amp; modprobe -r cdrom &amp;amp;&amp;amp; echo &amp;quot;MSTR eject&amp;quot; &amp;gt; /proc/acpi/lths}}&lt;br /&gt;
&lt;br /&gt;
===HAL support===&lt;br /&gt;
&lt;br /&gt;
HAL support also can also be configured To do so, create the file {{path|/etc/hal/fdi/information/10-ultrabay.fdi}} as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt; &amp;lt;!-- -*- SGML -*- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;deviceinfo version=&amp;quot;0.2&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;device&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- UltraBay Devices --&amp;gt;&lt;br /&gt;
    &amp;lt;match key=&amp;quot;storage.bus&amp;quot; string=&amp;quot;ide&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;match key=&amp;quot;storage.physical_device&amp;quot; string=&amp;quot;/org/freedesktop/Hal/devices/pci_8086_24ca_ide_1_0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;merge key=&amp;quot;storage.hotpluggable&amp;quot; type=&amp;quot;bool&amp;quot;&amp;gt;true&amp;lt;/merge&amp;gt;&lt;br /&gt;
      &amp;lt;/match&amp;gt;&lt;br /&gt;
    &amp;lt;/match&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/device&amp;gt;&lt;br /&gt;
&amp;lt;/deviceinfo&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
For more details see HAL section for ata driver.&lt;br /&gt;
&lt;br /&gt;
==Other comments==&lt;br /&gt;
&lt;br /&gt;
If you are hot-swapping a hard disk on a disk tray, make sure the disk does not have a password set, otherwise it will not be recognized on reinsertion.&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripts]]&lt;br /&gt;
[[Category:HOWTOs]]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Conexant_HSF_modem_drivers&amp;diff=37568</id>
		<title>Conexant HSF modem drivers</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Conexant_HSF_modem_drivers&amp;diff=37568"/>
		<updated>2008-05-04T11:57:04Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: /* The Linuxant hsf driver */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following modems, available in some ThinkPad models, use the Conexant HSF softmodem chip, and require an appropriate driver:&lt;br /&gt;
&lt;br /&gt;
* [[ThinkPad 56K Modem (MDC-1.5)]]&lt;br /&gt;
* [[IBM Integrated 56K Modem (MDC-2)]]&lt;br /&gt;
* [[IBM Integrated Bluetooth III with 56K Modem (BMDC-2)]]&lt;br /&gt;
* [[IBM Integrated Bluetooth IV with 56K Modem (BMDC-3)]]&lt;br /&gt;
&lt;br /&gt;
Two drivers are currently available.&lt;br /&gt;
&lt;br /&gt;
===The Smartlink smlink driver===&lt;br /&gt;
The Linux driver for Agere modems from [http://www.smlink.com/ SmartLink] supports both 2.4 and 2.6 kernels. However, it does not work with the newer Intel ICH6 controllers (used, e.g., on the ThinkPad {{R52}} and {{T43}}; trouble on the {{G41}} has also been [[Installing Debian on a ThinkPad G41|reported]]). Some users report that AT commands work but dialing does not.&lt;br /&gt;
&lt;br /&gt;
The {{path|snd_intel8x0m}} kernel module also (incorrectly?) recognizes the [[IBM Integrated Bluetooth III with 56K Modem (BMDC-2)|BMDC-2]]. At least scanModem works with it. About {{path|snd_intel8x0m}} see [[Modem_Daughter_Card_(MDC)|MDC]].&lt;br /&gt;
&lt;br /&gt;
===The Linuxant hsf driver===&lt;br /&gt;
The commercial [http://www.linuxant.com/drivers/hsf/index.php Conexant HSF] driver from [http://www.linuxant.com Linuxant] supports these modem and work also on ICH6 models (e.g., ThinkPad {{R52}}, {{R51}}, {{T43}}, and {{Z60m}}).&lt;br /&gt;
&lt;br /&gt;
It offers free limited evaluation at 14.4kbps, and the full version costs $19.99. The license is tied to the specific CDC modem daughter card, so if you replace your modem card you will need to buy a new license.&lt;br /&gt;
&lt;br /&gt;
Download: http://www.linuxant.com/drivers/hsf/full/downloads.php&lt;br /&gt;
* For Ubuntu, Dell released an OEM version of the linux driver (with 56K and fax support). You can download it [http://support.dell.com/support/downloads/download.aspx?c=us&amp;amp;l=en&amp;amp;s=gen&amp;amp;releaseid=R155004&amp;amp;SystemID=INSPIRONI6400/E1505&amp;amp;servicetag=&amp;amp;os=UBLN&amp;amp;osl=en&amp;amp;deviceid=8593&amp;amp;devlib=0&amp;amp;typecnt=0&amp;amp;vercnt=1&amp;amp;catid=-1&amp;amp;impid=-1&amp;amp;formatcnt=1&amp;amp;libid=20&amp;amp;fileid=206745 here]. Newer versions for i386 and x86_64 packaged in .tar.gz, .deb and .rpm can be found [http://linux.dell.com/files/ubuntu/hardy/modem-drivers/hsf/ here]&lt;br /&gt;
&lt;br /&gt;
This driver works well with reliable connections. It does not support voice or telephony features.&lt;br /&gt;
&lt;br /&gt;
====Installation====&lt;br /&gt;
* Fedora Core: use the provided RPMs. If using a custom kernel, choose the &amp;quot;Generic packages with source&amp;quot; in the [https://www.linuxant.com/drivers/hsf/full/downloads.php#generic HSF downloads page].&lt;br /&gt;
* Debian: run {{cmdroot|dpkg -i hsfblablabla.deb}}. When asked you for the code, enter &amp;quot;FREE&amp;quot; for the 14.4kbps evaluation.&lt;br /&gt;
* Gentoo: the hsfmodem package is in portage.&lt;br /&gt;
&lt;br /&gt;
If you are running a 2.6.15.* kernel, you might consider running:&lt;br /&gt;
 # hsfconfig --patch &lt;br /&gt;
first, and apply the appropriate patch (there is an issue with hsfmodem and 2.6.15 tree that results in kernel oops. &lt;br /&gt;
The patch provided by Conexant fixes that). It looks like this command has to be run in console (rather than e.g. xterm, &lt;br /&gt;
as the menu issues some escape sequences that garble the output in xterm)&lt;br /&gt;
&lt;br /&gt;
====Suspend/resume====&lt;br /&gt;
The hsfmodem driver may prevent your machine from going into suspend. If so, you may remove them prior to sleep by adding to your suspend script:&lt;br /&gt;
 modprobe -r hsfmc97ich hsfserial hsfengine hsfosspec hsfsoar&lt;br /&gt;
The drivers should be automatically re-loaded upon resume by the hotplug system, if not, just manually restart hotplug or modprobe the individual drivers, adding this to your suspend script if needed.&lt;br /&gt;
&lt;br /&gt;
If you use the &amp;lt;tt&amp;gt;hibernate&amp;lt;/tt&amp;gt; script on Fedora Core, simple add this to {{path|/etc/hibernate/hibernate.conf}}:&lt;br /&gt;
 OnSuspend 12 service hsf stop&lt;br /&gt;
 OnResume  12 service hsf start&lt;br /&gt;
&lt;br /&gt;
====Problem with Software Suspend 2====&lt;br /&gt;
Version 7.47.00.01 works fine with [[Software Suspend 2]].&lt;br /&gt;
&lt;br /&gt;
The version 7.43.00.01 of the HSF driver conflicted with [[Software Suspend 2]]. The needed patch isn't available from Linuxant anymore.&lt;br /&gt;
&lt;br /&gt;
For {{Fedora}} systems, the procedure for generating and installing a patched RPM is as follows:&lt;br /&gt;
*Download tarball and patches:&lt;br /&gt;
:{{cmdroot|wget http://www.linuxant.com/dri[[Software Suspend 2]]vers/hsf/full/archive/hsfmodem-7.43.00.01full/hsfmodem-7.43.00.01full.tar.gz}}&lt;br /&gt;
:{{cmdroot|wget http://www.linuxant.com/drivers/hsf/full/archive/patches/hsf-7.43.00.01-suspend2.patch}}&lt;br /&gt;
:{{cmdroot|wget http://www.linuxant.com/drivers/hsf/full/archive/patches/hsf-7.43.00.01-try_to_freeze-2.patch}}&lt;br /&gt;
*Build the RPM:&lt;br /&gt;
:{{cmdroot|mkdir hsf-workdir}}&lt;br /&gt;
:{{cmdroot|cd hsf-workdir}}&lt;br /&gt;
:{{cmdroot|tar xzvf ../hsfmodem-7.43.00.01full.tar.gz}}&lt;br /&gt;
:{{cmdroot|cd hsfmodem-7.43.00.01full}}&lt;br /&gt;
:{{cmdroot|patch -i ../../hsf-7.43.00.01-suspend2.patch -p1}}&lt;br /&gt;
:{{cmdroot|patch -i ../../hsf-7.43.00.01-try_to_freeze-2.patch -p1}}&lt;br /&gt;
:{{cmdroot|cd ..}}&lt;br /&gt;
:{{cmdroot|tar czvf hsfmodem-7.43.00.01full.tar.gz hsfmodem-7.43.00.01full}}&lt;br /&gt;
:{{cmdroot|rpmbuild -ta hsfmodem-7.43.00.01full.tar.gz}}&lt;br /&gt;
*Install the RPM:&lt;br /&gt;
:{{cmdroot|rpm -e hsfmodem}}&lt;br /&gt;
:{{cmdroot|rpm -Uvh /usr/src/redhat/RPMS/i386/hsfmodem-7.43.00.01full-1.i386.rpm}}&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Problems_with_fglrx&amp;diff=37520</id>
		<title>Problems with fglrx</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Problems_with_fglrx&amp;diff=37520"/>
		<updated>2008-04-30T15:09:06Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: Undo revision 37511 by Dave abrahams (Talk) This page is about problems with fglrx, not USB devices&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page discusses issues with the ATI proprietary [[fglrx]] display driver.&lt;br /&gt;
&lt;br /&gt;
== Known Troubles and Solutions ==&lt;br /&gt;
&lt;br /&gt;
=== X-specific issues ===&lt;br /&gt;
&lt;br /&gt;
==== upgrading xserver-xorg ====&lt;br /&gt;
ATI proprietary drivers version 8.21.7 and later work with x.org 6.9.&lt;br /&gt;
&lt;br /&gt;
If you are running an older version (8.20.8) under Debian sid and you upgrade your xserver-xorg, apt will force you to remove any debian-packaged fglrx drivers (package fglrx-driver depends on x.org &amp;lt;&amp;lt; 6.8.99).  You can just download the driver from the ATI site and install after modifying the Debian packager script to allow dependencies to be satisfied by x.org 6.9, or just download 8.21.7 and install manually.  See talk page for step-by-step commands.&lt;br /&gt;
&lt;br /&gt;
After installing the fglrx driver, you can use module-assist to build the appropriate kernel module.&lt;br /&gt;
&lt;br /&gt;
==== new Xorg ID Scheme ====&lt;br /&gt;
ATI proprietary drivers &amp;lt;=8.36.5 with xorg &amp;gt;=7.1.0-18 (==1.3.0.0) in Debian Sid and Fedora ([http://www.sidux.com/PNphpBB2-viewtopic-t-3162-postdays-0-postorder-asc.html Debian] and [http://www.phoronix.net/forums/showthread.php?t=2382 Fedora] Forum Entries)&lt;br /&gt;
&lt;br /&gt;
Ubuntu feisty made their own xorg with the standard id of 7.2, to work around this issue.&lt;br /&gt;
&lt;br /&gt;
Xorg has changed its ID Scheme in newer Versions, and fglrx cannot cope with that (Error message saying &amp;quot;[...] X version mismatch - detected X.org 1.3.-1.905, required X.org 7.1.0.0 [...]&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
A binary hack solves the Problem [http://rage3d.com/board/showthread.php?s=4638d94143536f6acacbccd8f0443472&amp;amp;t=33889029 (rage3d.com Forum Entry)]. This is a very '''dirty''' solution, and is probably violating the ATI driver license. &lt;br /&gt;
&lt;br /&gt;
Simply using the open source ati driver (or holding back the xorg upgrades) until a new driver is released, is suggested.&lt;br /&gt;
&lt;br /&gt;
As of version 8.37.6, this issue is solved. No more binary hacking needed.&lt;br /&gt;
&lt;br /&gt;
=== Kernel-specific troubles ===&lt;br /&gt;
&lt;br /&gt;
Using ATI drivers &amp;lt;=8.21.7 with kernel &amp;gt;=2.6.15 needs a [http://marc.theaimsgroup.com/?l=linux-kernel&amp;amp;m=113429835515001&amp;amp;w=2 patch].  (see table below for detail.) If you can't compile the driver modules with 2.6.15 or later, you should apply this [http://www.ksp.sk/~rasto/fglrx_with_2.6.15.patch patch] instead. &lt;br /&gt;
&lt;br /&gt;
If you do not use one of these patches, you may experience peculiar lockups of X.  Try {{cmduser|fglrxinfo}} - if your shell hangs at the end of this command, you may have an issue and should try the patch or upgrade.&lt;br /&gt;
&lt;br /&gt;
Although unproven, there is a substantial amount of user / developer concern that the above patches prevent hard lockups but do not provide full reliability with 2.6.15 and there are larger / redisgn issues preventing compatibility.  These issues have been fixed with later ATI drivers (&amp;gt; 8.21.7) so you can simply upgrade if you are running a more modern kernel.&lt;br /&gt;
&lt;br /&gt;
==== 2.6.23 ====&lt;br /&gt;
In 2.6.23 release cycle, config option CONFIG_SUSPEND_SMP got renamed to CONFIG_PM_SLEEP_SMP. fglrx uses this variable for disabling power management on older kernels. As a result, SMP users running 2.6.23 weren't able to resume properly (almost instant lockup in that rare case fglrx managed to show a few usable pixels. A [http://linux.derkeiler.com/Mailing-Lists/Kernel/2007-10/msg03437.html quick patch] is available.&lt;br /&gt;
&lt;br /&gt;
=== No hardware acceleration ===&lt;br /&gt;
&lt;br /&gt;
====Acceleration lost after driver update====&lt;br /&gt;
If you lose hardware acceleration after a driver update this can be caused by an old fglrx kernel module being loaded.&lt;br /&gt;
&lt;br /&gt;
Check out {{path|1=/var/log/Xorg.0.log}} for a message like:&lt;br /&gt;
:&amp;lt;code&amp;gt;(WW) fglrx(0): Kernel Module version does *not* match driver.&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;(EE) fglrx(0): incompatible kernel module detected - HW accelerated OpenGL will not work&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can verify this yourself by looking at the version message some lines above. It should read something not matching the installed version like:&lt;br /&gt;
:&amp;lt;code&amp;gt;(II) fglrx(0): Kernel Module Version Information:&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;(II) fglrx(0):     Name: fglrx&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;(II) fglrx(0):     Version: 8.10.19&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The cause for this trouble might be that there resist multiple versions of the fglrx module within the kernel module search path.&amp;lt;br&amp;gt;&lt;br /&gt;
Go to {{path|1=/lib/modules/&amp;lt;your linux kernel version&amp;gt;/}} and type {{cmdroot|1=grep fglrx modules.dep}}.&amp;lt;br&amp;gt;&lt;br /&gt;
If grep finds multiple lines you nailed down the problem. All you have to do now is to delete any versions of the module (look at the filedate) but the most current one. Then run {{cmdroot|1=depmod}} and you are done.&lt;br /&gt;
&lt;br /&gt;
{{HINT|Newer versions (8.21.7) of the fglrx module seem to be installed in the &amp;lt;code&amp;gt;extra/&amp;lt;/code&amp;gt; subdirectory.&amp;lt;br&amp;gt;&lt;br /&gt;
Older versions (8.19.10) used to be located in the &amp;lt;code&amp;gt;kernel/drivers/char/drm/&amp;lt;/code&amp;gt; subdirectory.}}&lt;br /&gt;
&lt;br /&gt;
====GCC 3.4====&lt;br /&gt;
If the ATI driver works only without the hardware acceleration, take into consideration that {{path|fglrx_dri.so}} was linked against libstdc++.so.5 which may not be present if your system uses gcc-3.4.&lt;br /&gt;
&lt;br /&gt;
To fix this, compile gcc-3.3.5 and copy &amp;lt;tt&amp;gt;libstdc++.so.5*&amp;lt;/tt&amp;gt; to {{path|/usr/lib}} and update the dynamic linker cache via {{cmdroot|ldconfig}}.&lt;br /&gt;
&lt;br /&gt;
Or install a compat package for your favorite distro. FC4 users can do:&lt;br /&gt;
:{{cmdroot|yum install libstdc++.so.5}}&lt;br /&gt;
&lt;br /&gt;
====radeonfb framebuffer====&lt;br /&gt;
Another possible cause for broken hardware acceleration (2D and 3D) is the radeonfb framebuffer: Switching to vesafb or vesafb-tng is reported to solve the problem on some systems. Also it has proven helpful to not perform {{cmdroot|modprobe fglrx}} after boot but to have the module loaded via {{path|/etc/modules.autoload/kernel2.x}} at boottime instead.&lt;br /&gt;
&lt;br /&gt;
====Perpetual Mesa GLX Indirect on Debian====&lt;br /&gt;
If you've done everything right and you're still seeing:&lt;br /&gt;
&lt;br /&gt;
:{{cmduser|fglrxinfo}}&lt;br /&gt;
:{{cmdresult|display: :0.0  screen: 0}}&lt;br /&gt;
:{{cmdresult|OpenGL vendor string: Mesa project: www.mesa3d.org}}&lt;br /&gt;
:{{cmdresult|OpenGL renderer string: Mesa GLX Indirect}}&lt;br /&gt;
:{{cmdresult|OpenGL version string: 1.2 (1.5 Mesa 6.4.1)}}&lt;br /&gt;
&lt;br /&gt;
try this:&lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|mkdir -p /usr/X11R6/lib/modules/dri}}&lt;br /&gt;
:{{cmdroot|ln -s /usr/lib/dri/fglrx_dri.so /usr/X11R6/lib/modules/dri}}&lt;br /&gt;
&lt;br /&gt;
Thanks to Maciej Matysiak for the clear debug [http://lists.debian.org/debian-amd64/2006/02/msg00217.html here] and solution [http://lists.debian.org/debian-amd64/2006/02/msg00311.html here].&lt;br /&gt;
&lt;br /&gt;
More generally, use LIBGL_DEBUG=verbose fglrxinfo, to see what's happening, and whether you get this:&lt;br /&gt;
:{{cmduser|&amp;lt;nowiki&amp;gt;LIBGL_DEBUG=verbose&amp;lt;/nowiki&amp;gt; fglrxinfo}}&lt;br /&gt;
:{{cmdresult|libGL: XF86DRIGetClientDriverName: 8.26.18 fglrx (screen 0)}}&lt;br /&gt;
:{{cmdresult|libGL: OpenDriver: trying /usr/X11R6/lib/modules/dri/fglrx_dri.so}}&lt;br /&gt;
:{{cmdresult|libGL error: dlopen /usr/X11R6/lib/modules/dri/fglrx_dri.so failed (/usr/X11R6/lib/modules/dri/fglrx_dri.so: cannot open shared object file: No such file or directory)}}&lt;br /&gt;
:{{cmdresult|libGL error: unable to find driver: fglrx_dri.so}}&lt;br /&gt;
:{{cmdresult|display: :0.0  screen: 0}}&lt;br /&gt;
:{{cmdresult|OpenGL vendor string: Mesa project: www.mesa3d.org}}&lt;br /&gt;
:{{cmdresult|OpenGL renderer string: Mesa GLX Indirect}}&lt;br /&gt;
:{{cmdresult|OpenGL version string: 1.2 (1.5 Mesa 6.4.2)}}&lt;br /&gt;
&lt;br /&gt;
instead of that:&lt;br /&gt;
:{{cmduser|&amp;lt;nowiki&amp;gt;LIBGL_DEBUG=verbose&amp;lt;/nowiki&amp;gt; fglrxinfo}}&lt;br /&gt;
:{{cmdresult|libGL: XF86DRIGetClientDriverName: 8.26.18 fglrx (screen 0)}}&lt;br /&gt;
:{{cmdresult|libGL: OpenDriver: trying /usr/X11R6/lib/modules/dri/fglrx_dri.so}}&lt;br /&gt;
:{{cmdresult|libGL: XF86DRIGetClientDriverName: 8.26.18 fglrx (screen 0)}}&lt;br /&gt;
:{{cmdresult|drmOpenByBusid: busid is PCI:1:0:0}}&lt;br /&gt;
:{{cmdresult|drmOpenDevice: minor is 0}}&lt;br /&gt;
:{{cmdresult|drmOpenDevice: node name is /dev/dri/card0}}&lt;br /&gt;
:{{cmdresult|drmOpenDevice: open result is 4, (OK)}}&lt;br /&gt;
:{{cmdresult|drmOpenByBusid: drmOpenMinor returns 4}}&lt;br /&gt;
:{{cmdresult|drmOpenByBusid: drmGetBusid reports PCI:1:0:0}}&lt;br /&gt;
:{{cmdresult|Can't open configuration file /home/merlin/.drirc: No such file or directory.}}&lt;br /&gt;
:{{cmdresult|fglrx: DPD supported.}}&lt;br /&gt;
:{{cmdresult|display: :0.0  screen: 0}}&lt;br /&gt;
:{{cmdresult|OpenGL vendor string: ATI Technologies Inc.}}&lt;br /&gt;
:{{cmdresult|OpenGL renderer string: MOBILITY FIREGL T2 Pentium 4 (SSE2) (FireGL) (GNU_ICD)}}&lt;br /&gt;
:{{cmdresult|OpenGL version string: 2.0.5879 (8.26.18)}}&lt;br /&gt;
&lt;br /&gt;
I have contacted ATI to add that info by default, the mesa guys to do that in glxinfo too, as well as the debian packager to fix the debian packaging bug (2006/07/22), so hopefully the situation will improve soon&lt;br /&gt;
&lt;br /&gt;
You may have to run fglrxinfo as root to get this detail rather than a useless message.&lt;br /&gt;
&lt;br /&gt;
==== Where to look for fglrx_dri.so (gentoo and general)====&lt;br /&gt;
After installing a new kernel (linux-2.6.20-gentoo-r7) with gentoo I again was not able to get the ATI driver working&lt;br /&gt;
correctly. But now I found out what the problem was:&lt;br /&gt;
&lt;br /&gt;
I tried &lt;br /&gt;
:{{cmduser|&amp;lt;nowiki&amp;gt;LIBGL_DEBUG=verbose&amp;lt;/nowiki&amp;gt; fglrxinfo}}&lt;br /&gt;
:{{cmdresult|libGL: XF86DRIGetClientDriverName: 8.35.5 fglrx (screen 0)}}&lt;br /&gt;
:{{cmdresult|libGL: OpenDriver: trying /usr/lib32/dri/fglrx_dri.so}}&lt;br /&gt;
:{{cmdresult|libGL error: dlopen /usr/lib32/dri/fglrx_dri.so failed (/usr/lib32/dri/fglrx_dri.so: wrong ELF class: ELFCLASS32)}}&lt;br /&gt;
:{{cmdresult|libGL error: unable to find driver: fglrx_dri.so}}&lt;br /&gt;
&lt;br /&gt;
The error itself makes sense, because I am running a 64-Bit linux on AMD. The question was, why libGL tries to look&lt;br /&gt;
in /usr/lib32 only...&lt;br /&gt;
&lt;br /&gt;
After some digging around I found out, that apparently 8.35.5 version of the driver uses the environment variable&lt;br /&gt;
'''LIBGL_DRIVERS_PATH''' to find out where it should look for the &amp;quot;fglrx_dri.so&amp;quot; driver.&lt;br /&gt;
&lt;br /&gt;
Now in my case this environment variable pointed to &amp;quot;/usr/lib32/dri&amp;quot; and that was what caused the problem.&lt;br /&gt;
So doing&lt;br /&gt;
:{{cmduser|&amp;lt;nowiki&amp;gt;export LIBGL_DRIVERS_PATH='/usr/lib64/dri:/usr/lib32/dri'&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
solved the problem in my case.&lt;br /&gt;
&lt;br /&gt;
As mentioned I use gentoo. After some more digging around I found out, that it is apparently necessary to call&lt;br /&gt;
:{{cmduser|env-update}}&lt;br /&gt;
after a re-install of the ATI driver. To be more specific, it seems that &amp;quot;eselect opengl set ati&amp;quot; sometimes&lt;br /&gt;
does something wrong. &amp;quot;env-update&amp;quot; seems to repair the problem so that afterwards the '''LIBGL_DRIVERS_PATH'''&lt;br /&gt;
environment variable is set correctly when you log in.&lt;br /&gt;
&lt;br /&gt;
If you want to check, look in &amp;lt;code&amp;gt;/etc/profile.env&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/etc/profile.csh&amp;lt;/code&amp;gt;. This is the&lt;br /&gt;
place where the '''LIBGL_DRIVERS_PATH''' environment variable gets set.&lt;br /&gt;
&lt;br /&gt;
=== Softlink hell ===&lt;br /&gt;
The [[fglrx]] installer replaces the standard X.org OpenGL implementation (Mesa) with its own files, potentially causing collisions with the distribution's file and package management. It is best to install the driver via a package built for your distribution, which will typically include the necessary kludges to make things work. See the [[fglrx]] page for pointers.&lt;br /&gt;
&lt;br /&gt;
====Discussion====&lt;br /&gt;
If using {{cmduser|fglrxinfo}} after installing [[fglrx]] indicates that you are still using the mesa indirect software GL renderer, you likely have some misplaced softlinks.  It seems like it has to do with an apt-get upgrade that sometimes replaces these links.  Anyway, go to&lt;br /&gt;
:{{cmdroot|cd /usr/X11R6/lib}}&lt;br /&gt;
and list your GL libraries and links&lt;br /&gt;
:{{cmdroot|ls -la *GL*}}&lt;br /&gt;
You should see something like the following two lines amoung others:&lt;br /&gt;
:{{cmdresult|libGL.so -&amp;gt; libGL.so.1.2}}&lt;br /&gt;
:{{cmdresult|libGL.so.1 -&amp;gt; libGL.so.1.2}}&lt;br /&gt;
If you see a link to a mesa library (something like {{cmdresult|... -&amp;gt; libGL.mesa.1.2}}), then that's your problem!  Restore the softlink like this (use your actual library version, though):&lt;br /&gt;
:{{cmdroot|ln -s libGL.so.1.2 libGL.so.1}}&lt;br /&gt;
&lt;br /&gt;
For some reason, this link might &amp;quot;break&amp;quot; later, giving you the software rendering once more.  Even after renaming the mesa library to something like &amp;lt;tt&amp;gt;mesa.bkup&amp;lt;/tt&amp;gt;, the system might still find it and link to it despite the name change.  If you have to do this a lot, you could write a restoreGL script.&lt;br /&gt;
&lt;br /&gt;
=====Gentoo=====&lt;br /&gt;
{{Gentoo}} has built in tools for managing the OpenGL symlinks.  &lt;br /&gt;
:{{cmdroot|eselect opengl set ati}}&lt;br /&gt;
If &amp;lt;tt&amp;gt;eselect opengl ati&amp;lt;/tt&amp;gt; doesn't fix it for you, you should probably tell [http://bugs.gentoo.org Gentoo Bugzilla] (assuming they don't know yet).&lt;br /&gt;
&lt;br /&gt;
If {{cmdroot|ldd /usr/X11R6/bin/glxinfo}} shows that your system still uses the xorg-x11 mesa libs after trying one of the above commands, i.e. a line like this:&lt;br /&gt;
:{{cmdresult|1=libGL.so.1 =&amp;gt; /usr/lib/opengl/xorg-x11/lib/libGL.so.1 (0x400a8000)}}&lt;br /&gt;
you will also need to relink {{path|libGl.so.1.2}}:&lt;br /&gt;
:{{cmdroot|cd /usr/lib/opengl/xorg-x11/lib/}}&lt;br /&gt;
:{{cmdroot|mv libGL.so.1.2 libGL.so.1.2_backup}}&lt;br /&gt;
:{{cmdroot|ln -s /usr/lib/libGL.so.1.2 libGL.so.1.2}}&lt;br /&gt;
After another restart of X {{cmduser|fglrxinfo}} should show that it's using the right libs now.&lt;br /&gt;
&lt;br /&gt;
=====Debian=====&lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|rm /usr/lib/libGL.so*}}&lt;br /&gt;
:{{cmdroot|rm /usr/X11R6/lib/libGL.so*}}&lt;br /&gt;
:{{cmdroot|cd /usr/X11R6/lib}}&lt;br /&gt;
:{{cmdroot|cp /usr/lib/fglrx/diversions/lib/libGL.so.1.2 .}}&lt;br /&gt;
:{{cmdroot|ln -s libGL.so.1.2 libGL.so.1}}&lt;br /&gt;
:{{cmdroot|ldconfig}}&lt;br /&gt;
&lt;br /&gt;
=== Troubles using software suspend ===&lt;br /&gt;
&lt;br /&gt;
Resume doesn't work when any AIGLX clients are active.  See https://bugs.launchpad.net/ubuntu/+source/linux-restricted-modules-2.6.24/+bug/197209 for details and a workaround.&lt;br /&gt;
&lt;br /&gt;
Suspend won't work on any distribution which has activated the new SLUB allocator with fglrx &amp;lt; 8.42. This affects e.g. Ubuntu 7.10 Gutsy (see https://bugs.launchpad.net/ubuntu/+source/linux-source-2.6.22/+bug/121653/). The only workaround is currently to compile a custom kernel with SLAB support!&lt;br /&gt;
&lt;br /&gt;
When the computer resumes from suspend, X only displays a garbled image and the computer is frozen.&lt;br /&gt;
The problem is acknowledged in ATI's release notes and in knowledge base entry &amp;lt;strike&amp;gt;[https://support.ati.com/ics/support/KBResult.asp?searchFor=Search+Words&amp;amp;search.x=0&amp;amp;search.y=0&amp;amp;searchOption=id&amp;amp;questionID=737-218+&amp;amp;task=knowledge&amp;amp;searchTime=-1&amp;amp;productID=&amp;amp;folderID=-1&amp;amp;resultLimit=50 737-218]&amp;lt;/strike&amp;gt; [https://support.ati.com/ics/support/KBAnswer.asp?questionID=218 737-218]. Driver version 8.19.10 has &amp;quot;initial support for Suspend and Resume&amp;quot; but is working very nicely for most people (verified on T43, T43p and T42) without vbetool.&lt;br /&gt;
&lt;br /&gt;
If you are using an older version of fglrx, using [http://www.srcf.ucam.org/~mjg59/vbetool/ vbetool] to save/restore the video card state before/after suspend worked for some people. If you use [[Software Suspend 2|Software Suspend 2 (suspend2)]] scripts, you can simply uncomment &amp;lt;tt&amp;gt;EnableVbetool yes&amp;lt;/tt&amp;gt; in {{path|/etc/hibernate/hibernate.conf}}. Be aware though that it breaks suspend/resume for drivers beginning with version 8.19.10, so remember to disable it again when upgrading.&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ tested with the following configurations&lt;br /&gt;
!model!!distro||kernel!!fglrx!!PM!!success!!comments&lt;br /&gt;
|-&lt;br /&gt;
|{{T42}}||SUSE 9.3||2.6.11||8.14.13||swsusp||yes||&lt;br /&gt;
|-&lt;br /&gt;
|{{T41p}}||???||2.6.14||8.19.10||suspend2 2.2-rc9||yes||needs a small [http://mailman.linux-thinkpad.org/pipermail/linux-thinkpad/2005-November/030381.html patch]&lt;br /&gt;
|-&lt;br /&gt;
|{{T42p}}||Debian||2.6.10||Debian packaged||suspend2||yes||&lt;br /&gt;
|-&lt;br /&gt;
|{{T43}}||Debian sid||2.6.14.2||8.19.10||swsusp||yes||works perfectly with 8.19.10 (but not earlier versions!)&lt;br /&gt;
|-&lt;br /&gt;
|{{T43}}||Debian etch||2.6.14.2||8.19.10||swsusp||yes||works perfectly with 8.19.10 and without vbetool&lt;br /&gt;
|-&lt;br /&gt;
|{{T43}}||Ubuntu Breezy||2.6.12-10||8.19.10||swsusp||yes||Perfect.  (Finally.)&lt;br /&gt;
|-&lt;br /&gt;
|{{T43}}||FC4||2.6.14.1||8.19.10||suspend2 2.2-rc9||yes||needs a small [http://mailman.linux-thinkpad.org/pipermail/linux-thinkpad/2005-November/030381.html patch], requires DRI disabled in {{path|xorg.conf}} (hence no 3D acceleration)&lt;br /&gt;
|-&lt;br /&gt;
|{{T43}}||FC4||2.6.14.2||8.19.10||suspend2 2.2-rc11||yes||requires DRI disabled in {{path|xorg.conf}} (hence no 3D acceleration)&lt;br /&gt;
|-&lt;br /&gt;
|{{T43}}||FC4||2.6.14.3||8.19.10||suspend2 2.2-rc13||no||DRI enabled&lt;br /&gt;
|-&lt;br /&gt;
|{{T43}}||FC4||2.6.14.3||8.20.8||suspend2 2.2-rc13||no||DRI enabled&lt;br /&gt;
|-&lt;br /&gt;
|{{T43p}}||FC6||2.6.20-1.2933||8.34.8||swsusp, STR||yes||DRI enabled, occasionally fails, reason unknown.&lt;br /&gt;
|-&lt;br /&gt;
|{{R50p}}||???||???||8.19.10||swsusp||yes||&lt;br /&gt;
|-&lt;br /&gt;
|{{T43p}}||Debian sid||2.6.14||8.19.10||Suspend to RAM||yes||without vbetool or UseDummyXServer, those two ''break'' the resume process here, with DRI enabled&lt;br /&gt;
|-&lt;br /&gt;
|{{T43p}}||Debian sid||2.6.14.3||8.20.8||Suspend to RAM||yes||without vbetool or UseDummyXServer, with DRI enabled&lt;br /&gt;
|-&lt;br /&gt;
|{{R52}}||Debian sid||2.6.15-rc5||8.20.8||swsup||yes||both vbetool and UseDummyXServer disabled, DRI enabled, needs [http://marc.theaimsgroup.com/?l=linux-kernel&amp;amp;m=113429835515001&amp;amp;w=2 patch]&lt;br /&gt;
|-&lt;br /&gt;
|{{T43p}}||Gentoo||[http://packages.gentoo.org/ebuilds/?suspend2-sources-2.6.15-r6 2.6.15]||8.22.5||Suspend to RAM||yes||without vbetool or UseDummyXServer, with DRI enabled - console is garbled until switching back from X&lt;br /&gt;
|-&lt;br /&gt;
|{{T43p}}||Gentoo||[http://packages.gentoo.org/ebuilds/?suspend2-sources-2.6.15-r6 2.6.15]||8.22.5||suspend2 2.2||yes||without vbetool or UseDummyXServer, with DRI enabled&lt;br /&gt;
|-&lt;br /&gt;
|{{T43}}||SUSE 10.1||2.6.16||8.25.18||swsusp||yes||without vbetool or UseDummyXServer, with DRI enabled&lt;br /&gt;
|-&lt;br /&gt;
|{{T43}}||SUSE 10.1||2.6.16||8.25.18||Suspend to RAM||yes||without vbetool or UseDummyXServer, with DRI enabled&lt;br /&gt;
|-&lt;br /&gt;
|{{T60}}||Gentoo 2006.1||2.6.19-suspend2||8.31.5||Suspend2||yes||Everything works: 3D, suspend-to-disk, suspend-to-ram, suspend in X.org, switching to VT's at any moment. Never needed to unload any modules manually, worked immediately. Fglrx driver 8.32.5 totally broke suspend for me, so i'm sticking with 8.31.5. T60 2008-B62 model.&lt;br /&gt;
|-&lt;br /&gt;
|{{T60p}}||Kubuntu 6.06||2.6.15||8.25.18||swsusp||no||Switching to VT to suspend: no resume, X restarts; Not switching: suspend works, garbled X display on resume, later X restarts&lt;br /&gt;
|-&lt;br /&gt;
|{{T60p}}||Kubuntu 6.06 Text Mode||2.6.15||---||swsusp||yes||suspend works in textmode after rmmod fglrx. &lt;br /&gt;
|-&lt;br /&gt;
|{{T60p}}||Debian/unstable/experimental||2.6.18||8.31.5-1 (from debian experimental)||susptoram hibernate debian packages||yes||suspend and resume works with X, 3D acc., Xv overlay... &lt;br /&gt;
|-&lt;br /&gt;
|{{T60p}}||Fedora Core 6 x86_64||2.6.20-1.2962_1.fc6.cubbi_suspend2|| 8.38.6||suspend2 hibernate||yes||suspend2 hibernate and resume working with libata driver (ahci not tested). Xv still broken since 8.35.5.  Have not needed to set extra_pages_allowance thus far.&lt;br /&gt;
|-&lt;br /&gt;
|{{Z61m}}||Debian Sid||2.6.20.7||8.35.5-1||Suspend to RAM||yes||works without any problems, justs needs the usual acpi_sleep hacks&lt;br /&gt;
|-&lt;br /&gt;
|{{Z61m}}||Debian Sid||2.6.20.7||8.35.5-1||Suspend to Disk (Software Suspend)||yes||works without any problems&lt;br /&gt;
|-&lt;br /&gt;
|{{Z61m}}||Debian Sid||2.6.21||8.35.5-1||Suspend to RAM||yes||fglrx module must not be loaded into the kernel, or it won't resume&lt;br /&gt;
|-&lt;br /&gt;
|{{Z61m}}||openSUSE 10.2||2.6.21.5||8.37.6||suspend2 2.2.10||yes||/sys/power/suspend2/extra_pages_allowance must be set to 20000&lt;br /&gt;
|-&lt;br /&gt;
|{{Z61p}}||ARCH Linux||2.6.20||8.35.5-1||Suspend to RAM||yes||works with KDE suspend&lt;br /&gt;
|-&lt;br /&gt;
|{{T60p}}||Gentoo||2.6.22-r8 gentoo-sources||8.39.4||Suspend to RAM,swsusp||yes||swsusp works without hibernate-script installed (installing breaks it), s-to-RAM works only with CONFIG_FB ''disabled'' in kernel. No acpi_sleep=... parameter, no special script, no vbetool.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Troubles with large RAM ===&lt;br /&gt;
Version 8.14.13 (and probably earlier versions) of the driver does not seem to be able to cope with large amounts of RAM: with 512 MB it works, with 1.5 GB it crashes the machine as soon as X is started. The problem is present only if the &amp;lt;tt&amp;gt;fglrx&amp;lt;/tt&amp;gt; kernel module is loaded, but independently of whether {{kernelconf|CONFIG_HIGHMEM||||||}} is enabled. A workaround is to limit RAM by adding the {{bootparm|mem|864m}} kernel parameter.&lt;br /&gt;
&lt;br /&gt;
Version 8.16.20 fixes the problem.&lt;br /&gt;
&lt;br /&gt;
===Display switching ===&lt;br /&gt;
The switching between internal and external display doesn't work with fglrx versions &amp;lt;= 8.24.8, because the driver blocks messing around with the chipset via ACPI. If you want to use this feature (i.e. during presentations), you should use the &amp;lt;tt&amp;gt;vesa&amp;lt;/tt&amp;gt; server instead (experienced with a R52, Kernel 2.6.11, xorg 6.8.2, fglrx 8.16.20). Or boot notebook with CRT connected, it will automatically detect it and display on both.&lt;br /&gt;
&lt;br /&gt;
===Composite Support===&lt;br /&gt;
ATI, as of fglrx 8.42.3 added composite windowing (alpha channel), enabling hardware accelerated translucent windows (primarily for 'eye candy.')  This has not been tested yet, and reports will be added here as users evaluate this versus the R300 open source drivers.&lt;br /&gt;
&lt;br /&gt;
For reference, some discussion of current status of drivers can be found in the Rage3d forums' (http://rage3d.com/board) Linux area.&lt;br /&gt;
&lt;br /&gt;
Composite support is also supported with recent Mesa and Xorg &amp;gt; 7 with the open source 3d radeon / R300 drivers found in the linux kernel or debian's driver repository.  It works with the [[R300]] / FireGL T2 series as found on the T43p extremely well.  This has made rapid progress in speed with the latest few releases, and as of kernel 2.6.23 runs perfectly well with an R300 based card.&lt;br /&gt;
&lt;br /&gt;
===Hardlock on X logout===&lt;br /&gt;
Up from driver version 8.19.10 you will experience a system hard lock when logging out from X, if the session manager (kdm/gdm) is not properly configured. You have to tell the session manager to restart X.&lt;br /&gt;
&lt;br /&gt;
In the kdm config file (gentoo: {{path|/usr/kde/&amp;lt;VERSION&amp;gt;/share/config/kdm/kdmrc}}) you have to add following to the section &amp;lt;code&amp;gt;[X-:*-Core]&amp;lt;/code&amp;gt;: &lt;br /&gt;
 TerminateServer=true&lt;br /&gt;
&lt;br /&gt;
In the gdm config (/etc/gdm/gdm.conf) file add the following to the daemon-section:&lt;br /&gt;
 AlwaysRestartServer=true&lt;br /&gt;
&lt;br /&gt;
Information from the ATI bugtracker: http://ati.cchtml.com/show_bug.cgi?id=239&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another reason of hardlock my be using the wrong AGP driver. Make sure that you have proper drivers for your motherboard loaded before fglrx: (gentoo: {{path|/etc/modules.autoload.d/kernel-2.6}}):&lt;br /&gt;
 intel-agp&lt;br /&gt;
 fglrx&lt;br /&gt;
&lt;br /&gt;
A common problem seems to be mistakenly using ATI Chipset drivers instead of Intel.&lt;br /&gt;
&lt;br /&gt;
Information from gentoo bugtracker: &amp;lt;s&amp;gt;[http://bugs.gentoo.org/show_bug.cgi?id=113685 113685]&amp;lt;/s&amp;gt;. Fixed in 8.25.18&lt;br /&gt;
&lt;br /&gt;
===Cannot switch to VT===&lt;br /&gt;
&lt;br /&gt;
With usplash boot enabled, it may not be possible to switch to a VT from X (Using Alt+Fn). Tested on T60p (Mobility Fire GLV5200) on Ubuntu 6.06 / 6.10 and fglrx 8.25.18 / 8.28.8.  Display may become garbled and system might freeze. Solution (testet on Ubuntu 6.10) is to either remove the &amp;quot;splash&amp;quot; kernel boot parameter or add &amp;quot;vga=791&amp;quot; parameter (&amp;quot;vga=794&amp;quot; can be used on 1400x1050 panel).&lt;br /&gt;
&lt;br /&gt;
http://ati.cchtml.com/show_bug.cgi?id=37 &amp;lt;br&amp;gt;&lt;br /&gt;
https://launchpad.net/distros/ubuntu/+source/usplash/+bug/63558&lt;br /&gt;
&lt;br /&gt;
===Flickering Display===&lt;br /&gt;
&lt;br /&gt;
Some people have reported problems with their display flickering when using ati-drivers newer than 8.14.13. The problem is unclear&lt;br /&gt;
(possibly associated with an incorrect modeline setting) and no known solution exists except to use the open source radeon drivers.&lt;br /&gt;
You can follow this problem here: http://ati.cchtml.com/show_bug.cgi?id=248&lt;br /&gt;
&lt;br /&gt;
===Error messages in system log===&lt;br /&gt;
&lt;br /&gt;
If you find something like the following in {{path|/var/log/messages}}:&lt;br /&gt;
&lt;br /&gt;
:{{cmdresult|kernel: mtrr: base(0xc0000000) is not aligned on a size(0x7ff0000) boundary}}&lt;br /&gt;
:{{cmdresult|kernel: [fglrx:firegl_addmap] *ERROR* mtrr allocation failed (-22)}}&lt;br /&gt;
:{{cmdresult|kernel: [fglrx:firegl_unlock] *ERROR* Process 5132 using kernel context 0}}&lt;br /&gt;
&lt;br /&gt;
try to execute the following line and reload the fglrx module:&lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|1=echo &amp;quot;base=0xd0000000 size=0x8000000 type=write-combining&amp;quot; &amp;gt; /proc/mtrr}}&lt;br /&gt;
&lt;br /&gt;
More detailed instructions can be found [http://ubuntuforums.org/showthread.php?t=115104 here].&lt;br /&gt;
&lt;br /&gt;
===Hang when logging out===&lt;br /&gt;
&lt;br /&gt;
A common problem is that when logging out from X, instead of gettign the KDM or GDM prompt, the system hangs.&lt;br /&gt;
&lt;br /&gt;
This is discussed, including workarounds here: http://ati.cchtml.com/show_bug.cgi?id=239&lt;br /&gt;
&lt;br /&gt;
===No power saving when CRT in use===&lt;br /&gt;
&lt;br /&gt;
When both CRT and LCD are in use, power saving cannot be enabled.&lt;br /&gt;
&lt;br /&gt;
This is reported here: http://ati.cchtml.com/show_bug.cgi?id=304&lt;br /&gt;
&lt;br /&gt;
===WineX / Cedega Installs Software But Errors on Loading Games===&lt;br /&gt;
&lt;br /&gt;
Some users may experience problems with certain FIREGL cards (in my case an ibm t43p laptop with a v3200 ati firegl) whereby projects such as cedega and wine refuse to work with 3d graphics, but native binaries (e.g. quake 4) work fine. A possible workaround is to add the following line in the drivers section of your /etc/X11/xorg.conf &lt;br /&gt;
&lt;br /&gt;
 Option &amp;quot;UseFastTLS&amp;quot; &amp;quot;2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This option used to be configured with the older ati drivers when you ran &amp;quot;fglrxconfig&amp;quot;. I have not yet found a way to get it to appear with &amp;quot;aticonfig&amp;quot;, hence the manual insertion. This option is good for several linux distros I have tried, fedora core 5, ubuntu dapper and suse 10.1. It does not appear to effect performance on natively run programs.&lt;br /&gt;
&lt;br /&gt;
{{NOTE|This may cause problems on machines with a Linux kernel version of 2.6.20 or higher (observed choppy video and video color inversion on T60p with both 2.6.20 and 2.6.21).}}&lt;br /&gt;
&lt;br /&gt;
===Line Appears Below Mouse Cursor===&lt;br /&gt;
&lt;br /&gt;
Some users have reported seeing a line approximately 1 mouse height below the bottom edge of the cursor, which follows the mouse and appears to change color based on the image below the cursor.  This has been seen to happen using fglrx without the kernel module installed (in 2D mode) and additionally on external displays or multiple X servers.  To work around the problem, try disabling the DGA extension by making the following changes to your XFree86.conf or xorg.conf file.  Replace (or comment-out)&lt;br /&gt;
 Load &amp;quot;extmod&amp;quot;&lt;br /&gt;
with&lt;br /&gt;
 SubSection  &amp;quot;extmod&amp;quot;&lt;br /&gt;
  Option  &amp;quot;omit xfree86-dga&amp;quot;&lt;br /&gt;
 EndSubSection&lt;br /&gt;
&lt;br /&gt;
===Freeze while using OpenGL Apps===&lt;br /&gt;
&lt;br /&gt;
Some OpenGL applications such as screensavers or games (SecondLife) cause freezes.  The cursor still moves, but otherwise the machine is unresponsive.  This is the case with Xorg 7.1 and fglrx 8.29.6 using an x1400 and other cards.  The solution is to add the following options to the video Device section in xorg.conf:&lt;br /&gt;
 Option &amp;quot;Capabilities&amp;quot; &amp;quot;0x00000800&amp;quot;&lt;br /&gt;
 Option &amp;quot;KernelModuleParm&amp;quot; &amp;quot;locked-userpages=0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Xv doesn't work correctly with drivers &amp;gt;= 8.36 and Xyyyy-cards===&lt;br /&gt;
&lt;br /&gt;
See [http://ati.cchtml.com/show_bug.cgi?id=677] for further information. It seems as if only Xyyyy-cards are affected. Problem: graphical glitches with mplayer, programs like xine and totem might not start up at all. 8.35 doesn't seem to be affected&lt;br /&gt;
&lt;br /&gt;
===Floating Point Exception with various X apps===&lt;br /&gt;
&lt;br /&gt;
When the X server is left to autodetect the DPI, the fglrx driver may fail to supply the monitor dimensions.  Video output switching may contribute to this bug.&lt;br /&gt;
&lt;br /&gt;
Problems were experienced on T42p with Ubuntu 7.04, xorg-driver-fglrx 7.1.0-8.34.8+2.6.20.5-16.29.&lt;br /&gt;
&lt;br /&gt;
This can be observed with xdpyinfo&lt;br /&gt;
&lt;br /&gt;
:{{cmduser|xdpyinfo | grep dimensions}}&lt;br /&gt;
:{{cmdresult|dimensions:    1280x1024 pixels (0x0 millimeters)}}&lt;br /&gt;
&lt;br /&gt;
Many applications will use the screen size and attempt to calculate DPI, resulting in a divide by zero operation and a SIGFPE.&lt;br /&gt;
&lt;br /&gt;
A work around is to supply the dimensions in /etc/X11/xorg.conf.  Use the DisplaySize parameter within your monitor's configuration.  For example:&lt;br /&gt;
&lt;br /&gt;
  Section &amp;quot;Monitor&amp;quot;&lt;br /&gt;
          Identifier   &amp;quot;Generic Monitor&amp;quot;&lt;br /&gt;
          HorizSync    28.0 - 64.0&lt;br /&gt;
          VertRefresh  43.0 - 60.0&lt;br /&gt;
          Option      &amp;quot;DPMS&amp;quot;&lt;br /&gt;
          DisplaySize 433 351&lt;br /&gt;
  EndSection&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Corrupted 3D display ===&lt;br /&gt;
With driver version 7-12 or later, you may experience a corrupted 3D display, if your horizontal screen resolution is not a multiple of 64. This is a known bug[http://support.ati.com/ics/support/default.asp?deptID=894&amp;amp;task=knowledge&amp;amp;questionID=31720] but ATI support does not have a solution to it yet.&lt;br /&gt;
&lt;br /&gt;
There are two possible workarounds for this bug:&lt;br /&gt;
&lt;br /&gt;
1/ Open the Catalyst Control Center and force the anti-aliasing to at least 2x for all applications. This surprisingly fixes the problem, at the expense of framerate.&lt;br /&gt;
&lt;br /&gt;
2/ As suggested by ATI support, edit the /etc/X11/xorg.conf and find the section &amp;quot;Display&amp;quot;. Add the following line into the &amp;quot;Display&amp;quot; section:&lt;br /&gt;
  Virtual   &amp;lt;width&amp;gt; &amp;lt;height&amp;gt;&lt;br /&gt;
where &amp;lt;width&amp;gt; is the width of your screen in pixels rounded up to the next multiple of 64 and &amp;lt;height&amp;gt; is the height of your screen in pixels.&lt;br /&gt;
For example, if your native resolution is 1400x1050, use&lt;br /&gt;
  Virtual 1408 1050&lt;br /&gt;
&lt;br /&gt;
After starting the X server you can run {{cmdresult|xrandr -s 0}} to restore the X server to a native display resolution, and 3D rendering will still work.&lt;br /&gt;
&lt;br /&gt;
== Patches ==&lt;br /&gt;
The following patches might be needed for certain versions of fglrx. Before you apply any of these, make sure that you really need them, as some distributions include all the necessary patches with the appropriate package (e.g. ati-drivers in gentoo).&lt;br /&gt;
&lt;br /&gt;
===fglrx 8.37.6===&lt;br /&gt;
* For kernel 2.6.22 you need this patch from a [http://www.phoronix.com/forums/showthread.php?t=2849 Phoronix thread].&lt;br /&gt;
&lt;br /&gt;
===fglrx 8.35.5===&lt;br /&gt;
* [http://whoopie.gmxhome.de/linux/patches/2.6.20/fglrx-8.35.5-for-2.6.20.patch For kernel 2.6.20], part of the Fedora packaging scripts in the ATI installer&lt;br /&gt;
&lt;br /&gt;
===fglrx 8.34.8===&lt;br /&gt;
* [http://whoopie.gmxhome.de/linux/patches/2.6.20/fglrx-8.34.8-for-2.6.20.patch For kernel 2.6.20]&lt;br /&gt;
&lt;br /&gt;
===fglrx 8.32.5===&lt;br /&gt;
* [http://whoopie.gmxhome.de/linux/patches/2.6.19/fglrx-8.32.5-for-2.6.19.patch For kernel 2.6.19]&lt;br /&gt;
&lt;br /&gt;
===fglrx 8.23.7===&lt;br /&gt;
* For kernel 2.6.16: [http://mirror.espri.arizona.edu/gentoo/rsync/x11-drivers/ati-drivers/files/ati-drivers-8.22.5-intermodule.patch &amp;lt;tt&amp;gt;intermodule&amp;lt;/tt&amp;gt; patch] and [http://mirror.espri.arizona.edu/gentoo/rsync/x11-drivers/ati-drivers/files/ati-drivers-8.23.7-noiommu.patch &amp;lt;tt&amp;gt;noiommu&amp;lt;/tt&amp;gt; patch]&lt;br /&gt;
&lt;br /&gt;
===fglrx 8.21.7===&lt;br /&gt;
&lt;br /&gt;
* [http://www.ksp.sk/~rasto/fglrx_with_2.6.15.patch for kernels &amp;gt;= 2.6.15]&lt;br /&gt;
&lt;br /&gt;
===fglrx 8.20.8===&lt;br /&gt;
&lt;br /&gt;
* [http://marc.theaimsgroup.com/?l=linux-kernel&amp;amp;m=113429835515001&amp;amp;w=2 for kernel 2.6.15]&lt;br /&gt;
or&lt;br /&gt;
* [http://www.ksp.sk/~rasto/fglrx_with_2.6.15.patch for kernels &amp;gt;= 2.6.15]&lt;br /&gt;
&lt;br /&gt;
===fglrx (problem met at least with version 8.18.8)===&lt;br /&gt;
* [http://lkml.org/lkml/2005/9/22/183 for kernel &amp;gt;= 2.6.13 ]  Missing verify_area bug&lt;br /&gt;
&lt;br /&gt;
===fglrx 8.8.25 ===&lt;br /&gt;
* [http://www.rage3d.com/board/showthread.php?t=33798874 for kernels &amp;gt;= 2.6.10]&lt;br /&gt;
* [http://www.gehirn.org.uk/wiki/images/8.8.25-kernel-2.6.11+.patch For kernels &amp;gt;= 2.6.11-rc1]&lt;br /&gt;
&lt;br /&gt;
===Links ===&lt;br /&gt;
* [http://gentoo-wiki.com/HOWTO_ATI_Drivers Gentoo HOWTO ATI]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=How_to_enable_the_integrated_fingerprint_reader_with_ThinkFinger&amp;diff=37255</id>
		<title>How to enable the integrated fingerprint reader with ThinkFinger</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=How_to_enable_the_integrated_fingerprint_reader_with_ThinkFinger&amp;diff=37255"/>
		<updated>2008-04-05T10:50:33Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: /* GNOME */ add note about sudo and links to bug reports&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[How to enable the fingerprint reader]] has a good explanation for using the fingerprint reader with the closed-source binary driver. But there is also an opensource project called [http://thinkfinger.sourceforge.net ThinkFinger] which does the same, but open.&lt;br /&gt;
&lt;br /&gt;
However: The fingerprint reader is an INSECURE device and gives a false sense of security! There has been quite a bit of research by a hacker named Starbug, a member of the Chaos Computer Club, Berlin, Germany. He outlined in two very good talks how to forge each and every available fingerprint sensor available at the cost of a few euros, using materials from your local hardware store, a digicam and a laser printer! Here's some links:&lt;br /&gt;
* [http://www.ccc.de/updates/2007/umsonst-im-supermarkt?language=en  Fingerprint recognition in supermarkets]&lt;br /&gt;
* [ftp://ftp.ccc.de/pub/video/Fingerabdruck_Hack/fingerabdruck.mpg?language=en Video tutorial for forging fingerprints]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Installing ==&lt;br /&gt;
=== From source ===&lt;br /&gt;
&lt;br /&gt;
Download thinkfinger-0.3.tar.gz from the [http://thinkfinger.sourceforge.net/ homepage] and unpack it somewhere, make sure you have the gcc compiler, libtool, pkg-config, libusb-dev and libpam0g-dev installed, then:&lt;br /&gt;
&lt;br /&gt;
{{cmduser|cd thinkfinger-0.3}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code style=&amp;quot;white-space:nowrap;color:#495988;background-color:white;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;$&amp;lt;/nowiki&amp;gt; ./configure --prefix=/usr --sysconfdir=/etc --with-securedir=/lib/security --with-birdir=/etc/pam_thinkfinger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{cmduser|make}}&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|make install}}&lt;br /&gt;
&lt;br /&gt;
{{NOTE|/lib/security is the directory, where PAM assumes its modules on Debian and openSUSE, it may vary for your distro!}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;make install&amp;quot; doesn't create the birdir we specified (where thinkfinger will store users' biometric info), so create it:&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|mkdir /etc/pam_thinkfinger}}&lt;br /&gt;
&lt;br /&gt;
If everything went OK assert that you find pam_thinkfinger.so in /lib/security typing:&lt;br /&gt;
&lt;br /&gt;
{{cmduser|ls /lib/security}}&lt;br /&gt;
&lt;br /&gt;
=== From package ===&lt;br /&gt;
&lt;br /&gt;
==== Debian ====&lt;br /&gt;
[http://packages.debian.org/source/experimental/thinkfinger Packages] arrived in Debian experimental on Aug 2nd, 2007 (cf. [http://bugs.debian.org/409563 bug #409563]). To access the experimental packages via apt, add the following lines to your sources.list:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# experimental&lt;br /&gt;
deb ftp://mirrors.kernel.org/debian/ experimental main contrib non-free&lt;br /&gt;
deb-src ftp://mirrors.kernel.org/debian/ experimental main contrib non-free&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where of course you may replace mirrors.kernel.org with your mirror of choice. Just make sure that it hosts the experimental repositories.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
aptitude update &lt;br /&gt;
aptitude install libthinkfinger0 libpam-thinkfinger thinkfinger-tools&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
should then get you up and running.&lt;br /&gt;
&lt;br /&gt;
==== Ubuntu ====&lt;br /&gt;
From https://wiki.ubuntu.com/ThinkFinger&lt;br /&gt;
&lt;br /&gt;
Add PPA repositories to your sources.list:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
deb     http://ppa.launchpad.net/jldugger/ubuntu gutsy main restricted universe multiverse&lt;br /&gt;
deb-src http://ppa.launchpad.net/jldugger/ubuntu gutsy main restricted universe multiverse&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install necessary packages:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install thinkfinger-tools  libpam-thinkfinger &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Fedora/Fedora Core ====&lt;br /&gt;
*Packages for Fedora Core 6 are available in &amp;quot;extras&amp;quot; repository (# yum install thinkfinger).&lt;br /&gt;
*Packages for Fedora 7 are available in the &amp;quot;updates&amp;quot; repository (# yum install thinkfinger).&lt;br /&gt;
&lt;br /&gt;
==== Gentoo ====&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
emerge sys-auth/thinkfinger&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== OpenSUSE ====&lt;br /&gt;
openSUSE 10.2 includes the package &amp;quot;libthinkfinger&amp;quot; (version 0.1-7) - you will find newer packages [http://beta1.suse.com/private/thoenig/10.2/thinkfinger/ here].&lt;br /&gt;
&lt;br /&gt;
== Testing the driver ==&lt;br /&gt;
&lt;br /&gt;
Now the driver is installed and should be working. You can try it (as root) with&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|tf-tool --acquire}}&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|tf-tool --verify}}&lt;br /&gt;
&lt;br /&gt;
This will ask you to swipe your finger three times, save the fingerprint to /tmp/test.bir and then verify your fingerprint with the bir-file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Configuring PAM to use ThinkFinger ==&lt;br /&gt;
Now you can configure PAM to use ThinkFinger:&lt;br /&gt;
&lt;br /&gt;
Open {{path|/etc/pam.d/common-auth}} (In FC6, F7, and Gentoo, this file is {{path|/etc/pam.d/system-auth}}):&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|nano -w /etc/pam.d/common-auth}}&lt;br /&gt;
&lt;br /&gt;
Add this line before any pam_unix or pam_unix2 directives:&lt;br /&gt;
 auth     sufficient     pam_thinkfinger.so&lt;br /&gt;
&lt;br /&gt;
If your PAM uses the pam_unix and not the pam_unix2 module, you need to pass a specific argument in&lt;br /&gt;
the /etc/pam.d/common-auth directive to make it consider the password entered at the pam_thinkfinger prompt.&lt;br /&gt;
 auth     required     pam_unix.so try_first_pass&lt;br /&gt;
&lt;br /&gt;
For instance, {{path|/etc/pam.d/common-auth}} looks like this:&lt;br /&gt;
 auth    sufficient      pam_thinkfinger.so&lt;br /&gt;
 auth    required        pam_unix.so nullok_secure try_first_pass&lt;br /&gt;
&lt;br /&gt;
On openSUSE 10.2, it looks like this now:&lt;br /&gt;
 auth    required        pam_env.so&lt;br /&gt;
 auth    sufficient      pam_thinkfinger.so&lt;br /&gt;
 auth    required        pam_unix2.so&lt;br /&gt;
&lt;br /&gt;
Now we are ready to add users to thinkfinger. You can add a fingerprint for a user with:&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|tf-tool --add-user $USERNAME}}&lt;br /&gt;
&lt;br /&gt;
Now the user should be able to login with his finger instead of the password.&lt;br /&gt;
&lt;br /&gt;
If you would like to use thinkfinger for su, you have to enroll the fingerprint for root user with:&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|tf-tool --add-user root}}&lt;br /&gt;
&lt;br /&gt;
{{NOTE|You should see the &amp;quot;Password or swipe finger:&amp;quot; prompt when trying to sudo or su. If you don't, you probably do not have the &amp;quot;User level driver support&amp;quot; compiled into your kernel or the &amp;quot;uinput&amp;quot; module loaded!}}&lt;br /&gt;
&lt;br /&gt;
== xscreensaver/gnome-screensaver ==&lt;br /&gt;
{{NOTE|In Fedora 7, the package has been modified in such a way as to make doing this unnecessary.}}&lt;br /&gt;
&lt;br /&gt;
If you'd like to be able to unlock your screen using the fingerprint reader, you must have current versions of xscreesaver (&amp;gt;~5.03) or gnome-screensaver (&amp;gt;~2.18.2). Then you must give yourself access to the fingerprint reader and your bir-file, because unlike login/gdm/su/sudo, both gnome-screensaver and xscreensaver do not run as root. The following procedure will make the fingerprint reader accessible to members of the &amp;quot;fingerprint&amp;quot; group.&lt;br /&gt;
&lt;br /&gt;
Make the group: {{cmdroot|groupadd fingerprint}}&lt;br /&gt;
&lt;br /&gt;
Save the following as {{path|/etc/udev/rules.d/60-thinkfinger.rules}} (you may need to reboot for this to take effect):&lt;br /&gt;
 #&lt;br /&gt;
 # udev rules file for the thinkfinger fingerprint scanner&lt;br /&gt;
 # &lt;br /&gt;
 # gives access to the fingerprint reader to those in the &amp;quot;fingerprint&amp;quot; group&lt;br /&gt;
 #&lt;br /&gt;
 # Taken from:&lt;br /&gt;
 #  http://www.thinkwiki.org/wiki/How_to_enable_the_fingerprint_reader_with_ThinkFinger&lt;br /&gt;
 # which was taken and modified from:&lt;br /&gt;
 #  http://article.gmane.org/gmane.linux.drivers.thinkfinger/329&lt;br /&gt;
 #&lt;br /&gt;
 &lt;br /&gt;
 # SGS Thomson Microelectronics Fingerprint Reader&lt;br /&gt;
 SYSFS{idVendor}==&amp;quot;0483&amp;quot;, SYSFS{idProduct}==&amp;quot;2016&amp;quot;, SYMLINK+=&amp;quot;input/thinkfinger-%k&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;fingerprint&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # the also-needed uinput device&lt;br /&gt;
 KERNEL==&amp;quot;uinput&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;fingerprint&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, edit {{path|/etc/pam.d/gnome-screensaver}} so that it looks like this:&lt;br /&gt;
 auth    sufficient      pam_thinkfinger.so&lt;br /&gt;
 auth    required        pam_unix.so try_first_pass nullok_secure&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per user:&lt;br /&gt;
&lt;br /&gt;
# Add him to the group: {{cmdroot|gpasswd -a $USERNAME fingerprint}}&lt;br /&gt;
# Make him owner of his bir-file: {{cmdroot|chown $USERNAME:root /etc/pam_thinkfinger/$USERNAME.bir}}&lt;br /&gt;
# Give him read-only access to his bir-file: {{cmdroot|chmod 400 /etc/pam_thinkfinger/$USERNAME.bir}}&lt;br /&gt;
# Give &amp;quot;execute only&amp;quot; access to everyone for the /etc/pam_thinkfinger/ directory: {{cmdroot|chmod o+x /etc/pam_thinkfinger}} (WARNING: this opens up security a little).&lt;br /&gt;
&lt;br /&gt;
== GNOME ==&lt;br /&gt;
&lt;br /&gt;
{{NOTE|1=This problem should be solved if you're using sudo &amp;gt;= 1.6.9p9. Links: [http://savannah.nongnu.org/bugs/?19132], [http://www.sudo.ws/bugs/show_bug.cgi?id=180], [https://bugs.launchpad.net/ubuntu/+source/gksu/+bug/86843]}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
gksu/gksudo doesn't work correctly. It just stays invisible. When starting a su privileged application such as synaptics you will not get prompted for the password. Nevertheless you can swipe your finger and it should authenticate you. Starting synaptics twice makes gksudo visible.&lt;br /&gt;
&lt;br /&gt;
There are two possibilities to solve it:&lt;br /&gt;
* Changing the string &amp;quot;Password or swipe finger:&amp;quot; to a plain &amp;quot;Password:&amp;quot; (like sudo normally would do) in the file pam/pam_thinkfinger.c of the thinkfinger source directory. Of course, in the console you will then only see a &amp;quot;Password:&amp;quot; instead of &amp;quot;Password or swipe finger:&amp;quot; but this is still more usefull than having gksu/gksudo crashing everytime.&lt;br /&gt;
* Patching libgksu with the following patch. This is also a nasty hack until a better solution is implemented.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--- libgksu-2.0.3/libgksu/libgksu.c.orig	2007-06-17 16:00:24.000000000 +0200&lt;br /&gt;
+++ libgksu-2.0.3/libgksu/libgksu.c		2007-06-17 16:00:47.000000000 +0200&lt;br /&gt;
@@ -2663,7 +2663,7 @@&lt;br /&gt;
        */&lt;br /&gt;
       for (counter = 0; counter &amp;lt; 50; counter++)&lt;br /&gt;
 	{&lt;br /&gt;
-	  if (strncmp (buffer, &amp;quot;GNOME_SUDO_PASS&amp;quot;, 15) == 0)&lt;br /&gt;
+	  if (strncmp (buffer, &amp;quot;GNOME_SUDO_PASS&amp;quot;, 15) == 0 || strncmp (buffer, &amp;quot;Password or swi&amp;quot;, 15) == 0)&lt;br /&gt;
 	    break;&lt;br /&gt;
 &lt;br /&gt;
 	  read_line (parent_pipe[0], buffer, 256);&lt;br /&gt;
@@ -2675,7 +2675,7 @@&lt;br /&gt;
       if (context-&amp;gt;debug)&lt;br /&gt;
 	fprintf (stderr, &amp;quot;brute force GNOME_SUDO_PASS ended...\n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
-      if (strncmp(buffer, &amp;quot;GNOME_SUDO_PASS&amp;quot;, 15) == 0)&lt;br /&gt;
+      if (strncmp(buffer, &amp;quot;GNOME_SUDO_PASS&amp;quot;, 15) == 0 || strncmp(buffer, &amp;quot;Password or swi&amp;quot;, 15) == 0)&lt;br /&gt;
 	{&lt;br /&gt;
 	  gchar *password = NULL;&lt;br /&gt;
 	  gboolean prompt_grab;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== KDE ==&lt;br /&gt;
&lt;br /&gt;
Integration in KDE and kdm seems not to be easily possible now. There is a filed [https://bugs.kde.org/show_bug.cgi?id=116682 bug] at kde.org where you can vote for this.&lt;br /&gt;
&lt;br /&gt;
Moreover, kdm in openSUSE 10.3 crashes when pam_thinkfinger is enabled. A possible &amp;quot;workaround&amp;quot; is downgrading to thinkfinger 0.2.2.&lt;br /&gt;
&lt;br /&gt;
Another workaround is to use Fprint from [http://www.reactivated.net/fprint/wiki/Main_Page] which works quite nicely on my X61s and Kubuntu Hardy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This Howto was copied from [[Installing Ubuntu 6.06 on a ThinkPad T43#Fingerprint_Reader]] and then slightly modified.&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=User_talk:Suvankarc&amp;diff=37212</id>
		<title>User talk:Suvankarc</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=User_talk:Suvankarc&amp;diff=37212"/>
		<updated>2008-03-30T09:46:42Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: PLEASE delete this SPAM account&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=How_to_get_special_keys_to_work&amp;diff=37206</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=37206"/>
		<updated>2008-03-29T14:33:03Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: /* Firefox (&amp;lt;3.0) */ remove strange link&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]], [[thinkpad-acpi]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F2}} || lock screen || [[#ibm-acpi events|ibm-acpi]], [[thinkpad-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]], [[thinkpad-acpi]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F7}} || toggle display || [[#ibm-acpi events|ibm-acpi]], [[thinkpad-acpi]], [[#tpb configuration|tpb]] || additional actions || [[Sample Fn-F7 script]]&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F8}} || toggle trackpoint/touchpad || [[#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]], [[thinkpad-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]], [[thinkpad-acpi]], [[#tpb configuration|tpb]], [[KMilo]] || additional actions ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|End}} || brightness down || [[thinkpad-acpi]], [[#tpb configuration|tpb]], [[KMilo]] || additional actions ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|PageUp}} || toggle thinklight || [[thinkpad-acpi]], [[#tpb configuration|tpb]], [[KMilo]] || additional actions ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|Space}} || toggle zoom || [[thinkpad-acpi]], [[#tpb configuration|tpb]], [[KMilo]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|Ins}} || - || [[#ibm-acpi events|ibm-acpi]], [[thinkpad-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 || [[thinkpad-acpi]],[[#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 || [[thinkpad-acpi]], [[#tpb configuration|tpb]], [[KMilo]] || additional actions ||&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Volume down|#494949}} || volume down || [[thinkpad-acpi]], [[#tpb configuration|tpb]], [[KMilo]] || additional actions ||&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Volume mute|#494949}} || mute volume || [[thinkpad-acpi]], [[#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]],[[thinkpad-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]], [[thinkpad-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;
For completeness, note that the WiFi enable/disable switch is located (on the X61 and other models that have it) just under the front edge of the base of the machine.  You should see a small horizontal slider switch.  Enable by sliding it rightwards, disable by sliding it leftwards.&lt;br /&gt;
&lt;br /&gt;
==Triggering key events==&lt;br /&gt;
===ibm-acpi/thinkpad-acpi events===&lt;br /&gt;
Some of the following events require a {{cmdroot|echo enable,0xffff &amp;gt;/proc/acpi/ibm/hotkey}} (when using ibm-acpi) in order to make acpi able to get information on them. Since the newer thinkpad-acpi has a larger number of bits that can be set in the mask, you might try {{cmdroot|echo enable,0xffffffff &amp;gt;/proc/acpi/ibm/hotkey}} if you are using this driver. 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. May vary on different models.&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;
| {{key|Fn}}{{key|End}} || ibm/hotkey HKEY 00000080 00001011&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|PgUp}} || ibm/hotkey HKEY 00000080 00001012&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|Space}} || ibm/hotkey HKEY 00000080 00001014&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Volume up|#494949}}|| ibm/hotkey HKEY 00000080 00001015&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Volume down|#494949}} || ibm/hotkey HKEY 00000080 00001016&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Volume mute|#494949}} || ibm/hotkey HKEY 00000080 00001017&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;
=== ACPI events from the &amp;lt;tt&amp;gt;button&amp;lt;/tt&amp;gt; module===&lt;br /&gt;
&lt;br /&gt;
A few keys can generate ACPI events that result from the &amp;lt;tt&amp;gt;button&amp;lt;/tt&amp;gt; kernel module, as long as they are masked off in the &amp;lt;tt&amp;gt;ibm-acpi&amp;lt;/tt&amp;gt;/&amp;lt;tt&amp;gt;thinkpad-acpi&amp;lt;/tt&amp;gt; hotkey's mask or the hotkey function of the latter module is disabled.&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 !! T60 event&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Power|#494949}} || button/power PWRF 00000080 xxxxxxxx || button/power PWRF 00000080 00000001&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F4}} || button/sleep SLPB 00000080 00000001 || button/sleep SLPB 00000080 00000001&lt;br /&gt;
|-&lt;br /&gt;
| Display lid || button/lid LID 00000080 xxxxxxxx || button/lid LID 00000080 00000001&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 use xkeycaps (an X tool to 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}}, {{X40}}, {{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;
This configuration also enables the respective LED.&lt;br /&gt;
&lt;br /&gt;
Please note, pressing the {{key|Shift}}+{{key|ScrLk}} key combination, without first following the above configuration, will start an accessibility feature, which will allow the numeric keypad to maneuver the mouse pointer.  Starting this accessibility feature and subsequently running xmodmap, as described above, results in the accessibility feature and the numeric lock LED functioning simultaneously.  As such, the above configuration should be completed before the accessibility feature is started in order to produce numbers.&lt;br /&gt;
======T60 (and possibly others)======&lt;br /&gt;
It seems that on the T60, PrtSc, ScrLk and Pause all generate the correct keycodes, however Fn-PrtSc (labelled as SysRq) generates keycode 64 (Alt_L) followed by the expected 111 (Sys_Req) on down and the same thing in the opposite order on release. Fn-ScrLk (labelled as NmLk) does indeed toggle the Numlock, but only seems to register as an X event the first time it is engaged. The above solution does not appear to work. This is perhaps because the Numlock toggle is built into the firmware rather than controlled by the kernel. Finally, Fn-Pause (labelled as Break) generates keycode 37 (Control_L) followed by the expected keycode 110 (Break) on down and the same thing in reverse order on release.&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;
===acpi_fakekey===&lt;br /&gt;
You can turn acpi events into user-level xevents by putting &amp;lt;tt&amp;gt;acpi_fakekey&amp;lt;/tt&amp;gt; commands into the acpi action scripts. There are several layers involved in using acpi keys in this way, so I'll go through the example of using the ThinkVantage button to open xmms.&lt;br /&gt;
&lt;br /&gt;
My ThinkVantage button generates an '''acpi event''' &amp;quot;ibm/hotkey HKEY 00000080 00001018&amp;quot;, so we have the event file &amp;lt;tt&amp;gt;/etc/acpi/events/ThinkVantage&amp;lt;/tt&amp;gt; for it which executes the script &amp;lt;tt&amp;gt;/etc/acpi/actions/fakekey-macro.sh&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
event=ibm/hotkey HKEY 00000080 00001018&lt;br /&gt;
action=/etc/acpi/actions/fakekey-macro.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In turn, the executable &amp;lt;tt&amp;gt;/etc/acpi/actions/fakekey-macro.sh&amp;lt;/tt&amp;gt; script calls acpi_fakekey with the '''key number''' defined in &amp;lt;tt&amp;gt;/usr/share/acpi-support/key-constants&amp;lt;/tt&amp;gt; as $KEY_MACRO which is 112 (you could just as well choose an other key number, just make sure that it doesn't belong to something else like the &amp;quot;j&amp;quot; key or something). &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
. /usr/share/acpi-support/key-constants&lt;br /&gt;
acpi_fakekey $KEY_MACRO &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
I have no idea how this actually corresponds to which xevent is generated, so I can find out out by running the program &amp;lt;tt&amp;gt;xev&amp;lt;/tt&amp;gt; and hitting the ThinkVantage button while the mouse is in the &amp;lt;tt&amp;gt;xev&amp;lt;/tt&amp;gt; window (remember to &amp;lt;tt&amp;gt;/etc/init.d/acpid restart&amp;lt;/tt&amp;gt; first if you just created the &amp;lt;tt&amp;gt;/etc/acpi/events/ThinkVantage&amp;lt;/tt&amp;gt; file). I get something popping up in the terminal where I ran xev that looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
KeyPress event, serial 30, synthetic NO, window 0x2800001,&lt;br /&gt;
    root 0x6a, subw 0x0, time 2000522842, (138,83), root:(781,500),&lt;br /&gt;
    state 0x0, keycode 239 (keysym 0x0, NoSymbol), same_screen YES,&lt;br /&gt;
    XLookupString gives 0 bytes: &lt;br /&gt;
    XmbLookupString gives 0 bytes: &lt;br /&gt;
    XFilterEvent returns: False&lt;br /&gt;
&lt;br /&gt;
KeyRelease event, serial 30, synthetic NO, window 0x2800001,&lt;br /&gt;
    root 0x6a, subw 0x0, time 2000522842, (138,83), root:(781,500),&lt;br /&gt;
    state 0x0, keycode 239 (keysym 0x0, NoSymbol), same_screen YES,&lt;br /&gt;
    XLookupString gives 0 bytes: &lt;br /&gt;
    XFilterEvent returns: False&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This tells me that the &amp;lt;tt&amp;gt;acpi_fakekey 112&amp;lt;/tt&amp;gt; as executed by hitting the ThinkVantage button generates KeyPress event followed by a KeyRelease event with '''keycode''' 239 and that this keycode has been assigned no corresponding '''keysym'''. Thus, I am free to assign the keycode to any keysym I want. You can find a list of available keysyms in &amp;lt;tt&amp;gt;/usr/share/X11/XKeysymDB&amp;lt;/tt&amp;gt;. Again try and pick one that is not likely to have already been taken by something, such as &amp;lt;tt&amp;gt;XF86LaunchA&amp;lt;/tt&amp;gt;. To assign this keysym to keycode 239, you can either edit ~/.Xmodmap on an individual user basis, or edit the systemwide &amp;lt;tt&amp;gt;/etc/X11/Xmodmap&amp;lt;/tt&amp;gt; file to contain the line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
keycode 239 = XF86LaunchA&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you choose to go with the former, you may need to run &amp;lt;tt&amp;gt;xmodmap ~/.Xmodmap&amp;lt;/tt&amp;gt; for every login session in order to read in your ~/.Xmodmap file if your window manager does not do it for you. Regardless of which option you choose, you can run &amp;lt;tt&amp;gt;xmodmap &amp;lt;file&amp;gt;&amp;lt;/tt&amp;gt; to read in the updated Xmodmap file without logging out and logging back in.&lt;br /&gt;
&lt;br /&gt;
You should now find that hitting the ThinkVantage button creates the following output from &amp;lt;tt&amp;gt;xev&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
KeyPress event, serial 55, synthetic NO, window 0x2800001,&lt;br /&gt;
    root 0x6a, subw 0x0, time 2001286078, (0,106), root:(643,523),&lt;br /&gt;
    state 0x0, keycode 239 (keysym 0x1008ff4a, XF86LaunchA), same_screen YES,&lt;br /&gt;
    XLookupString gives 0 bytes: &lt;br /&gt;
    XmbLookupString gives 0 bytes: &lt;br /&gt;
    XFilterEvent returns: False&lt;br /&gt;
&lt;br /&gt;
KeyRelease event, serial 55, synthetic NO, window 0x2800001,&lt;br /&gt;
    root 0x6a, subw 0x0, time 2001286078, (0,106), root:(643,523),&lt;br /&gt;
    state 0x0, keycode 239 (keysym 0x1008ff4a, XF86LaunchA), same_screen YES,&lt;br /&gt;
    XLookupString gives 0 bytes: &lt;br /&gt;
    XFilterEvent returns: False&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note the change of &amp;lt;tt&amp;gt;(keysym 0x0, NoSymbol)&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;(keysym 0x1008ff4a, XF86LaunchA)&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You're now ready to map &amp;lt;tt&amp;gt;XF86LaunchA&amp;lt;/tt&amp;gt; to executing xmms. This is highly dependent on what keygrabber you decide to use. For openbox, I edit my &amp;lt;tt&amp;gt;~/.config/openbox/rc.xml&amp;lt;/tt&amp;gt; file and add the following entry in the  &amp;lt;keyboard&amp;gt; section:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;keybind key=&amp;quot;XF86LaunchA&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;action name=&amp;quot;Execute&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;startupnotify&amp;gt;&lt;br /&gt;
          &amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&lt;br /&gt;
        &amp;lt;/startupnotify&amp;gt;&lt;br /&gt;
        &amp;lt;command&amp;gt;&lt;br /&gt;
	  xmms&lt;br /&gt;
	&amp;lt;/command&amp;gt;&lt;br /&gt;
      &amp;lt;/action&amp;gt;&lt;br /&gt;
    &amp;lt;/keybind&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After, right clicking on the desktop and selecting the &amp;quot;Reconfigure&amp;quot; menu option, you should then have xmms pop up when you hit the ThinkVantage key.&lt;br /&gt;
&lt;br /&gt;
==Example Applications==&lt;br /&gt;
===Web Browsers===&lt;br /&gt;
====Firefox (&amp;lt;3.0)====&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;
&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;
Step 1:  Edit .Xmodmap and add entries for F19 and F20 as explained above.&lt;br /&gt;
&lt;br /&gt;
Step 2:&lt;br /&gt;
&lt;br /&gt;
Note: &amp;lt;firefox-directory&amp;gt; is probably /usr/lib/firefox.&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;
Step 3:  Restart Firefox.&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| 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 and also 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); You can alternatively install the [http://www.pqrs.org/~tekezo/firefox/extensions/functions_for_keyconfig/index.html functions for keyconfig] and set the variable f4kc_NextTab to F20 and f4kc_PrevTab to F19.}}.&lt;br /&gt;
&lt;br /&gt;
====Firefox 3.0====&lt;br /&gt;
Thankfully the people at Mozilla decided to include the expected functionality for the XF86Back and XF86Forward keysyms in the new release so all you need to do is&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;# printf 'keycode 234 = XF86Back\nkeycode 233 = XF86Forward' &amp;gt;&amp;gt; /etc/X11/Xmodmap&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
And to make this take effect immediately (i.e., without having to log out and log in again), as a regular user run:&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;{{cmduser|Xmodmap /etc/X11/Xmodmap}}&amp;lt;/code&amp;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;
===Open an application===&lt;br /&gt;
&lt;br /&gt;
To configure the ThinkVantage button to open a terminal window in Gnome:&lt;br /&gt;
&lt;br /&gt;
Step 1:&lt;br /&gt;
Use xev to find the keycode generated by the button on your machine.  In my case is is 159.&lt;br /&gt;
&lt;br /&gt;
Step 2:&lt;br /&gt;
Create an entry in .Xmodmap like so&lt;br /&gt;
&lt;br /&gt;
keycode 159 = XF86LaunchA&lt;br /&gt;
&lt;br /&gt;
replacing 159 by the keycode found in step 1.  Load the map using&lt;br /&gt;
&lt;br /&gt;
:{{cmd|xmodmap ~/.Xmodmap}}&lt;br /&gt;
&lt;br /&gt;
Step 3:&lt;br /&gt;
Configure the required function (e.g. open terminal window) in System-&amp;gt;Preferences-&amp;gt;Keyboard shortcuts&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;
====Cycling through tabs====&lt;br /&gt;
In Gnome and Xfce4, Ctrl-PageUp/Ctrl-PageDown move to the previous/following open tab in all applications that have tabbed user interfaces (terminal emulator, web browser, ...). To make use of the {{ibmkey|Forward|#494949}} and {{ibmkey|Backward|#494949}} keys for this task, there're two possibilities.&lt;br /&gt;
&lt;br /&gt;
For both ways, you should map the keycodes 233 and 234 to XF86Back and XF86Forward as described in [[#xmodmap_configuration|xmodmap configuration]].&lt;br /&gt;
&lt;br /&gt;
=====Using xautomation=====&lt;br /&gt;
xautomation can be found [http://hoopajoo.net/projects/xautomation.html here].&lt;br /&gt;
&lt;br /&gt;
Create two files with permissions 755:&lt;br /&gt;
&lt;br /&gt;
{{path|/usr/local/bin/tp_back}}:&lt;br /&gt;
&amp;lt;bash&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
/usr/bin/xte 'keydown Control_L' 'keydown Page_Up' 'keyup Page_Up' 'keyup Control_L'&lt;br /&gt;
&amp;lt;/bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{path|/usr/local/bin/tp_forward}}:&lt;br /&gt;
&amp;lt;bash&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
/usr/bin/xte 'keydown Control_L' 'keydown Page_Down' 'keyup Page_Down' 'keyup Control_L'&lt;br /&gt;
&amp;lt;/bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use your desktop's keyboard shortcut editor to assign XF86Back as a shortcut for tp_back and XF86Forward as a shortcut for tp_forward.&lt;br /&gt;
&lt;br /&gt;
This should work in all distros and with all window managers (you might have to use other key combinations than Ctrl-PageUp and Ctrl-PageDown).&lt;br /&gt;
&lt;br /&gt;
=====Redirecting XF86Back/XF86Forward=====&lt;br /&gt;
Create {{path|/etc/X11/xkb/compat/thinkpad}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// $XFree86$&lt;br /&gt;
//  XFree86 special keysyms&lt;br /&gt;
default partial xkb_compatibility &amp;quot;basic&amp;quot;  {&lt;br /&gt;
    interpret.repeat= True;&lt;br /&gt;
&lt;br /&gt;
    interpret  XF86Back {&lt;br /&gt;
        action = Redirect(Key=&amp;lt;PGUP&amp;gt;, modifiers=Control);&lt;br /&gt;
    };&lt;br /&gt;
    interpret  XF86Forward {&lt;br /&gt;
        action = Redirect(Key=&amp;lt;PGDN&amp;gt;, modifiers=Control);&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit {{path|/etc/X11/xkb/compat/complete}} and add &amp;lt;tt&amp;gt;'''augment &amp;quot;thinkpad&amp;quot;'''&amp;lt;/tt&amp;gt; so that it looks similar to the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// $XKeyboardConfig: xkbdesc/compat/complete,v 1.3 2005/10/17 00:42:11 svu Exp $&lt;br /&gt;
// $Xorg: complete,v 1.3 2000/08/17 19:54:34 cpqbld Exp $&lt;br /&gt;
default xkb_compatibility &amp;quot;complete&amp;quot;  {&lt;br /&gt;
    include &amp;quot;basic&amp;quot;&lt;br /&gt;
    augment &amp;quot;iso9995&amp;quot;&lt;br /&gt;
    augment &amp;quot;mousekeys&amp;quot;&lt;br /&gt;
    augment &amp;quot;accessx(full)&amp;quot;&lt;br /&gt;
    augment &amp;quot;misc&amp;quot;&lt;br /&gt;
    augment &amp;quot;xfree86&amp;quot;&lt;br /&gt;
    augment &amp;quot;level5&amp;quot;&lt;br /&gt;
    augment &amp;quot;thinkpad&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&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>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Tp_smapi&amp;diff=35910</id>
		<title>Tp smapi</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Tp_smapi&amp;diff=35910"/>
		<updated>2008-01-14T06:35:56Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: /* Model-specific status */ add R52 EC version&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;
The &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; kernel module exposes some features of the ThinkPad hardware/firmware via a &amp;lt;tt&amp;gt;sysfs&amp;lt;/tt&amp;gt; interface. Currently, the main implemented functionality is control of battery charging and extended battery status. It also includes an improved version of the [[HDAPS]] driver. The underlying hardware interfaces are [[SMAPI support for Linux|SMAPI]] and direct access to the embedded controller.&lt;br /&gt;
&lt;br /&gt;
For older ThinkPad models, see also [[tpctl]].&lt;br /&gt;
&lt;br /&gt;
{{WARN|This driver uses undocumented features and direct hardware access. It thus cannot be guaranteed to work and could conceivably damage your computer (though so far no incidents have been reported).}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
*Battery charge/discharge control&lt;br /&gt;
*Battery status information&lt;br /&gt;
&lt;br /&gt;
===Project Homepage / Availability===&lt;br /&gt;
* Project page: http://tpctl.sourceforge.net/&lt;br /&gt;
* You need to [http://sourceforge.net/project/showfiles.php?group_id=1212&amp;amp;package_id=171579 download] only the &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; package.&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
====Installation from source====&lt;br /&gt;
You will need the kernel headers and makefiles corresponding to your current kernel version. On {{Fedora}}, this means {{cmdroot|yum install kernel-devel-$(uname -r)}} .&lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|tar xzvf tp_smapi-0.34.tgz}}&lt;br /&gt;
:{{cmdroot|cd tp_smapi-0.34}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, either compile and load the driver within the current working directory (for testing):&lt;br /&gt;
:{{cmdroot|make load}}&lt;br /&gt;
OR compile and install into the kernel's module path:&lt;br /&gt;
:{{cmdroot|make install}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you use the [[HDAPS]] driver, add &amp;lt;tt&amp;gt;HDAPS=1&amp;lt;/tt&amp;gt; to also patch the &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; for compatibility with &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; (this requires a kernel source tree matching the current kernel).&lt;br /&gt;
Again, either load the driver within the current working directory:&lt;br /&gt;
:{{cmdroot|1=make load HDAPS=1}}&lt;br /&gt;
OR install into the kernel's module path:&lt;br /&gt;
:{{cmdroot|1=make install HDAPS=1}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To prepare a stand-alone patch against the current kernel tree (including&lt;br /&gt;
a patch against &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; and new &amp;lt;tt&amp;gt;Kconfig&amp;lt;/tt&amp;gt; entries):&lt;br /&gt;
:{{cmdroot|make patch}}&lt;br /&gt;
&lt;br /&gt;
To delete all autogenerated files:&lt;br /&gt;
:{{cmdroot|make clean}}&lt;br /&gt;
&lt;br /&gt;
The original kernel tree is never modified by any these commands. &lt;br /&gt;
The {{path|/lib/modules}} directory is modified only by {{cmdroot|make install}}.&lt;br /&gt;
&lt;br /&gt;
====Installation in Gentoo====&lt;br /&gt;
The {{Gentoo}} portage system carries a [http://packages.gentoo.org/packages/?category=app-laptop;name=tp_smapi tp_smapi package], which follows the latest version pretty closely. On a Gentoo system, you can install and load as follows.&lt;br /&gt;
&lt;br /&gt;
If you use the [[HDAPS]] driver, do this first:&lt;br /&gt;
&lt;br /&gt;
* Configure &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; as module in your kernel&lt;br /&gt;
* Add the &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; use flag in {{path|/etc/make.conf}}&lt;br /&gt;
* {{cmdroot|rmmod hdaps}}&lt;br /&gt;
&lt;br /&gt;
Then:&lt;br /&gt;
&lt;br /&gt;
* {{cmdroot|emerge tp_smapi}} (or install tp_smapi with hdaps support manually, as above)&lt;br /&gt;
* {{cmdroot|echo &amp;quot;tp_smapi&amp;quot; &amp;gt;&amp;gt; /etc/modules.autoload.d/kernel-2.6}}&lt;br /&gt;
* {{cmdroot|echo &amp;quot;hdaps&amp;quot; &amp;gt;&amp;gt; /etc/modules.autoload.d/kernel-2.6}}&lt;br /&gt;
&lt;br /&gt;
Then reboot, or run:&lt;br /&gt;
* {{cmdroot|modprobe tp_smapi}}&lt;br /&gt;
* {{cmdroot|modprobe hdaps}}&lt;br /&gt;
&lt;br /&gt;
====Installation on Debian unstable (sid) or testing (lenny)====&lt;br /&gt;
Debian now contains the [http://packages.debian.org/tp-smapi packaged module source] for use with module-assistant.&lt;br /&gt;
&lt;br /&gt;
* {{cmdroot|apt-get install tp-smapi}}&lt;br /&gt;
* {{cmdroot|m-a -t a-i tp-smapi}}&lt;br /&gt;
&lt;br /&gt;
====Installation on Ubuntu/Debian====&lt;br /&gt;
Installation on Ubuntu or Debian is quite easy, but there are a few things to look after:&lt;br /&gt;
&lt;br /&gt;
To get your system ready for compiling code, install the build-essentials (as root, of course, as all of the following comands; Ubuntu users have to prepend 'sudo' to every line and enter their own password when prompted):&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;apt-get install build-essential&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get tp_smapi to work, obtain the latest source as mentioned above and unpack it. If you want to use HDAPS, you need to install the kernel source matching te kernel you are running. To do so, issue this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;uname -r&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will give you the version of your current kernel. As Ubuntu adds '-generic' to the kernel-version, the following command works for Debian users only:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;apt-get install linux-source-`uname -r`&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ubuntu users use the kernel-version they got by the command before, e.g. 'linux-source-2.6.20'&lt;br /&gt;
&lt;br /&gt;
Now change to the tp_smapi dir:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;cd tp_smapi-X.YY&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt; (X.YY being the version-number of [[tp_smapi]])&lt;br /&gt;
and make and install tp_smapi as instructed above.&lt;br /&gt;
&lt;br /&gt;
If you get an error that the kernel version isn't matching (or that you need to set KSRC/KBUILD), please check that there is a symlink from the modules dir to the kernel source:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;root@localhost:~#ls -l /lib/modules/2.6.20-16-generic&lt;br /&gt;
lrwxrwxrwx  1 root root     28 2007-02-02 08:39 source -&amp;gt; /usr/src/linux-source-2.6.20&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Create the link if the line above is not existent:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;root@localhost:~#ln -s /usr/src/linux-source-2.6.20 /lib/modules/2.6.20-16-generic/source&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the following will build and install the correct modules to their locations:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;make install HDAPS=1&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
To make sure your system loads the modules at boot time, do this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;echo &amp;quot;tp_smapi&amp;quot; &amp;gt;&amp;gt; /etc/modules&lt;br /&gt;
echo &amp;quot;hdaps&amp;quot; &amp;gt;&amp;gt; /etc/modules&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
and update your initramfs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;update-initramfs -u&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get tp_smapi running now, just load the modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;modprobe -a tp_smapi hdaps&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This description was tested on Kubuntu 'Feisty Fawn' and should work on all Debian-based distros with minor tweaks.&lt;br /&gt;
&lt;br /&gt;
'''EDIT:''' Works on Kubuntu 7.10 (&amp;quot;Gutsy Gibbon&amp;quot;), too&lt;br /&gt;
&lt;br /&gt;
===Battery charge control features===&lt;br /&gt;
To set the thresholds for starting and stopping battery charging (in percent of current full charge capacity):&lt;br /&gt;
:{{cmdroot|echo 40 &amp;gt; /sys/devices/platform/smapi/BAT0/start_charge_thresh}}&lt;br /&gt;
:{{cmdroot|echo 70 &amp;gt; /sys/devices/platform/smapi/BAT0/stop_charge_thresh}}&lt;br /&gt;
:{{cmdroot|cat /sys/devices/platform/smapi/BAT0/*_charge_thresh}}&lt;br /&gt;
{{HINT|Battery charging thresholds can be used to keep Li-Ion ad Li-Polymer batteries partially charged, in order to [[Maintenance#Battery_treatment|increase their lifetime]].}}&lt;br /&gt;
To prevent charging for 17 minutes (regardless of thresholds):&lt;br /&gt;
:{{cmdroot|echo 17 &amp;gt; /sys/devices/platform/smapi/BAT0/inhibit_charge_minutes}}&lt;br /&gt;
{{HINT|Charge inhibiting can be used to reduce the power draw of the laptop, in order to use an under-spec power supply that can't handle the combined power draw of running and charging. It can also be used to control which battery is charged when [[How to use UltraBay batteries|using an Ultrabay battery]].}}&lt;br /&gt;
&lt;br /&gt;
To cancel charging preventation:&lt;br /&gt;
:{{cmdroot|echo 0 &amp;gt; /sys/devices/platform/smapi/BAT0/inhibit_charge_minutes}}&lt;br /&gt;
&lt;br /&gt;
To force battery discharging (even if connected to AC):&lt;br /&gt;
:{{cmdroot|echo 1 &amp;gt; /sys/devices/platform/smapi/BAT0/force_discharge}}&lt;br /&gt;
{{HINT|This can be used to choose which battery is discharged when [[How to use UltraBay batteries|using an UltraBay battery]].}}&lt;br /&gt;
&lt;br /&gt;
To cancel forced discharge:&lt;br /&gt;
:{{cmdroot|echo 0 &amp;gt; /sys/devices/platform/smapi/BAT0/force_discharge}}&lt;br /&gt;
&lt;br /&gt;
===Battery status features===&lt;br /&gt;
To view extended battery status such as charging state, voltage, current, capacity, cycle count and model information:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/installed&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/state       # idle/charging/discharging&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/cycle_count&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/current_now # instantaneous current&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/current_avg # last minute average&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/power_now   # instantaneous power&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/power_avg   # last minute average&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/last_full_capacity&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/remaining_percent&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/remaining_running_time&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/remaining_charging_time&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/remaining_capacity&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/design_capacity&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/voltage&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/design_voltage&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/manufacturer&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/model&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/barcoding&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/chemistry&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/serial&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/manufacture_date&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/first_use_date&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/temperature # in milli-Celsius&lt;br /&gt;
# cat /sys/devices/platform/smapi/ac_connected&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The raw status data is also available, including some fields not listed above (in case you can figure them out):&lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|cat /sys/devices/platform/smapi/BAT0/dump}}&lt;br /&gt;
&lt;br /&gt;
In all of the above, replace &amp;lt;tt&amp;gt;BAT0&amp;lt;/tt&amp;gt; with &amp;lt;tt&amp;gt;BAT1&amp;lt;/tt&amp;gt; to address the 2nd battery.&lt;br /&gt;
&lt;br /&gt;
Note that the battery status readout conflicts with the stock [[HDAPS|hdaps]] driver, so if you use &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; you will need to load &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; using {{cmdroot|1=make load HDAPS=1}} (see [[#Bundled hdaps driver|Bundled hdaps driver]] below).&lt;br /&gt;
&lt;br /&gt;
On [[ACPI]]-enabled systems, most of above information is also available through the files under {{path|/proc/acpi/battery}}. However, the ACPI interface does not include the instantaneous power and cycle count readouts, and does not work well when [[How to use UltraBay batteries|hotswapping UltraBay batteries]].&lt;br /&gt;
&lt;br /&gt;
====Scripts====&lt;br /&gt;
Some scripts can make it easier to grep the information you need from tp_smapi&lt;br /&gt;
* [[battery.rb]]&lt;br /&gt;
&lt;br /&gt;
===Other features===&lt;br /&gt;
&lt;br /&gt;
There is also [[sysfs]] attribute for making direct SMAPI requests to the SM BIOS firmware. Don't touch it unless you really know what you're doing. Example:&lt;br /&gt;
 # echo '211a 100 0 0' &amp;gt; /sys/devices/platform/smapi/smapi_request; cat /sys/devices/platform/smapi/smapi_request&lt;br /&gt;
 211a 34b b2 0 0 0 'OK'&lt;br /&gt;
The &amp;quot;4b&amp;quot; in the 2nd value, converted to decimal, is 75: the current charging stop threshold (stop_charge_thresh).&lt;br /&gt;
&lt;br /&gt;
===Bundled &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; driver===&lt;br /&gt;
&lt;br /&gt;
The tp_smapi package includes a modified version of the &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; Linux kernel driver used by the [[HDAPS]] system. To use &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; concurrently, you '''must''' use the modified version.&lt;br /&gt;
&lt;br /&gt;
To build the modified version, simply append the &amp;lt;tt&amp;gt;HDAPS=1&amp;lt;/tt&amp;gt; parameter to the &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt; command (see [[#Installation|Installation]] above):&lt;br /&gt;
:{{cmdroot|1=make load HDAPS=1}}&lt;br /&gt;
or&lt;br /&gt;
:{{cmdroot|1=make install HDAPS=1}}&lt;br /&gt;
&lt;br /&gt;
If you don't do that, you will not be able to load &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; (and its support module &amp;lt;tt&amp;gt;thinkpad_ec&amp;lt;/tt&amp;gt;) when &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; is loaded, and vice versa. You can use &amp;lt;tt&amp;gt;rmmod&amp;lt;/tt&amp;gt; to switch between these modules.&lt;br /&gt;
&lt;br /&gt;
Note that some of the battery status is also visible through ACPI ({{path|/proc/acpi/battery/*}}), independently of &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The modified &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; has several changes:&lt;br /&gt;
* The &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; driver in mainline kernels conflicts with the extended battery status (they use the same IO ports). The modified &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; coordinates this access through the bundled &amp;lt;tt&amp;gt;thinkpad_ec&amp;lt;/tt&amp;gt; driver.&lt;br /&gt;
* The modified &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; driver fixes reliability and improves support for recent ThinkPad models (*60 and newer), since unlike the mainline driver, it correctly follows the Embedded Controller communication protocol.&lt;br /&gt;
* Several other improvements, such as the ability to control the polling rate.&lt;br /&gt;
&lt;br /&gt;
===Troubleshooting===&lt;br /&gt;
&lt;br /&gt;
If you get &amp;quot;&amp;lt;tt&amp;gt;thinkpad_ec: no ThinkPad embedded controller!&amp;lt;/tt&amp;gt;&amp;quot; when trying to load the module on a supported model listed below, you should [[BIOS_Upgrade|upgrade your BIOS]]. Some early BIOS (like 1.x on the X31) don't handle the embedded controller.&lt;br /&gt;
&lt;br /&gt;
===Model-specific status===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 92%&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
|+&amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; feature support matrix&lt;br /&gt;
|-&lt;br /&gt;
! colspan=12 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; | &lt;br /&gt;
=====A series=====&lt;br /&gt;
|-&lt;br /&gt;
{{tp_smapi/model_status_table_header}}&lt;br /&gt;
|-&lt;br /&gt;
! {{A22p}} 2629-USG&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{A30}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! colspan=12 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
=====G series=====&lt;br /&gt;
|-&lt;br /&gt;
{{tp_smapi/model_status_table_header}}&lt;br /&gt;
|-&lt;br /&gt;
! {{G41}}&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! colspan=12 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
=====R series=====&lt;br /&gt;
|-&lt;br /&gt;
{{tp_smapi/model_status_table_header}}&lt;br /&gt;
|-&lt;br /&gt;
! {{R31}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cunk}} ||      ||  || || No SMAPI BIOS&lt;br /&gt;
|-&lt;br /&gt;
! {{R40}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cunk}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R50}}&lt;br /&gt;
| {{Cunk}} || {{Cno}}  || {{Cunk}} || {{Cunk}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R50e}} 1834-JAG&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R50p}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R51}} 18*&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} 0 || 0.32 || 3.22 || || Machine types 1829, 1830, 1831 and 1836&lt;br /&gt;
|-&lt;br /&gt;
! {{R51}} 28*&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      || 1.29 || || Machine types 2883, 2887, 2888, 2889, 2894 and 2495&lt;br /&gt;
|-&lt;br /&gt;
! {{R52}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} 0 || 0.33 || 1.29 || 1.06 ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R60}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} ||{{Cyes}}  || {{Cno|text=}} 1 || 0.33 || || ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! colspan=12 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=====T series=====&lt;br /&gt;
|-&lt;br /&gt;
{{tp_smapi/model_status_table_header}}&lt;br /&gt;
|-&lt;br /&gt;
! {{T20}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cunk}} ||      ||  || || Has SMAPI BIOS but no function is supported. EC LPC3 protocol fails.&lt;br /&gt;
|-&lt;br /&gt;
! {{T22}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cunk}} ||      ||  || || Has SMAPI BIOS but no function is supported. EC LPC3 protocol fails.&lt;br /&gt;
|-&lt;br /&gt;
! {{T23}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T30}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T40}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T40p}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T41}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T41p}} 2373-AM9&lt;br /&gt;
| {{Cno}} || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} 1 || 0.32 || 3.20 || v3.04 ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T42}}&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T42p}} 2373-KXU&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} 1 || 0.32 || 3.21 || || Stop charge threshold works in Windows, but dmesg says &amp;quot;__get_real_thresh: cannot get stop_thresh of bat=0: Function is not supported by SMAPI BIOS&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
! {{T42p}} 2373-KUU&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T43}} 2686&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} 0 || 0.33 || 1.27 || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T43p}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cyes|text=}} 0 ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T60}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 7 || 0.32 ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T60}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 1 || 0.34 ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T60p}} 8743-CTO&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} 1 || 0.32 ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T61}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 1 || 0.32 ||  || || [http://ubuntuforums.org/showthread.php?p=3146719 ref]&lt;br /&gt;
|-&lt;br /&gt;
! {{T61p}} 6457-7XG&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 1 || 0.32 ||  || || [http://ubuntuforums.org/showthread.php?p=3146719 ref]&lt;br /&gt;
|-&lt;br /&gt;
! colspan=12 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=====X series=====&lt;br /&gt;
|-&lt;br /&gt;
{{tp_smapi/model_status_table_header}}&lt;br /&gt;
|-&lt;br /&gt;
! {{X20}} 2662-31G&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X24}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X30}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}} || {{Cyes}} || {{Cunk}} || {{Cunk}} || 0.34  || 1.09 || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X31}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X32}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X40}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 3 || 0.32 || 2.08 || 1.62 || &lt;br /&gt;
|-&lt;br /&gt;
! {{X41}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 3 || 0.32 ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X41_Tablet}}&lt;br /&gt;
| {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cyes}}   || {{Cno|text=}} (see ref) || 0.32  || || [http://sourceforge.net/mailarchive/message.php?msg_name=4757BD30.8080808%40ugcs.caltech.edu ref] || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X60}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 6 ||      || 2.07 || 1.10 || 2.6.20 issue (see discussion)&lt;br /&gt;
|-&lt;br /&gt;
! {{X60s}} 1704-5UG&lt;br /&gt;
| {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cno|text=}} 3 || 0.34 || 7BETD2WW 2.13 || 7BHT40WW 1.13 ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X61s}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 6 / 3 || 0.32 ||  || || [http://www.slackwiki.org/ThinkPad_X61s ref] says 3 but conflicting report received&lt;br /&gt;
|-&lt;br /&gt;
! {{X60_Tablet}}&lt;br /&gt;
| {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cyes}} || {{Cno|text=}} 3 ||      ||  || || [http://luke.no-ip.org/x60tablet/ ref] [http://rad.bioinfo.ulaval.ca/hardware/x60tablet ref] {{HELP|Unknown [[List_of_DMI_IDs|DMI ID]].}}&lt;br /&gt;
|-&lt;br /&gt;
! {{X61_Tablet}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 6 || 0.32  ||  || || {{HELP|Unknown [[List_of_DMI_IDs|DMI ID]].}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=12 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=====Z series=====&lt;br /&gt;
|-&lt;br /&gt;
{{tp_smapi/model_status_table_header}}&lt;br /&gt;
|-&lt;br /&gt;
! {{Z60m}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{Z60t}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{Z61m}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} 0 || 0.32 ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{Z61t}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} ||      ||  || || [https://bugs.launchpad.net/ubuntu/+source/linux-source-2.6.20/+bug/45014 ref]&lt;br /&gt;
|-&lt;br /&gt;
! {{Z61p}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} || {{Cyes}} || {{Cyes}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SMAPI capabilities may depend on the BIOS version as well, so upgrading to the latest version of the BIOS might provide more SMAPI functions (especially true for long-lived BIOS with lots of releases, like the TP-1R).&lt;br /&gt;
&lt;br /&gt;
Please update the above and report your experience on the [[Talk:tp_smapi|discussion]] page. If the module loads but gives a &amp;quot;&amp;lt;tt&amp;gt;not supported&amp;lt;/tt&amp;gt;&amp;quot; or &amp;quot;&amp;lt;tt&amp;gt;not implementeded&amp;lt;/tt&amp;gt;&amp;quot; error when you try to use some specific file in {{path|/sys/devices/platform/smapi/}}, please report the &amp;lt;tt&amp;gt;dmesg&amp;lt;/tt&amp;gt; output and whether the corresponding functionality is available under Windows - maybe your ThinkPad just can't do that. &lt;br /&gt;
&lt;br /&gt;
While at it, you may also want to add your laptop to the [[list of DMI IDs]].&lt;br /&gt;
&lt;br /&gt;
=====HDAPS axis orientation=====&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; The HDAPS axis orientation is set using the &amp;lt;tt&amp;gt;invert&amp;lt;/tt&amp;gt; module parameter (at load time) or sysfs attribute (at runtime). The tp_smapi's hdaps driver supports all 8 possible sensor orientations (inversion and swapping). You can use [[HDAPS#Visualisation_of_ThinkPad_orientation|hdaps visualisation]] to check if the settings is correct.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;invert&amp;lt;/tt&amp;gt; is an integer between 0 and 7, whose meaning is as follows. Let &amp;lt;tt&amp;gt;X&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;Y&amp;lt;/tt&amp;gt; denote the hardware readouts. Let &amp;lt;tt&amp;gt;R&amp;lt;/tt&amp;gt; denote the laptop's roll (tilt left/right), and let &amp;lt;tt&amp;gt;P&amp;lt;/tt&amp;gt; denote the laptop's pitch (tilt forward/backward). The possible values are as follows:&lt;br /&gt;
    invert=0:   R= X  P= Y   (same as mainline)&lt;br /&gt;
    invert=1:   R=-X  P=-Y   (same as mainline)&lt;br /&gt;
    invert=2:   R=-X  P= Y   (new)&lt;br /&gt;
    invert=3:   R= X  P=-Y   (new)&lt;br /&gt;
    invert=4:   R= Y  P= X   (new)&lt;br /&gt;
    invert=5:   R=-Y  P=-X   (new)&lt;br /&gt;
    invert=6:   R=-Y  P= X   (new)&lt;br /&gt;
    invert=7:   R= Y  P=-X   (new)&lt;br /&gt;
&lt;br /&gt;
[[Category:Drivers]] [[Category:Patches]]&lt;br /&gt;
&lt;br /&gt;
===Tools using this driver===&lt;br /&gt;
&lt;br /&gt;
The driver's interface can be accessed directly through the files under {{path|/sys/devices/platform/smapi}}, or via the following tools:&lt;br /&gt;
* [[KThinkBat]] - display battery status on the KDE &amp;lt;tt&amp;gt;kicker&amp;lt;/tt&amp;gt; panel.&lt;br /&gt;
* [[gkrellm-ThinkBat]] - battery status plugin for Gkrellm2&lt;br /&gt;
* {{CodeRef|thinkpad-smapi.sh}} - script to display various SMAPI information using tp_smapi module.&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=HDAPS&amp;diff=35469</id>
		<title>HDAPS</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=HDAPS&amp;diff=35469"/>
		<updated>2007-12-31T12:17:59Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: /* Kernel patch */ add the link to the errorcheck-fix patch&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;
=== HDAPS - IBM Active Protection System Linux Driver ===&lt;br /&gt;
This is the Linux driver for monitoring the accelerometer known as [[Active Protection System|IBM Active Protection System]].&lt;br /&gt;
&lt;br /&gt;
The driver only enables reading of the acceleration data. It does '''not''' perform [[#Harddisk Protection|automatic disk head parking]]. But there are already some other useful [[#Applications|applications]] for HDAPS, using the {{path|/sys}} interface it provides.&lt;br /&gt;
&lt;br /&gt;
{{WARN|There are two versions of the hdaps driver, one in the Linux kernel mainline, and another provided by [[tp_smapi]].  '''Use of the tp_smapi version of hdaps is strongly recommended by the current hdaps developers.'''}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
*provides accelerometer values via sysfs&lt;br /&gt;
*provides a joystick type input device&lt;br /&gt;
&lt;br /&gt;
=== Project Homepage / Availability ===&lt;br /&gt;
*[http://hdaps.sourceforge.net/ Project Homepage]&lt;br /&gt;
*The driver is included in the 2.6-mm series of kernels since August, 26th 2005.&lt;br /&gt;
*The driver is now in the mainline (2.6.14).&lt;br /&gt;
*The [[tp_smapi]] package contains some patches to this driver. These are necessary for some recent models, and recommended for all.&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
A driver is included in recent Linux kernels and is actively maintained, but it is very inferior to the driver in tp_smapi (which provides its own hdaps module).&lt;br /&gt;
&lt;br /&gt;
=== How to install the driver ===&lt;br /&gt;
Recent Linux kernels include the &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; driver. However, the driver in the mainline Linux kernel has two problems with recent models:&lt;br /&gt;
* It doesn't whitelist them (you have to edit hdaps_init() in drivers/hwmon/hdaps.c to include a line like &amp;lt;tt&amp;gt;HDAPS_DMI_MATCH_LENOVO(&amp;quot;ThinkPad T60&amp;quot;)&amp;lt;/tt&amp;gt;)&lt;br /&gt;
* It doesn't work reliably, e.g., it may read out constant values (0,0). See [http://sourceforge.net/mailarchive/message.php?msg_id=15350314 here].&lt;br /&gt;
&lt;br /&gt;
To solve both problems, install the modified hdaps that is bundled with [[tp_smapi]].&lt;br /&gt;
&lt;br /&gt;
=== Harddisk Protection ===&lt;br /&gt;
As mentioned above, the hdaps kernel driver is only responsible for reading the accelerometer data and exporting it through the sysfs interface. In order to use this information to protect the disk, some additional steps are required.&lt;br /&gt;
&lt;br /&gt;
See [[How to protect the harddisk through APS]].&lt;br /&gt;
&lt;br /&gt;
=== Input device support ===&lt;br /&gt;
The hdaps driver in the lastest kernels (2.6.14 and later?) also exports a joystick type input device, which can be used by games.&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
====Disk head parking====&lt;br /&gt;
You will need the kernel patch and userspace daemon. The GUI monitoring is optional.&lt;br /&gt;
&lt;br /&gt;
See [[How to protect the harddisk through APS]] for more information.&lt;br /&gt;
&lt;br /&gt;
===== Kernel patch =====&lt;br /&gt;
Apply these using 'patch -p1 -l &amp;lt; hdaps_xx.patch'.&lt;br /&gt;
* New interface&lt;br /&gt;
**[http://sourceforge.net/mailarchive/attachment.php?list_name=hdaps-devel&amp;amp;message_id=87pry7ehx3.fsf%40denkblock.local&amp;amp;counter=2 Latest sata/ide disk protection patch for 2.6.23.8] + [http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1113 error check fix]&lt;br /&gt;
**[http://sourceforge.net/mailarchive/forum.php?thread_name=87ir5lk12l.fsf%40denkblock.local&amp;amp;forum_name=hdaps-devel Latest sata/ide disk protection patch for 2.6.22.9 and 2.6.23-rc9]&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/993 Latest sata/ide disk protection patch for 2.6.20 and 2.6.21]&lt;br /&gt;
* Old interface&lt;br /&gt;
**[http://www.nabble.com/attachment/9047418/0/hdaps_protect-2.6.20.patch.bz2 Latest sata/ide disk protection patch for 2.6.20]&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.kernel/470413 Latest sata/ide disk protection patch for 2.6.19-rc6]&lt;br /&gt;
**[http://www.dresco.co.uk/hdaps/hdaps_protect-2.6.18.3-2.patch Latest sata/ide disk protection patch for 2.6.18.3]&lt;br /&gt;
**[http://exitzero.de/t41p-configs/hdaps_protect-2.6.17.1-20060625.patch Untested patch for 2.6.17.1]: see [http://thread.gmane.org/gmane.linux.drivers.hdaps.devel/708/focus=708]&lt;br /&gt;
**[http://whoopie.gmxhome.de/linux/patches/2.6.17.14-tj/03-hdaps_protect-20060430-for-2.6.17-tj.patch Latest sata/ide disk protection patch for use with the libata hotplug 2.6.17.4 patches] - See [[How_to_hotswap_UltraBay_devices]]&lt;br /&gt;
**[http://whoopie.gmxhome.de/linux/patches/2.6.16-tj/05-hdaps_protect-20060430-for-2.6.16-tj.patch Latest sata/ide disk protection patch for use with the libata hotplug 2.6.16.16 patches] - See [[How_to_hotswap_UltraBay_devices]]&lt;br /&gt;
**[http://www.dresco.co.uk/hdaps/hdaps_protect.20060430.patch Latest sata/ide disk protection patch for 2.6.16]&lt;br /&gt;
**[http://www.dresco.co.uk/hdaps/hdaps_protect.20060118.patch sata/ide disk protection patch for 2.6.15]&lt;br /&gt;
**[http://jenster.dyndns.org/files/blk_freeze-01-nodetection-for-2.6.15.patch disk park patch adapted for the t41p model] &amp;lt;tt&amp;gt; kernel 2.6.15 ([http://sourceforge.net/mailarchive/message.php?msg_id=13214288 capability detection disabled], no libata support)&amp;lt;/tt&amp;gt;&lt;br /&gt;
**[http://jenster.dyndns.org/files/blk_freeze-01-nodetection-for-2.6.14.patch disk park patch adapted for the t41p model] &amp;lt;tt&amp;gt; kernel 2.6.14 ([http://sourceforge.net/mailarchive/message.php?msg_id=13214288 capability detection disabled], no libata support)&amp;lt;/tt&amp;gt;&lt;br /&gt;
**[http://lwn.net/Articles/154923/ disk park patch] &amp;lt;tt&amp;gt;an experimental patch for parking the disk (Linux 2.6.14 for 2.6.15 see below)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Userspace daemon =====&lt;br /&gt;
*[http://www.dresco.co.uk/hdaps/hdapsd-20070524.c Recommended version]&lt;br /&gt;
*[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1045 Reduced power version] - reduces timer interrupts, as measured by [[PowerTOP]]. This leads to lower power consumption on [[tickless kernel|tickless kernels]]. Interrupt reduction requires the &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; kernel module from [[tp_smapi]] 0.32 or newer, and a [http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1040 udev rule].&lt;br /&gt;
*[ftp://rohrmoser-engineering.de/pub Modified adaptive algorithm version] - uses a different (and potentially better) algorithm for the adaptive sensivity threshold.&lt;br /&gt;
&lt;br /&gt;
===== GUI monitoring =====&lt;br /&gt;
*[http://roy.marples.name/node/269 khdapmonitor] KDE System Tray Monitor&lt;br /&gt;
*[http://www.dresco.co.uk/hdaps/gnome-hdaps-applet-20060120.tar.gz gnome-hdaps-applet] visual display of disk protection status in gnome panel&lt;br /&gt;
&lt;br /&gt;
====Security &amp;amp; safety====&lt;br /&gt;
*[[Script for theft alarm using HDAPS]]&lt;br /&gt;
&lt;br /&gt;
====Tilt monitoring====&lt;br /&gt;
*[http://www.mulliner.org/collin/gkibm-acpi.php gkhdaps] &amp;lt;tt&amp;gt;a GKrellM applet displaying tilt data&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[http://rlove.org/log/2005082203.html gnome-tilt] &amp;lt;tt&amp;gt;a gnome applet showing tilt data&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Visualisation of ThinkPad orientation====&lt;br /&gt;
*[http://rlove.org/log/2005082401.html hdaps-gl] &amp;lt;tt&amp;gt;a little app animating a 3D-ThinkPad&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[https://sourceforge.net/project/showfiles.php?group_id=138242 hdapsgl-applet] &amp;lt;tt&amp;gt; a GNOME applet animating a 3D-ThinkPad&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[https://sourceforge.net/project/showfiles.php?group_id=138242 wmadhps] &amp;lt;tt&amp;gt;a WindowMaker DockApp animating a 3D-ThinkPad&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[http://www.cs.cmu.edu/~ecc/gyro.tar.gz OpenGL gyroscope hack] &amp;lt;tt&amp;gt;keeps your display levelled when tilting the ThinkPad&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Games====&lt;br /&gt;
*[http://icculus.org/neverball/ Neverball] is quite fun with HDAPS. (You'll need to have the HDAPS joystick device)&lt;br /&gt;
*Turn your ThinkPad into a Jedi Weapon (hey, it [http://isnoop.net/blog/2006/05/20/macsaber-turn-your-mac-into-a-jedi-weapon works for Mac laptops])&lt;br /&gt;
&lt;br /&gt;
====Other====&lt;br /&gt;
&lt;br /&gt;
*[http://blog.micampe.it/articles/2006/06/04/here-comes-the-smackpad smack.py] - switch workspace by smacking your laptop, inspired by the [http://blog.medallia.com/2006/05/smacbook_pro.html SmackBook] (uses EWMH)&lt;br /&gt;
**an [http://weblogs.mozillazine.org/gerv/archives/2006/09/stablilised_smackpad.html improved version] adds stabilization (by comparing smacks to previous ones, uses EWMH)&lt;br /&gt;
**another [http://pberndt.com/Programme/Linux/pyhdaps/index.html approach] adds stabilization (by requiring a certain type of value deflection, uses xmacroplay)&lt;br /&gt;
**[http://www.gnome.org/~fherrera/gtollina.c GTollina] is another smack program for use with compiz (video [http://www.gnome.org/~fherrera/blog/gtollina.html here]).&lt;br /&gt;
*[http://blog.odonnell.nu/61.html xmms-smack.py] - move through your xmms playlist by smacking, based on the two smack scripts above.&lt;br /&gt;
*[http://www-128.ibm.com/developerworks/linux/library/l-knockage.html?ca=dgr-lnxw02aKnockBasedCommands KnockBasedCommands] - Execute commands by tapping your laptop.&lt;br /&gt;
*[http://people.ksp.sk/~mic/?menu=32&amp;amp;file=rotate.py rotate.py] - rotate desktop by turning your laptop&lt;br /&gt;
&lt;br /&gt;
=== Interesting links related to this project ===&lt;br /&gt;
* [https://lists.sourceforge.net/lists/listinfo/hdaps-devel HDAPS mailinglist and its archive]&lt;br /&gt;
* #hdaps channel on irc.freenode.org&lt;br /&gt;
* [https://sourceforge.net/projects/hdaps/ hdaps projects] overview of userspace programs using hdaps&lt;br /&gt;
* [http://www-307.ibm.com/pc/support/site.wss/document.do?lndocid=TPAD-HDFIRM IBM ThinkPads hardware drive firmware site]&lt;br /&gt;
* [http://www.paul.sladen.org/thinkpad-r31/accelerometer.html http://www.paul.sladen.org/thinkpad-r31/accelerometer/]&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=119845 Gentoo ebuild for hdaps driver and daemon including a initscript*&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137345 Gentoo ebuild for gkhdaps gkrell plugin&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137350 Gentoo ebuild for hdaps-gl application&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137351 Gentoo ebuild for gnome hdapsgl-applet&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137352 Gentoo ebuild for gnome tilt application&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137353 Gentoo ebuild for wmhdaps&lt;br /&gt;
* [http://lenovoblogs.com/insidethebox/?p=71 Why the ThinkPad accelerometer is only 2D] - explanation by Lenovo&lt;br /&gt;
&lt;br /&gt;
[[Category:R50]] [[Category:R50p]] [[Category:R51]] [[Category:R52]] [[Category:R60]] [[Category:T41]] [[Category:T41p]] [[Category:T42]] [[Category:T42p]] [[Category:T43]] [[Category:T43p]] [[Category:T60]] [[Category:T60p]] [[Category:T61]] [[Category:X40]] [[Category:X41]] [[Category:X41 Tablet]] [[Category:X60]] [[Category:X60s]] [[Category:Z60m]] [[Category:Z60t]] [[Category:Drivers]] [[Category:Z61m]]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Tp_smapi&amp;diff=35279</id>
		<title>Tp smapi</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Tp_smapi&amp;diff=35279"/>
		<updated>2007-12-22T22:02:32Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: /* Model-specific status */&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;
The &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; kernel module exposes some features of the ThinkPad hardware/firmware via a &amp;lt;tt&amp;gt;sysfs&amp;lt;/tt&amp;gt; interface. Currently, the main implemented functionality is control of battery charging and extended battery status. It also includes an improved version of the [[HDAPS]] driver. The underlying hardware interfaces are [[SMAPI support for Linux|SMAPI]] and direct access to the embedded controller.&lt;br /&gt;
&lt;br /&gt;
For older ThinkPad models, see also [[tpctl]].&lt;br /&gt;
&lt;br /&gt;
{{WARN|This driver uses undocumented features and direct hardware access. It thus cannot be guaranteed to work and could conceivably damage your computer (though so far no incidents have been reported).}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
*Battery charge/discharge control&lt;br /&gt;
*Battery status information&lt;br /&gt;
&lt;br /&gt;
===Project Homepage / Availability===&lt;br /&gt;
* Project page: http://tpctl.sourceforge.net/&lt;br /&gt;
* You need to [http://sourceforge.net/project/showfiles.php?group_id=1212&amp;amp;package_id=171579 download] only the &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; package.&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
====Installation from source====&lt;br /&gt;
You will need the kernel headers and makefiles corresponding to your current kernel version. On {{Fedora}}, this means {{cmdroot|yum install kernel-devel-$(uname -r)}} .&lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|tar xzvf tp_smapi-0.33.tgz}}&lt;br /&gt;
:{{cmdroot|cd tp_smapi-0.33}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, either compile and load the driver within the current working directory (for testing):&lt;br /&gt;
:{{cmdroot|make load}}&lt;br /&gt;
OR compile and install into the kernel's module path:&lt;br /&gt;
:{{cmdroot|make install}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you use the [[HDAPS]] driver, add &amp;lt;tt&amp;gt;HDAPS=1&amp;lt;/tt&amp;gt; to also patch the &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; for compatibility with &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; (this requires a kernel source tree matching the current kernel).&lt;br /&gt;
Again, either load the driver within the current working directory:&lt;br /&gt;
:{{cmdroot|1=make load HDAPS=1}}&lt;br /&gt;
OR install into the kernel's module path:&lt;br /&gt;
:{{cmdroot|1=make install HDAPS=1}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To prepare a stand-alone patch against the current kernel tree (including&lt;br /&gt;
a patch against &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; and new &amp;lt;tt&amp;gt;Kconfig&amp;lt;/tt&amp;gt; entries):&lt;br /&gt;
:{{cmdroot|make patch}}&lt;br /&gt;
&lt;br /&gt;
To delete all autogenerated files:&lt;br /&gt;
:{{cmdroot|make clean}}&lt;br /&gt;
&lt;br /&gt;
The original kernel tree is never modified by any these commands. &lt;br /&gt;
The {{path|/lib/modules}} directory is modified only by {{cmdroot|make install}}.&lt;br /&gt;
&lt;br /&gt;
====Installation in Gentoo====&lt;br /&gt;
The {{Gentoo}} portage system carries a [http://packages.gentoo.org/packages/?category=app-laptop;name=tp_smapi tp_smapi package], which follows the latest version pretty closely. On a Gentoo system, you can install and load as follows.&lt;br /&gt;
&lt;br /&gt;
If you use the [[HDAPS]] driver, do this first:&lt;br /&gt;
&lt;br /&gt;
* Configure &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; as module in your kernel&lt;br /&gt;
* Add the &amp;lt;tt&amp;gt;HDAPS&amp;lt;/tt&amp;gt; use flag in {{path|/etc/make.conf}}&lt;br /&gt;
* {{cmdroot|rmmod hdaps}}&lt;br /&gt;
&lt;br /&gt;
Then:&lt;br /&gt;
&lt;br /&gt;
* {{cmdroot|emerge tp_smapi}} (or install tp_smapi with hdaps support manually, as above)&lt;br /&gt;
* {{cmdroot|echo &amp;quot;tp_smapi&amp;quot; &amp;gt;&amp;gt; /etc/modules.autoload.d/kernel-2.6}}&lt;br /&gt;
* {{cmdroot|echo &amp;quot;hdaps&amp;quot; &amp;gt;&amp;gt; /etc/modules.autoload.d/kernel-2.6}}&lt;br /&gt;
&lt;br /&gt;
Then reboot, or run:&lt;br /&gt;
* {{cmdroot|modprobe tp_smapi}}&lt;br /&gt;
* {{cmdroot|modprobe hdaps}}&lt;br /&gt;
&lt;br /&gt;
====Installation on Ubuntu/Debian====&lt;br /&gt;
Installation on Ubuntu or Debian is quite easy, but there are a few things to look after:&lt;br /&gt;
&lt;br /&gt;
To get your system ready for compiling code, install the build-essentials (as root, of course, as all of the following comands; Ubuntu users have to prepend 'sudo' to every line and enter their own password when prompted):&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;apt-get install build-essential&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get tp_smapi to work, obtain the latest source as mentioned above and unpack it. If you want to use HDAPS, you need to install the kernel source matching te kernel you are running. To do so, issue this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;uname -r&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will give you the version of your current kernel. As Ubuntu adds '-generic' to the kernel-version, the following command works for Debian users only:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;apt-get install linux-source-`uname -r`&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ubuntu users use the kernel-version they got by the command before, e.g. 'linux-source-2.6.20'&lt;br /&gt;
&lt;br /&gt;
Now change to the tp_smapi dir:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;cd tp_smapi-X.YY&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt; (X.YY being the version-number of [[tp_smapi]])&lt;br /&gt;
and make and install tp_smapi as instructed above.&lt;br /&gt;
&lt;br /&gt;
If you get an error that the kernel version isn't matching (or that you need to set KSRC/KBUILD), please check that there is a symlink from the modules dir to the kernel source:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;root@localhost:~#ls -l /lib/modules/2.6.20-16-generic&lt;br /&gt;
lrwxrwxrwx  1 root root     28 2007-02-02 08:39 source -&amp;gt; /usr/src/linux-source-2.6.20&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Create the link if the line above is not existent:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;root@localhost:~#ln -s /usr/src/linux-source-2.6.20 /lib/modules/2.6.20-16-generic/source&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the following will build and install the correct modules to their locations:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;make install HDAPS=1&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
To make sure your system loads the modules at boot time, do this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;echo &amp;quot;tp_smapi&amp;quot; &amp;gt;&amp;gt; /etc/modules&lt;br /&gt;
echo &amp;quot;hdaps&amp;quot; &amp;gt;&amp;gt; /etc/modules&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
and update your initramfs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;update-initramfs -u&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get tp_smapi running now, just load the modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;modprobe -a tp_smapi hdaps&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This description was tested on Kubuntu 'Feisty Fawn' and should work on all Debian-based distros with minor tweaks.&lt;br /&gt;
&lt;br /&gt;
'''EDIT:''' Works on Kubuntu 7.10 (&amp;quot;Gutsy Gibbon&amp;quot;), too&lt;br /&gt;
&lt;br /&gt;
===Battery charge control features===&lt;br /&gt;
To set the thresholds for starting and stopping battery charging (in percent of current full charge capacity):&lt;br /&gt;
:{{cmdroot|echo 40 &amp;gt; /sys/devices/platform/smapi/BAT0/start_charge_thresh}}&lt;br /&gt;
:{{cmdroot|echo 70 &amp;gt; /sys/devices/platform/smapi/BAT0/stop_charge_thresh}}&lt;br /&gt;
:{{cmdroot|cat /sys/devices/platform/smapi/BAT0/*_charge_thresh}}&lt;br /&gt;
{{HINT|Battery charging thresholds can be used to keep Li-Ion ad Li-Polymer batteries partially charged, in order to [[Maintenance#Battery_treatment|increase their lifetime]].}}&lt;br /&gt;
To prevent charging for 17 minutes (regardless of thresholds):&lt;br /&gt;
:{{cmdroot|echo 17 &amp;gt; /sys/devices/platform/smapi/BAT0/inhibit_charge_minutes}}&lt;br /&gt;
{{HINT|Charge inhibiting can be used to reduce the power draw of the laptop, in order to use an under-spec power supply that can't handle the combined power draw of running and charging. It can also be used to control which battery is charged when [[How to use UltraBay batteries|using an Ultrabay battery]].}}&lt;br /&gt;
&lt;br /&gt;
To cancel charging preventation:&lt;br /&gt;
:{{cmdroot|echo 0 &amp;gt; /sys/devices/platform/smapi/BAT0/inhibit_charge_minutes}}&lt;br /&gt;
&lt;br /&gt;
To force battery discharging (even if connected to AC):&lt;br /&gt;
:{{cmdroot|echo 1 &amp;gt; /sys/devices/platform/smapi/BAT0/force_discharge}}&lt;br /&gt;
{{HINT|This can be used to choose which battery is discharged when [[How to use UltraBay batteries|using an UltraBay battery]].}}&lt;br /&gt;
&lt;br /&gt;
To cancel forced discharge:&lt;br /&gt;
:{{cmdroot|echo 0 &amp;gt; /sys/devices/platform/smapi/BAT0/force_discharge}}&lt;br /&gt;
&lt;br /&gt;
===Battery status features===&lt;br /&gt;
To view extended battery status such as charging state, voltage, current, capacity, cycle count and model information:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/installed&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/state       # idle/charging/discharging&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/cycle_count&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/current_now # instantaneous current&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/current_avg # last minute average&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/power_now   # instantaneous power&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/power_avg   # last minute average&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/last_full_capacity&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/remaining_percent&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/remaining_running_time&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/remaining_charging_time&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/remaining_capacity&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/design_capacity&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/voltage&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/design_voltage&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/manufacturer&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/model&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/barcoding&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/chemistry&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/serial&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/manufacture_date&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/first_use_date&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/temperature # in milli-Celsius&lt;br /&gt;
# cat /sys/devices/platform/smapi/ac_connected&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The raw status data is also available, including some fields not listed above (in case you can figure them out):&lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|cat /sys/devices/platform/smapi/BAT0/dump}}&lt;br /&gt;
&lt;br /&gt;
In all of the above, replace &amp;lt;tt&amp;gt;BAT0&amp;lt;/tt&amp;gt; with &amp;lt;tt&amp;gt;BAT1&amp;lt;/tt&amp;gt; to address the 2nd battery.&lt;br /&gt;
&lt;br /&gt;
Note that the battery status readout conflicts with the stock [[HDAPS|hdaps]] driver, so if you use &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; you will need to load &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; using {{cmdroot|1=make load HDAPS=1}} (see [[#Bundled hdaps driver|Bundled hdaps driver]] below).&lt;br /&gt;
&lt;br /&gt;
On [[ACPI]]-enabled systems, most of above information is also available through the files under {{path|/proc/acpi/battery}}. However, the ACPI interface does not include the instantaneous power and cycle count readouts, and does not work well when [[How to use UltraBay batteries|hotswapping UltraBay batteries]].&lt;br /&gt;
&lt;br /&gt;
===Other features===&lt;br /&gt;
&lt;br /&gt;
There is also [[sysfs]] attribute for making direct SMAPI requests to the SM BIOS firmware. Don't touch it unless you really know what you're doing. Example:&lt;br /&gt;
 # echo '211a 100 0 0' &amp;gt; /sys/devices/platform/smapi/smapi_request; cat /sys/devices/platform/smapi/smapi_request&lt;br /&gt;
 211a 34b b2 0 0 0 'OK'&lt;br /&gt;
The &amp;quot;4b&amp;quot; in the 2nd value, converted to decimal, is 75: the current charging stop threshold (stop_charge_thresh).&lt;br /&gt;
&lt;br /&gt;
===Bundled &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; driver===&lt;br /&gt;
&lt;br /&gt;
The tp_smapi package includes a modified version of the &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; Linux kernel driver used by the [[HDAPS]] system. To use &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; concurrently, you '''must''' use the modified version.&lt;br /&gt;
&lt;br /&gt;
To build the modified version, simply append the &amp;lt;tt&amp;gt;HDAPS=1&amp;lt;/tt&amp;gt; parameter to the &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt; command (see [[#Installation|Installation]] above):&lt;br /&gt;
:{{cmdroot|1=make load HDAPS=1}}&lt;br /&gt;
or&lt;br /&gt;
:{{cmdroot|1=make install HDAPS=1}}&lt;br /&gt;
&lt;br /&gt;
If you don't do that, you will not be able to load &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; (and its support module &amp;lt;tt&amp;gt;thinkpad_ec&amp;lt;/tt&amp;gt;) when &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; is loaded, and vice versa. You can use &amp;lt;tt&amp;gt;rmmod&amp;lt;/tt&amp;gt; to switch between these modules.&lt;br /&gt;
&lt;br /&gt;
Note that some of the battery status is also visible through ACPI ({{path|/proc/acpi/battery/*}}), independently of &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The modified &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; has several changes:&lt;br /&gt;
* The &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; driver in mainline kernels conflicts with the extended battery status (they use the same IO ports). The modified &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; coordinates this access through the bundled &amp;lt;tt&amp;gt;thinkpad_ec&amp;lt;/tt&amp;gt; driver.&lt;br /&gt;
* The modified &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; driver fixes reliability and improves support for recent ThinkPad models (*60 and newer), since unlike the mainline driver, it correctly follows the Embedded Controller communication protocol.&lt;br /&gt;
* Several other improvements, such as the ability to control the polling rate.&lt;br /&gt;
&lt;br /&gt;
===Troubleshooting===&lt;br /&gt;
&lt;br /&gt;
If you get &amp;quot;&amp;lt;tt&amp;gt;thinkpad_ec: no ThinkPad embedded controller!&amp;lt;/tt&amp;gt;&amp;quot; when trying to load the module on a supported model listed below, you should [[BIOS_Upgrade|upgrade your BIOS]]. Some early BIOS (like 1.x on the X31) don't handle the embedded controller.&lt;br /&gt;
&lt;br /&gt;
===Model-specific status===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 92%&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
|+&amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; feature support matrix&lt;br /&gt;
|-&lt;br /&gt;
! colspan=11 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; | &lt;br /&gt;
=====A series=====&lt;br /&gt;
|-&lt;br /&gt;
{{tp_smapi/model_status_table_header}}&lt;br /&gt;
|-&lt;br /&gt;
! {{A22p}} 2629-USG&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{A30}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! colspan=11 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
=====G series=====&lt;br /&gt;
|-&lt;br /&gt;
{{tp_smapi/model_status_table_header}}&lt;br /&gt;
|-&lt;br /&gt;
! {{G41}}&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! colspan=11 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
=====R series=====&lt;br /&gt;
|-&lt;br /&gt;
{{tp_smapi/model_status_table_header}}&lt;br /&gt;
|-&lt;br /&gt;
! {{R31}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cunk}} ||      ||  || No SMAPI BIOS&lt;br /&gt;
|-&lt;br /&gt;
! {{R40}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R50}}&lt;br /&gt;
| {{Cunk}} || {{Cno}}  || {{Cunk}} || {{Cunk}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R50e}} 1834-JAG&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R50p}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R51}} 18*&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} R=X, P=Y || 0.32 || 3.22 || Machine types 1829, 1830, 1831 and 1836&lt;br /&gt;
|-&lt;br /&gt;
! {{R51}} 28*&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      || 1.29 || Machine types 2883, 2887, 2888, 2889, 2894 and 2495&lt;br /&gt;
|-&lt;br /&gt;
! {{R52}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} R=X, P=Y (invert=0) || 0.33 || 1.29 ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R60}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} ||{{Cyes}}  || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! colspan=11 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=====T series=====&lt;br /&gt;
|-&lt;br /&gt;
{{tp_smapi/model_status_table_header}}&lt;br /&gt;
|-&lt;br /&gt;
! {{T20}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cunk}} ||      ||  || Has SMAPI BIOS but no function is supported. EC LPC3 protocol fails.&lt;br /&gt;
|-&lt;br /&gt;
! {{T22}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cunk}} ||      ||  || Has SMAPI BIOS but no function is supported. EC LPC3 protocol fails.&lt;br /&gt;
|-&lt;br /&gt;
! {{T23}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T30}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T40}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T40p}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T41}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T41p}} 2373-AM9&lt;br /&gt;
| {{Cno}} || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} R=-X, P=-Y || 0.32 || 3.20 || EC v3.04&lt;br /&gt;
|-&lt;br /&gt;
! {{T42}}&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T42p}} 2373-KXU&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} R=-X, P=-Y || 0.32 || 3.21 || Stop charge threshold works in Windows, but dmesg says &amp;quot;__get_real_thresh: cannot get stop_thresh of bat=0: Function is not supported by SMAPI BIOS&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
! {{T42p}} 2373-KUU&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T43}} 2686&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} R=X, P=Y (invert=0) || 0.33 || 1.27 ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T43p}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cyes|text=}} R=X, P=Y ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T60}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} R=Y, P=-X || 0.32 ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T60p}} 8743-CTO&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} R=-X, P=-Y || 0.32 ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T61}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} R=-X, P=-Y || 0.32 ||  || [http://ubuntuforums.org/showthread.php?p=3146719 ref]&lt;br /&gt;
|-&lt;br /&gt;
! {{T61p}} 6457-7XG&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} R=-X, P=-Y || 0.32 ||  || [http://ubuntuforums.org/showthread.php?p=3146719 ref]&lt;br /&gt;
|-&lt;br /&gt;
! colspan=11 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=====X series=====&lt;br /&gt;
|-&lt;br /&gt;
{{tp_smapi/model_status_table_header}}&lt;br /&gt;
|-&lt;br /&gt;
! {{X20}} 2662-31G&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X24}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X30}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cunk}}  || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X31}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X32}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X40}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} R=X, P=-Y || 0.32 || 2.08 || EC v1.62&lt;br /&gt;
|-&lt;br /&gt;
! {{X41}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} R=X, P=-Y || 0.32 ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X41_Tablet}}&lt;br /&gt;
| {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cyes}}   || {{Cno|text=}} (see ref) || 0.32  || || [http://sourceforge.net/mailarchive/message.php?msg_name=4757BD30.8080808%40ugcs.caltech.edu ref] ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X60}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} R=-Y, P=X ||      || 2.07 || EC v1.10, 2.6.20 issue (see discussion)&lt;br /&gt;
|-&lt;br /&gt;
! {{X60s}}&lt;br /&gt;
| {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X61s}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} R=X, P=-Y || 0.32 ||  || [http://www.slackwiki.org/ThinkPad_X61s ref]&lt;br /&gt;
|-&lt;br /&gt;
! {{X60_Tablet}}&lt;br /&gt;
| {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cyes}} || {{Cunk}} ||      ||  || [http://luke.no-ip.org/x60tablet/ ref] [http://rad.bioinfo.ulaval.ca/hardware/x60tablet ref]&lt;br /&gt;
|-&lt;br /&gt;
! {{X61_Tablet}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}}R=-Y, P=X || 0.32  ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! colspan=11 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=====Z series=====&lt;br /&gt;
|-&lt;br /&gt;
{{tp_smapi/model_status_table_header}}&lt;br /&gt;
|-&lt;br /&gt;
! {{Z60m}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{Z60t}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{Z61m}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} R=X, P=Y || 0.32 ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{Z61t}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} ||      ||  || [https://bugs.launchpad.net/ubuntu/+source/linux-source-2.6.20/+bug/45014 ref]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SMAPI capabilities may depend on the BIOS version as well, so upgrading to the latest version of the BIOS might provide more SMAPI functions (especially true for long-lived BIOS with lots of releases, like the TP-1R).&lt;br /&gt;
&lt;br /&gt;
Please update the above and report your experience on the [[Talk:tp_smapi|discussion]] page. If the module loads but gives a &amp;quot;&amp;lt;tt&amp;gt;not supported&amp;lt;/tt&amp;gt;&amp;quot; or &amp;quot;&amp;lt;tt&amp;gt;not implementeded&amp;lt;/tt&amp;gt;&amp;quot; error when you try to use some specific file in {{path|/sys/devices/platform/smapi/}}, please report the &amp;lt;tt&amp;gt;dmesg&amp;lt;/tt&amp;gt; output and whether the corresponding functionality is available under Windows - maybe your ThinkPad just can't do that. &lt;br /&gt;
&lt;br /&gt;
While at it, you may also want to add your laptop to the [[list of DMI IDs]].&lt;br /&gt;
&lt;br /&gt;
=====HDAPS axis orientation=====&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; HDAPS axis orientation notation: &amp;lt;tt&amp;gt;X&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;Y&amp;lt;/tt&amp;gt; are the hardware readouts. &amp;lt;tt&amp;gt;R&amp;lt;/tt&amp;gt; denotes the laptop's roll (tilt left/right), and &amp;lt;tt&amp;gt;P&amp;lt;/tt&amp;gt; denotes the laptop's pitch (tilt forward/backward). You can use [[HDAPS#Visualisation_of_ThinkPad_orientation|hdaps visualisation]] to check for correctness.&lt;br /&gt;
&lt;br /&gt;
The tp_smapi's hdaps driver supports all 8 possible sensor orientations (inversion and swapping), using the &amp;lt;tt&amp;gt;invert&amp;lt;/tt&amp;gt; module parameter (e.g., &amp;lt;tt&amp;gt;modprobe hdaps invert=1&amp;lt;/tt&amp;gt;). You can also change the &amp;lt;tt&amp;gt;invert&amp;lt;/tt&amp;gt; sysfs attribute dynamically. The possible values are as follows:&lt;br /&gt;
    invert=0:   R= X  P= Y   (same as mainline)&lt;br /&gt;
    invert=1:   R=-X  P=-Y   (same as mainline)&lt;br /&gt;
    invert=2:   R=-X  P= Y   (new)&lt;br /&gt;
    invert=3:   R= X  P=-Y   (new)&lt;br /&gt;
    invert=4:   R= Y  P= X   (new)&lt;br /&gt;
    invert=5:   R=-Y  P=-X   (new)&lt;br /&gt;
    invert=6:   R=-Y  P= X   (new)&lt;br /&gt;
    invert=7:   R= Y  P=-X   (new)&lt;br /&gt;
&lt;br /&gt;
[[Category:Drivers]] [[Category:Patches]]&lt;br /&gt;
&lt;br /&gt;
===Tools using this driver===&lt;br /&gt;
&lt;br /&gt;
The driver's interface can be accessed directly through the files under {{path|/sys/devices/platform/smapi}}, or via the following tools:&lt;br /&gt;
* [[KThinkBat]] - display battery status on the KDE &amp;lt;tt&amp;gt;kicker&amp;lt;/tt&amp;gt; panel.&lt;br /&gt;
* [[gkrellm-ThinkBat]] - battery status plugin for Gkrellm2&lt;br /&gt;
* {{CodeRef|thinkpad-smapi.sh}} - script to display various SMAPI information using tp_smapi module.&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Tp_smapi&amp;diff=35278</id>
		<title>Tp smapi</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Tp_smapi&amp;diff=35278"/>
		<updated>2007-12-22T22:00:51Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: /* HDAPS axis orientation */&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;
The &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; kernel module exposes some features of the ThinkPad hardware/firmware via a &amp;lt;tt&amp;gt;sysfs&amp;lt;/tt&amp;gt; interface. Currently, the main implemented functionality is control of battery charging and extended battery status. It also includes an improved version of the [[HDAPS]] driver. The underlying hardware interfaces are [[SMAPI support for Linux|SMAPI]] and direct access to the embedded controller.&lt;br /&gt;
&lt;br /&gt;
For older ThinkPad models, see also [[tpctl]].&lt;br /&gt;
&lt;br /&gt;
{{WARN|This driver uses undocumented features and direct hardware access. It thus cannot be guaranteed to work and could conceivably damage your computer (though so far no incidents have been reported).}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
*Battery charge/discharge control&lt;br /&gt;
*Battery status information&lt;br /&gt;
&lt;br /&gt;
===Project Homepage / Availability===&lt;br /&gt;
* Project page: http://tpctl.sourceforge.net/&lt;br /&gt;
* You need to [http://sourceforge.net/project/showfiles.php?group_id=1212&amp;amp;package_id=171579 download] only the &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; package.&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
====Installation from source====&lt;br /&gt;
You will need the kernel headers and makefiles corresponding to your current kernel version. On {{Fedora}}, this means {{cmdroot|yum install kernel-devel-$(uname -r)}} .&lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|tar xzvf tp_smapi-0.33.tgz}}&lt;br /&gt;
:{{cmdroot|cd tp_smapi-0.33}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then, either compile and load the driver within the current working directory (for testing):&lt;br /&gt;
:{{cmdroot|make load}}&lt;br /&gt;
OR compile and install into the kernel's module path:&lt;br /&gt;
:{{cmdroot|make install}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you use the [[HDAPS]] driver, add &amp;lt;tt&amp;gt;HDAPS=1&amp;lt;/tt&amp;gt; to also patch the &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; for compatibility with &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; (this requires a kernel source tree matching the current kernel).&lt;br /&gt;
Again, either load the driver within the current working directory:&lt;br /&gt;
:{{cmdroot|1=make load HDAPS=1}}&lt;br /&gt;
OR install into the kernel's module path:&lt;br /&gt;
:{{cmdroot|1=make install HDAPS=1}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To prepare a stand-alone patch against the current kernel tree (including&lt;br /&gt;
a patch against &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; and new &amp;lt;tt&amp;gt;Kconfig&amp;lt;/tt&amp;gt; entries):&lt;br /&gt;
:{{cmdroot|make patch}}&lt;br /&gt;
&lt;br /&gt;
To delete all autogenerated files:&lt;br /&gt;
:{{cmdroot|make clean}}&lt;br /&gt;
&lt;br /&gt;
The original kernel tree is never modified by any these commands. &lt;br /&gt;
The {{path|/lib/modules}} directory is modified only by {{cmdroot|make install}}.&lt;br /&gt;
&lt;br /&gt;
====Installation in Gentoo====&lt;br /&gt;
The {{Gentoo}} portage system carries a [http://packages.gentoo.org/packages/?category=app-laptop;name=tp_smapi tp_smapi package], which follows the latest version pretty closely. On a Gentoo system, you can install and load as follows.&lt;br /&gt;
&lt;br /&gt;
If you use the [[HDAPS]] driver, do this first:&lt;br /&gt;
&lt;br /&gt;
* Configure &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; as module in your kernel&lt;br /&gt;
* Add the &amp;lt;tt&amp;gt;HDAPS&amp;lt;/tt&amp;gt; use flag in {{path|/etc/make.conf}}&lt;br /&gt;
* {{cmdroot|rmmod hdaps}}&lt;br /&gt;
&lt;br /&gt;
Then:&lt;br /&gt;
&lt;br /&gt;
* {{cmdroot|emerge tp_smapi}} (or install tp_smapi with hdaps support manually, as above)&lt;br /&gt;
* {{cmdroot|echo &amp;quot;tp_smapi&amp;quot; &amp;gt;&amp;gt; /etc/modules.autoload.d/kernel-2.6}}&lt;br /&gt;
* {{cmdroot|echo &amp;quot;hdaps&amp;quot; &amp;gt;&amp;gt; /etc/modules.autoload.d/kernel-2.6}}&lt;br /&gt;
&lt;br /&gt;
Then reboot, or run:&lt;br /&gt;
* {{cmdroot|modprobe tp_smapi}}&lt;br /&gt;
* {{cmdroot|modprobe hdaps}}&lt;br /&gt;
&lt;br /&gt;
====Installation on Ubuntu/Debian====&lt;br /&gt;
Installation on Ubuntu or Debian is quite easy, but there are a few things to look after:&lt;br /&gt;
&lt;br /&gt;
To get your system ready for compiling code, install the build-essentials (as root, of course, as all of the following comands; Ubuntu users have to prepend 'sudo' to every line and enter their own password when prompted):&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;apt-get install build-essential&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get tp_smapi to work, obtain the latest source as mentioned above and unpack it. If you want to use HDAPS, you need to install the kernel source matching te kernel you are running. To do so, issue this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;uname -r&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will give you the version of your current kernel. As Ubuntu adds '-generic' to the kernel-version, the following command works for Debian users only:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;apt-get install linux-source-`uname -r`&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ubuntu users use the kernel-version they got by the command before, e.g. 'linux-source-2.6.20'&lt;br /&gt;
&lt;br /&gt;
Now change to the tp_smapi dir:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;cd tp_smapi-X.YY&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt; (X.YY being the version-number of [[tp_smapi]])&lt;br /&gt;
and make and install tp_smapi as instructed above.&lt;br /&gt;
&lt;br /&gt;
If you get an error that the kernel version isn't matching (or that you need to set KSRC/KBUILD), please check that there is a symlink from the modules dir to the kernel source:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;root@localhost:~#ls -l /lib/modules/2.6.20-16-generic&lt;br /&gt;
lrwxrwxrwx  1 root root     28 2007-02-02 08:39 source -&amp;gt; /usr/src/linux-source-2.6.20&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Create the link if the line above is not existent:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;root@localhost:~#ln -s /usr/src/linux-source-2.6.20 /lib/modules/2.6.20-16-generic/source&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the following will build and install the correct modules to their locations:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;make install HDAPS=1&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
To make sure your system loads the modules at boot time, do this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;echo &amp;quot;tp_smapi&amp;quot; &amp;gt;&amp;gt; /etc/modules&lt;br /&gt;
echo &amp;quot;hdaps&amp;quot; &amp;gt;&amp;gt; /etc/modules&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
and update your initramfs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;update-initramfs -u&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get tp_smapi running now, just load the modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;modprobe -a tp_smapi hdaps&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This description was tested on Kubuntu 'Feisty Fawn' and should work on all Debian-based distros with minor tweaks.&lt;br /&gt;
&lt;br /&gt;
'''EDIT:''' Works on Kubuntu 7.10 (&amp;quot;Gutsy Gibbon&amp;quot;), too&lt;br /&gt;
&lt;br /&gt;
===Battery charge control features===&lt;br /&gt;
To set the thresholds for starting and stopping battery charging (in percent of current full charge capacity):&lt;br /&gt;
:{{cmdroot|echo 40 &amp;gt; /sys/devices/platform/smapi/BAT0/start_charge_thresh}}&lt;br /&gt;
:{{cmdroot|echo 70 &amp;gt; /sys/devices/platform/smapi/BAT0/stop_charge_thresh}}&lt;br /&gt;
:{{cmdroot|cat /sys/devices/platform/smapi/BAT0/*_charge_thresh}}&lt;br /&gt;
{{HINT|Battery charging thresholds can be used to keep Li-Ion ad Li-Polymer batteries partially charged, in order to [[Maintenance#Battery_treatment|increase their lifetime]].}}&lt;br /&gt;
To prevent charging for 17 minutes (regardless of thresholds):&lt;br /&gt;
:{{cmdroot|echo 17 &amp;gt; /sys/devices/platform/smapi/BAT0/inhibit_charge_minutes}}&lt;br /&gt;
{{HINT|Charge inhibiting can be used to reduce the power draw of the laptop, in order to use an under-spec power supply that can't handle the combined power draw of running and charging. It can also be used to control which battery is charged when [[How to use UltraBay batteries|using an Ultrabay battery]].}}&lt;br /&gt;
&lt;br /&gt;
To cancel charging preventation:&lt;br /&gt;
:{{cmdroot|echo 0 &amp;gt; /sys/devices/platform/smapi/BAT0/inhibit_charge_minutes}}&lt;br /&gt;
&lt;br /&gt;
To force battery discharging (even if connected to AC):&lt;br /&gt;
:{{cmdroot|echo 1 &amp;gt; /sys/devices/platform/smapi/BAT0/force_discharge}}&lt;br /&gt;
{{HINT|This can be used to choose which battery is discharged when [[How to use UltraBay batteries|using an UltraBay battery]].}}&lt;br /&gt;
&lt;br /&gt;
To cancel forced discharge:&lt;br /&gt;
:{{cmdroot|echo 0 &amp;gt; /sys/devices/platform/smapi/BAT0/force_discharge}}&lt;br /&gt;
&lt;br /&gt;
===Battery status features===&lt;br /&gt;
To view extended battery status such as charging state, voltage, current, capacity, cycle count and model information:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/installed&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/state       # idle/charging/discharging&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/cycle_count&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/current_now # instantaneous current&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/current_avg # last minute average&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/power_now   # instantaneous power&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/power_avg   # last minute average&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/last_full_capacity&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/remaining_percent&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/remaining_running_time&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/remaining_charging_time&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/remaining_capacity&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/design_capacity&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/voltage&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/design_voltage&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/manufacturer&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/model&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/barcoding&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/chemistry&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/serial&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/manufacture_date&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/first_use_date&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/temperature # in milli-Celsius&lt;br /&gt;
# cat /sys/devices/platform/smapi/ac_connected&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The raw status data is also available, including some fields not listed above (in case you can figure them out):&lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|cat /sys/devices/platform/smapi/BAT0/dump}}&lt;br /&gt;
&lt;br /&gt;
In all of the above, replace &amp;lt;tt&amp;gt;BAT0&amp;lt;/tt&amp;gt; with &amp;lt;tt&amp;gt;BAT1&amp;lt;/tt&amp;gt; to address the 2nd battery.&lt;br /&gt;
&lt;br /&gt;
Note that the battery status readout conflicts with the stock [[HDAPS|hdaps]] driver, so if you use &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; you will need to load &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; using {{cmdroot|1=make load HDAPS=1}} (see [[#Bundled hdaps driver|Bundled hdaps driver]] below).&lt;br /&gt;
&lt;br /&gt;
On [[ACPI]]-enabled systems, most of above information is also available through the files under {{path|/proc/acpi/battery}}. However, the ACPI interface does not include the instantaneous power and cycle count readouts, and does not work well when [[How to use UltraBay batteries|hotswapping UltraBay batteries]].&lt;br /&gt;
&lt;br /&gt;
===Other features===&lt;br /&gt;
&lt;br /&gt;
There is also [[sysfs]] attribute for making direct SMAPI requests to the SM BIOS firmware. Don't touch it unless you really know what you're doing. Example:&lt;br /&gt;
 # echo '211a 100 0 0' &amp;gt; /sys/devices/platform/smapi/smapi_request; cat /sys/devices/platform/smapi/smapi_request&lt;br /&gt;
 211a 34b b2 0 0 0 'OK'&lt;br /&gt;
The &amp;quot;4b&amp;quot; in the 2nd value, converted to decimal, is 75: the current charging stop threshold (stop_charge_thresh).&lt;br /&gt;
&lt;br /&gt;
===Bundled &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; driver===&lt;br /&gt;
&lt;br /&gt;
The tp_smapi package includes a modified version of the &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; Linux kernel driver used by the [[HDAPS]] system. To use &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; concurrently, you '''must''' use the modified version.&lt;br /&gt;
&lt;br /&gt;
To build the modified version, simply append the &amp;lt;tt&amp;gt;HDAPS=1&amp;lt;/tt&amp;gt; parameter to the &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt; command (see [[#Installation|Installation]] above):&lt;br /&gt;
:{{cmdroot|1=make load HDAPS=1}}&lt;br /&gt;
or&lt;br /&gt;
:{{cmdroot|1=make install HDAPS=1}}&lt;br /&gt;
&lt;br /&gt;
If you don't do that, you will not be able to load &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; (and its support module &amp;lt;tt&amp;gt;thinkpad_ec&amp;lt;/tt&amp;gt;) when &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; is loaded, and vice versa. You can use &amp;lt;tt&amp;gt;rmmod&amp;lt;/tt&amp;gt; to switch between these modules.&lt;br /&gt;
&lt;br /&gt;
Note that some of the battery status is also visible through ACPI ({{path|/proc/acpi/battery/*}}), independently of &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The modified &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; has several changes:&lt;br /&gt;
* The &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; driver in mainline kernels conflicts with the extended battery status (they use the same IO ports). The modified &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; coordinates this access through the bundled &amp;lt;tt&amp;gt;thinkpad_ec&amp;lt;/tt&amp;gt; driver.&lt;br /&gt;
* The modified &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; driver fixes reliability and improves support for recent ThinkPad models (*60 and newer), since unlike the mainline driver, it correctly follows the Embedded Controller communication protocol.&lt;br /&gt;
* Several other improvements, such as the ability to control the polling rate.&lt;br /&gt;
&lt;br /&gt;
===Troubleshooting===&lt;br /&gt;
&lt;br /&gt;
If you get &amp;quot;&amp;lt;tt&amp;gt;thinkpad_ec: no ThinkPad embedded controller!&amp;lt;/tt&amp;gt;&amp;quot; when trying to load the module on a supported model listed below, you should [[BIOS_Upgrade|upgrade your BIOS]]. Some early BIOS (like 1.x on the X31) don't handle the embedded controller.&lt;br /&gt;
&lt;br /&gt;
===Model-specific status===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 92%&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
|+&amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; feature support matrix&lt;br /&gt;
|-&lt;br /&gt;
! colspan=11 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; | &lt;br /&gt;
=====A series=====&lt;br /&gt;
|-&lt;br /&gt;
{{tp_smapi/model_status_table_header}}&lt;br /&gt;
|-&lt;br /&gt;
! {{A22p}} 2629-USG&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{A30}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! colspan=11 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
=====G series=====&lt;br /&gt;
|-&lt;br /&gt;
{{tp_smapi/model_status_table_header}}&lt;br /&gt;
|-&lt;br /&gt;
! {{G41}}&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! colspan=11 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
=====R series=====&lt;br /&gt;
|-&lt;br /&gt;
{{tp_smapi/model_status_table_header}}&lt;br /&gt;
|-&lt;br /&gt;
! {{R31}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cunk}} ||      ||  || No SMAPI BIOS&lt;br /&gt;
|-&lt;br /&gt;
! {{R40}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R50}}&lt;br /&gt;
| {{Cunk}} || {{Cno}}  || {{Cunk}} || {{Cunk}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R50e}} 1834-JAG&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R50p}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R51}} 18*&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} R=X, P=Y || 0.32 || 3.22 || Machine types 1829, 1830, 1831 and 1836&lt;br /&gt;
|-&lt;br /&gt;
! {{R51}} 28*&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      || 1.29 || Machine types 2883, 2887, 2888, 2889, 2894 and 2495&lt;br /&gt;
|-&lt;br /&gt;
! {{R52}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} R=X, P=Y || 0.32 || 1.29 ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R60}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} ||{{Cyes}}  || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! colspan=11 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=====T series=====&lt;br /&gt;
|-&lt;br /&gt;
{{tp_smapi/model_status_table_header}}&lt;br /&gt;
|-&lt;br /&gt;
! {{T20}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cunk}} ||      ||  || Has SMAPI BIOS but no function is supported. EC LPC3 protocol fails.&lt;br /&gt;
|-&lt;br /&gt;
! {{T22}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cunk}} ||      ||  || Has SMAPI BIOS but no function is supported. EC LPC3 protocol fails.&lt;br /&gt;
|-&lt;br /&gt;
! {{T23}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T30}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T40}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T40p}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T41}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T41p}} 2373-AM9&lt;br /&gt;
| {{Cno}} || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} R=-X, P=-Y || 0.32 || 3.20 || EC v3.04&lt;br /&gt;
|-&lt;br /&gt;
! {{T42}}&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T42p}} 2373-KXU&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} R=-X, P=-Y || 0.32 || 3.21 || Stop charge threshold works in Windows, but dmesg says &amp;quot;__get_real_thresh: cannot get stop_thresh of bat=0: Function is not supported by SMAPI BIOS&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
! {{T42p}} 2373-KUU&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T43}} 2686&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} R=X, P=Y (invert=0) || 0.33 || 1.27 ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T43p}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cyes|text=}} R=X, P=Y ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T60}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} R=Y, P=-X || 0.32 ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T60p}} 8743-CTO&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} R=-X, P=-Y || 0.32 ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T61}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} R=-X, P=-Y || 0.32 ||  || [http://ubuntuforums.org/showthread.php?p=3146719 ref]&lt;br /&gt;
|-&lt;br /&gt;
! {{T61p}} 6457-7XG&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} R=-X, P=-Y || 0.32 ||  || [http://ubuntuforums.org/showthread.php?p=3146719 ref]&lt;br /&gt;
|-&lt;br /&gt;
! colspan=11 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=====X series=====&lt;br /&gt;
|-&lt;br /&gt;
{{tp_smapi/model_status_table_header}}&lt;br /&gt;
|-&lt;br /&gt;
! {{X20}} 2662-31G&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X24}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X30}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cunk}}  || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X31}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X32}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X40}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} R=X, P=-Y || 0.32 || 2.08 || EC v1.62&lt;br /&gt;
|-&lt;br /&gt;
! {{X41}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} R=X, P=-Y || 0.32 ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X41_Tablet}}&lt;br /&gt;
| {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cyes}}   || {{Cno|text=}} (see ref) || 0.32  || || [http://sourceforge.net/mailarchive/message.php?msg_name=4757BD30.8080808%40ugcs.caltech.edu ref] ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X60}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} R=-Y, P=X ||      || 2.07 || EC v1.10, 2.6.20 issue (see discussion)&lt;br /&gt;
|-&lt;br /&gt;
! {{X60s}}&lt;br /&gt;
| {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X61s}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} R=X, P=-Y || 0.32 ||  || [http://www.slackwiki.org/ThinkPad_X61s ref]&lt;br /&gt;
|-&lt;br /&gt;
! {{X60_Tablet}}&lt;br /&gt;
| {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cyes}} || {{Cunk}} ||      ||  || [http://luke.no-ip.org/x60tablet/ ref] [http://rad.bioinfo.ulaval.ca/hardware/x60tablet ref]&lt;br /&gt;
|-&lt;br /&gt;
! {{X61_Tablet}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}}R=-Y, P=X || 0.32  ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! colspan=11 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=====Z series=====&lt;br /&gt;
|-&lt;br /&gt;
{{tp_smapi/model_status_table_header}}&lt;br /&gt;
|-&lt;br /&gt;
! {{Z60m}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{Z60t}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{Z61m}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} R=X, P=Y || 0.32 ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{Z61t}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} ||      ||  || [https://bugs.launchpad.net/ubuntu/+source/linux-source-2.6.20/+bug/45014 ref]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SMAPI capabilities may depend on the BIOS version as well, so upgrading to the latest version of the BIOS might provide more SMAPI functions (especially true for long-lived BIOS with lots of releases, like the TP-1R).&lt;br /&gt;
&lt;br /&gt;
Please update the above and report your experience on the [[Talk:tp_smapi|discussion]] page. If the module loads but gives a &amp;quot;&amp;lt;tt&amp;gt;not supported&amp;lt;/tt&amp;gt;&amp;quot; or &amp;quot;&amp;lt;tt&amp;gt;not implementeded&amp;lt;/tt&amp;gt;&amp;quot; error when you try to use some specific file in {{path|/sys/devices/platform/smapi/}}, please report the &amp;lt;tt&amp;gt;dmesg&amp;lt;/tt&amp;gt; output and whether the corresponding functionality is available under Windows - maybe your ThinkPad just can't do that. &lt;br /&gt;
&lt;br /&gt;
While at it, you may also want to add your laptop to the [[list of DMI IDs]].&lt;br /&gt;
&lt;br /&gt;
=====HDAPS axis orientation=====&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; HDAPS axis orientation notation: &amp;lt;tt&amp;gt;X&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;Y&amp;lt;/tt&amp;gt; are the hardware readouts. &amp;lt;tt&amp;gt;R&amp;lt;/tt&amp;gt; denotes the laptop's roll (tilt left/right), and &amp;lt;tt&amp;gt;P&amp;lt;/tt&amp;gt; denotes the laptop's pitch (tilt forward/backward). You can use [[HDAPS#Visualisation_of_ThinkPad_orientation|hdaps visualisation]] to check for correctness.&lt;br /&gt;
&lt;br /&gt;
The tp_smapi's hdaps driver supports all 8 possible sensor orientations (inversion and swapping), using the &amp;lt;tt&amp;gt;invert&amp;lt;/tt&amp;gt; module parameter (e.g., &amp;lt;tt&amp;gt;modprobe hdaps invert=1&amp;lt;/tt&amp;gt;). You can also change the &amp;lt;tt&amp;gt;invert&amp;lt;/tt&amp;gt; sysfs attribute dynamically. The possible values are as follows:&lt;br /&gt;
    invert=0:   R= X  P= Y   (same as mainline)&lt;br /&gt;
    invert=1:   R=-X  P=-Y   (same as mainline)&lt;br /&gt;
    invert=2:   R=-X  P= Y   (new)&lt;br /&gt;
    invert=3:   R= X  P=-Y   (new)&lt;br /&gt;
    invert=4:   R= Y  P= X   (new)&lt;br /&gt;
    invert=5:   R=-Y  P=-X   (new)&lt;br /&gt;
    invert=6:   R=-Y  P= X   (new)&lt;br /&gt;
    invert=7:   R= Y  P=-X   (new)&lt;br /&gt;
&lt;br /&gt;
[[Category:Drivers]] [[Category:Patches]]&lt;br /&gt;
&lt;br /&gt;
===Tools using this driver===&lt;br /&gt;
&lt;br /&gt;
The driver's interface can be accessed directly through the files under {{path|/sys/devices/platform/smapi}}, or via the following tools:&lt;br /&gt;
* [[KThinkBat]] - display battery status on the KDE &amp;lt;tt&amp;gt;kicker&amp;lt;/tt&amp;gt; panel.&lt;br /&gt;
* [[gkrellm-ThinkBat]] - battery status plugin for Gkrellm2&lt;br /&gt;
* {{CodeRef|thinkpad-smapi.sh}} - script to display various SMAPI information using tp_smapi module.&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=How_to_get_special_keys_to_work&amp;diff=34918</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=34918"/>
		<updated>2007-11-27T18:49:50Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: /* Redirecting XF86Back/XF86Forward */&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}} || toggle display || [[#ibm-acpi events|ibm-acpi]], [[thinkpad-acpi]], [[#tpb configuration|tpb]] || additional actions || [[Sample Fn-F7 script]]&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F8}} || toggle trackpoint/touchpad || [[#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|ThinkVantage|#495988}} ||ibm/hotkey HKEY 00000080 00001018&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 use xkeycaps (an X tool to 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}}, {{X40}}, {{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;
This configuration also enables the respective LED.&lt;br /&gt;
&lt;br /&gt;
Please note, pressing the {{key|Shift}}+{{key|ScrLk}} key combination, without first following the above configuration, will start an accessibility feature, which will allow the numeric keypad to maneuver the mouse pointer.  Starting this accessibility feature and subsequently running xmodmap, as described above, results in the accessibility feature and the numeric lock LED functioning simultaneously.  As such, the above configuration should be completed before the accessibility feature is started in order to produce numbers.&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;
====Cycling through tabs====&lt;br /&gt;
In Gnome and Xfce4, Ctrl-PageUp/Ctrl-PageDown move to the previous/following open tab in all applications that have tabbed user interfaces (terminal emulator, web browser, ...). To make use of the {{ibmkey|Forward|#494949}} and {{ibmkey|Backward|#494949}} keys for this task, there're two possibilities.&lt;br /&gt;
&lt;br /&gt;
For both ways, you should map the keycodes 233 and 234 to XF86Back and XF86Forward as described in [[#xmodmap_configuration|xmodmap configuration]].&lt;br /&gt;
&lt;br /&gt;
=====Using xautomation=====&lt;br /&gt;
xautomation can be found [http://hoopajoo.net/projects/xautomation.html here].&lt;br /&gt;
&lt;br /&gt;
Create two files with permissions 755:&lt;br /&gt;
&lt;br /&gt;
{{path|/usr/local/bin/tp_back}}:&lt;br /&gt;
&amp;lt;bash&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
/usr/bin/xte 'keydown Control_L' 'keydown Page_Up' 'keyup Page_Up' 'keyup Control_L'&lt;br /&gt;
&amp;lt;/bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{path|/usr/local/bin/tp_forward}}:&lt;br /&gt;
&amp;lt;bash&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
/usr/bin/xte 'keydown Control_L' 'keydown Page_Down' 'keyup Page_Down' 'keyup Control_L'&lt;br /&gt;
&amp;lt;/bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use your desktop's keyboard shortcut editor to assign XF86Back as a shortcut for tp_back and XF86Forward as a shortcut for tp_forward.&lt;br /&gt;
&lt;br /&gt;
This should work in all distros and with all window managers (you might have to use other key combinations than Ctrl-PageUp and Ctrl-PageDown).&lt;br /&gt;
&lt;br /&gt;
=====Redirecting XF86Back/XF86Forward=====&lt;br /&gt;
Create {{path|/etc/X11/xkb/compat/thinkpad}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// $XFree86$&lt;br /&gt;
//  XFree86 special keysyms&lt;br /&gt;
default partial xkb_compatibility &amp;quot;basic&amp;quot;  {&lt;br /&gt;
    interpret.repeat= True;&lt;br /&gt;
&lt;br /&gt;
    interpret  XF86Back {&lt;br /&gt;
        action = Redirect(Key=&amp;lt;PGUP&amp;gt;, modifiers=Control);&lt;br /&gt;
    };&lt;br /&gt;
    interpret  XF86Forward {&lt;br /&gt;
        action = Redirect(Key=&amp;lt;PGDN&amp;gt;, modifiers=Control);&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit {{path|/etc/X11/xkb/compat/complete}} and add &amp;lt;tt&amp;gt;'''augment &amp;quot;thinkpad&amp;quot;'''&amp;lt;/tt&amp;gt; so that it looks similar to the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// $XKeyboardConfig: xkbdesc/compat/complete,v 1.3 2005/10/17 00:42:11 svu Exp $&lt;br /&gt;
// $Xorg: complete,v 1.3 2000/08/17 19:54:34 cpqbld Exp $&lt;br /&gt;
default xkb_compatibility &amp;quot;complete&amp;quot;  {&lt;br /&gt;
    include &amp;quot;basic&amp;quot;&lt;br /&gt;
    augment &amp;quot;iso9995&amp;quot;&lt;br /&gt;
    augment &amp;quot;mousekeys&amp;quot;&lt;br /&gt;
    augment &amp;quot;accessx(full)&amp;quot;&lt;br /&gt;
    augment &amp;quot;misc&amp;quot;&lt;br /&gt;
    augment &amp;quot;xfree86&amp;quot;&lt;br /&gt;
    augment &amp;quot;level5&amp;quot;&lt;br /&gt;
    augment &amp;quot;thinkpad&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&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>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=How_to_get_special_keys_to_work&amp;diff=34917</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=34917"/>
		<updated>2007-11-27T18:41:36Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: /* Using xautomation */ use bash highlighting&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}} || toggle display || [[#ibm-acpi events|ibm-acpi]], [[thinkpad-acpi]], [[#tpb configuration|tpb]] || additional actions || [[Sample Fn-F7 script]]&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F8}} || toggle trackpoint/touchpad || [[#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|ThinkVantage|#495988}} ||ibm/hotkey HKEY 00000080 00001018&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 use xkeycaps (an X tool to 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}}, {{X40}}, {{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;
This configuration also enables the respective LED.&lt;br /&gt;
&lt;br /&gt;
Please note, pressing the {{key|Shift}}+{{key|ScrLk}} key combination, without first following the above configuration, will start an accessibility feature, which will allow the numeric keypad to maneuver the mouse pointer.  Starting this accessibility feature and subsequently running xmodmap, as described above, results in the accessibility feature and the numeric lock LED functioning simultaneously.  As such, the above configuration should be completed before the accessibility feature is started in order to produce numbers.&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;
====Cycling through tabs====&lt;br /&gt;
In Gnome and Xfce4, Ctrl-PageUp/Ctrl-PageDown move to the previous/following open tab in all applications that have tabbed user interfaces (terminal emulator, web browser, ...). To make use of the {{ibmkey|Forward|#494949}} and {{ibmkey|Backward|#494949}} keys for this task, there're two possibilities.&lt;br /&gt;
&lt;br /&gt;
For both ways, you should map the keycodes 233 and 234 to XF86Back and XF86Forward as described in [[#xmodmap_configuration|xmodmap configuration]].&lt;br /&gt;
&lt;br /&gt;
=====Using xautomation=====&lt;br /&gt;
xautomation can be found [http://hoopajoo.net/projects/xautomation.html here].&lt;br /&gt;
&lt;br /&gt;
Create two files with permissions 755:&lt;br /&gt;
&lt;br /&gt;
{{path|/usr/local/bin/tp_back}}:&lt;br /&gt;
&amp;lt;bash&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
/usr/bin/xte 'keydown Control_L' 'keydown Page_Up' 'keyup Page_Up' 'keyup Control_L'&lt;br /&gt;
&amp;lt;/bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{path|/usr/local/bin/tp_forward}}:&lt;br /&gt;
&amp;lt;bash&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
/usr/bin/xte 'keydown Control_L' 'keydown Page_Down' 'keyup Page_Down' 'keyup Control_L'&lt;br /&gt;
&amp;lt;/bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use your desktop's keyboard shortcut editor to assign XF86Back as a shortcut for tp_back and XF86Forward as a shortcut for tp_forward.&lt;br /&gt;
&lt;br /&gt;
This should work in all distros and with all window managers (you might have to use other key combinations than Ctrl-PageUp and Ctrl-PageDown).&lt;br /&gt;
&lt;br /&gt;
=====Redirecting XF86Back/XF86Forward=====&lt;br /&gt;
Create {{path|/etc/X11/xkb/compat/thinkpad}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// $XFree86$&lt;br /&gt;
//  XFree86 special keysyms&lt;br /&gt;
default partial xkb_compatibility &amp;quot;basic&amp;quot;  {&lt;br /&gt;
    interpret.repeat= True;&lt;br /&gt;
&lt;br /&gt;
    interpret  XF86Back {&lt;br /&gt;
        action = Redirect(Key=&amp;lt;PGUP&amp;gt;, modifiers=Control);&lt;br /&gt;
    };&lt;br /&gt;
    interpret  XF86Forward {&lt;br /&gt;
        action = Redirect(Key=&amp;lt;PGDN&amp;gt;, modifiers=Control);&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit {{path|/etc/X11/xkb/compat/complete}} and add 'augment &amp;quot;thinkpad&amp;quot;' so that it looks similar to the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// $XKeyboardConfig: xkbdesc/compat/complete,v 1.3 2005/10/17 00:42:11 svu Exp $&lt;br /&gt;
// $Xorg: complete,v 1.3 2000/08/17 19:54:34 cpqbld Exp $&lt;br /&gt;
default xkb_compatibility &amp;quot;complete&amp;quot;  {&lt;br /&gt;
    include &amp;quot;basic&amp;quot;&lt;br /&gt;
    augment &amp;quot;iso9995&amp;quot;&lt;br /&gt;
    augment &amp;quot;mousekeys&amp;quot;&lt;br /&gt;
    augment &amp;quot;accessx(full)&amp;quot;&lt;br /&gt;
    augment &amp;quot;misc&amp;quot;&lt;br /&gt;
    augment &amp;quot;xfree86&amp;quot;&lt;br /&gt;
    augment &amp;quot;level5&amp;quot;&lt;br /&gt;
    augment &amp;quot;thinkpad&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&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>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=How_to_get_special_keys_to_work&amp;diff=34916</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=34916"/>
		<updated>2007-11-27T18:37:43Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: /* Cycling through tabs */ add a second possibility&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}} || toggle display || [[#ibm-acpi events|ibm-acpi]], [[thinkpad-acpi]], [[#tpb configuration|tpb]] || additional actions || [[Sample Fn-F7 script]]&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F8}} || toggle trackpoint/touchpad || [[#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|ThinkVantage|#495988}} ||ibm/hotkey HKEY 00000080 00001018&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 use xkeycaps (an X tool to 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}}, {{X40}}, {{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;
This configuration also enables the respective LED.&lt;br /&gt;
&lt;br /&gt;
Please note, pressing the {{key|Shift}}+{{key|ScrLk}} key combination, without first following the above configuration, will start an accessibility feature, which will allow the numeric keypad to maneuver the mouse pointer.  Starting this accessibility feature and subsequently running xmodmap, as described above, results in the accessibility feature and the numeric lock LED functioning simultaneously.  As such, the above configuration should be completed before the accessibility feature is started in order to produce numbers.&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;
====Cycling through tabs====&lt;br /&gt;
In Gnome and Xfce4, Ctrl-PageUp/Ctrl-PageDown move to the previous/following open tab in all applications that have tabbed user interfaces (terminal emulator, web browser, ...). To make use of the {{ibmkey|Forward|#494949}} and {{ibmkey|Backward|#494949}} keys for this task, there're two possibilities.&lt;br /&gt;
&lt;br /&gt;
For both ways, you should map the keycodes 233 and 234 to XF86Back and XF86Forward as described in [[#xmodmap_configuration|xmodmap configuration]].&lt;br /&gt;
&lt;br /&gt;
=====Using xautomation=====&lt;br /&gt;
xautomation can be found [http://hoopajoo.net/projects/xautomation.html here].&lt;br /&gt;
&lt;br /&gt;
Create two files with permissions 755:&lt;br /&gt;
&lt;br /&gt;
{{path|/usr/local/bin/tp_back}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
/usr/bin/xte 'keydown Control_L' 'keydown Page_Up' 'keyup Page_Up' 'keyup Control_L'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{path|/usr/local/bin/tp_forward}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
/usr/bin/xte 'keydown Control_L' 'keydown Page_Down' 'keyup Page_Down' 'keyup Control_L'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use your desktop's keyboard shortcut editor to assign XF86Back as a shortcut for tp_back and XF86Forward as a shortcut for tp_forward.&lt;br /&gt;
&lt;br /&gt;
This should work in all distros and with all window managers (you might have to use other key combinations than Ctrl-PageUp and Ctrl-PageDown).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=====Redirecting XF86Back/XF86Forward=====&lt;br /&gt;
Create {{path|/etc/X11/xkb/compat/thinkpad}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// $XFree86$&lt;br /&gt;
//  XFree86 special keysyms&lt;br /&gt;
default partial xkb_compatibility &amp;quot;basic&amp;quot;  {&lt;br /&gt;
    interpret.repeat= True;&lt;br /&gt;
&lt;br /&gt;
    interpret  XF86Back {&lt;br /&gt;
        action = Redirect(Key=&amp;lt;PGUP&amp;gt;, modifiers=Control);&lt;br /&gt;
    };&lt;br /&gt;
    interpret  XF86Forward {&lt;br /&gt;
        action = Redirect(Key=&amp;lt;PGDN&amp;gt;, modifiers=Control);&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit {{path|/etc/X11/xkb/compat/complete}} and add 'augment &amp;quot;thinkpad&amp;quot;' so that it looks similar to the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// $XKeyboardConfig: xkbdesc/compat/complete,v 1.3 2005/10/17 00:42:11 svu Exp $&lt;br /&gt;
// $Xorg: complete,v 1.3 2000/08/17 19:54:34 cpqbld Exp $&lt;br /&gt;
default xkb_compatibility &amp;quot;complete&amp;quot;  {&lt;br /&gt;
    include &amp;quot;basic&amp;quot;&lt;br /&gt;
    augment &amp;quot;iso9995&amp;quot;&lt;br /&gt;
    augment &amp;quot;mousekeys&amp;quot;&lt;br /&gt;
    augment &amp;quot;accessx(full)&amp;quot;&lt;br /&gt;
    augment &amp;quot;misc&amp;quot;&lt;br /&gt;
    augment &amp;quot;xfree86&amp;quot;&lt;br /&gt;
    augment &amp;quot;level5&amp;quot;&lt;br /&gt;
    augment &amp;quot;thinkpad&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&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>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Pentium_M_undervolting_and_underclocking&amp;diff=34847</id>
		<title>Pentium M undervolting and underclocking</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Pentium_M_undervolting_and_underclocking&amp;diff=34847"/>
		<updated>2007-11-24T10:48:44Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: /* Alternative 0: linux-phc */ make the link working&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Background ==&lt;br /&gt;
&lt;br /&gt;
Intel Pentium M processors from the [[Intel Pentium M (Dothan)|Dothan]] and [[Intel Pentium M (Banias)|Banias]] families can be instructed to operate at voltage and clock frequencies lower than the nominal ones recommended by Intel and used by ThinkPads by default. Experience shows that the processor may continue working correctly at lower-than-nominal voltages and frequencies, thereby reducing power consumption, heat and fan noise.&lt;br /&gt;
&lt;br /&gt;
In the Pentium M, speed and voltage are controlled by software (through the MSR registers). It is up to the operating system to choose the right voltage for each frequency. Normally this is done according to tables published by Intel or according to ACPI tables. However, this can be overriden - in the case of Linux, by a kernel patch.&lt;br /&gt;
&lt;br /&gt;
{{WARN|Following this instructions will operate your CPU under conditions it was not designed for. Even if your system seems stable, it may still suffer transient faults leading to arbitrary data corruption. In addition, errors in following these instructions (or changes between processor models) may operate the CPU ''above'' its nominal parameters, which, if taken too far, can cause kernel panics or even possibly hardware damage}}&lt;br /&gt;
&lt;br /&gt;
For an example of what may be achieved, consider these examples: when voltages on one ThinkPad {{T43}} were reduced by 20-30%, stable CPU temperature dropped by 7-10deg under both idle and burn-in conditions. Combined with [[how to control fan speed|fan speed control]], this greatly reduced the [[Problem with fan noise|problem with fan noise]]. On one user's ThinkPad {{R51}}, an undervolt brought the full-load processor temperature down from 87 degrees to 63 degrees while maintaining full stability. The effect was, however, negligible at idle.&lt;br /&gt;
&lt;br /&gt;
{{NOTE|While under''volting'' has a clear measurable effect, it's not clear if under''clocking'' really works. &amp;lt;tt&amp;gt;/proc/cpuinfo&amp;lt;/tt&amp;gt; reflects the underclocked frequency, but enabling debug output on &amp;lt;tt&amp;gt;cpufreq&amp;lt;/tt&amp;gt; causes it to say things like &amp;quot;&amp;lt;tt&amp;gt;CPU frequency out of sync: cpufreq and timing core thinks of 533000, is 800000 kHz.&amp;lt;/tt&amp;gt;&amp;quot; where the former is the chosen underclocked frequency and the latter is the documented minimum frequency. This discrepancy also causes [[Software Suspend 2]] to oops during suspend.}}&lt;br /&gt;
&lt;br /&gt;
There are several methods to control CPU voltage in Linux, and currently all of them require a patched kernel.&lt;br /&gt;
&lt;br /&gt;
==Alternative 0: linux-phc==&lt;br /&gt;
&lt;br /&gt;
Use the [[linux-phc]] kernel patch. '''This is the recommended  method, as it is most generic and best supported.'''&lt;br /&gt;
* [http://phc.athousandnights.de/ linux-phc home page] &lt;br /&gt;
&lt;br /&gt;
The sysfs interface of linux-phc (version 0.3.0 or newer) requires you to specify VID (Voltage ID) numbers; see the documentation in the source package. For pre-Core Intel CPUs, VID is related to voltage (in mV) as follows: &amp;lt;tt&amp;gt;VID=(voltage-700)/16&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
A typical configuration command would look something like this:&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|echo '27 22 16 10 3' &amp;gt; /sys/devices/system/cpu/cpu0/cpufreq/phc_vids}}&lt;br /&gt;
&lt;br /&gt;
== Alternative 1: patch with hard-coded voltages ==&lt;br /&gt;
=== Instructions ===&lt;br /&gt;
&lt;br /&gt;
# Determine the stable voltages for each frequency, using some overclocking/undervolting utility that has specific support for Pentium M (&amp;quot;Centrino&amp;quot;) processors. It seems that no such utility exists for Linux. For windows, one good choice is [http://www.pbus-167.com/chc.htm Notebook Hardware Control (NHC)], which conveniently also includes a table of nominal frequencies and voltages (in its help file).&amp;lt;br&amp;gt; Ascertain that at the undervolted settings the CPU actually performs correct computation ([http://www.mersenne.org/freesoft.htm Prime95] in &amp;quot;Tortute Test&amp;quot; mode seems to be a good partial test emphasizing FPU and memory access).&amp;lt;br&amp;gt; Note that beside reducing voltages (undervolting), you can also try to add lower frequencies (underclocking). If you undervolt a particular frequency too much your machine is likely to crash, so try not to have any other programs open.&lt;br /&gt;
# Determine the model name string reported by the CPU, e.g., via the &amp;quot;&amp;lt;tt&amp;gt;Model name&amp;lt;/tt&amp;gt;&amp;quot; line in {{path|/proc/cpuinfo}}, and likewise the &amp;lt;tt&amp;gt;cpu_family&amp;lt;/tt&amp;gt;, &amp;lt;tt&amp;gt;model&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;stepping&amp;lt;/tt&amp;gt;.&lt;br /&gt;
# Grab a copy of the example patch below and update it to reflect the parameters, frequencies and voltages you found.&lt;br /&gt;
# Apply the patch to your kernel (tested with 2.6.13.1 and 2.6.14-rc2).&lt;br /&gt;
# To prevent the ACPI table from overriding your table, disable the &amp;lt;tt&amp;gt;CONFIG_X86_SPEEDSTEP_CENTRINO_ACPI&amp;lt;/tt&amp;gt; kernel option.&lt;br /&gt;
# Compile and install the new kernel.&lt;br /&gt;
&lt;br /&gt;
The changes should be active now. If you want to see debug information attesting to thus, do the following:&lt;br /&gt;
&lt;br /&gt;
# Reboot in &amp;lt;tt&amp;gt;single&amp;lt;/tt&amp;gt; mode.&lt;br /&gt;
# {{cmdroot|echo 2 &amp;gt; /sys/module/cpufreq/parameters/debug}}&lt;br /&gt;
# {{cmdroot|modprobe speedstep-centrino}}&lt;br /&gt;
# {{cmdroot|dmesg}} and check for the message &amp;quot;&amp;lt;tt&amp;gt;speedstep-centrino: found &amp;quot;Intel(R) Pentium(R) M processor &amp;lt;/tt&amp;gt;...&amp;quot;&lt;br /&gt;
&lt;br /&gt;
If you don't see that message, you got the &amp;lt;tt&amp;gt;cpu_id&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;model_name&amp;lt;/tt&amp;gt; parmaeters wrong. If your system crashes, re-test the voltages and adjust accordingly.&lt;br /&gt;
&lt;br /&gt;
Please report your results (including voltages)!&lt;br /&gt;
&lt;br /&gt;
=== Linux kernel patch (example) ===&lt;br /&gt;
&lt;br /&gt;
The following example shows how to undervolt a Pentium M 750 (1.86GHz) on a ThinkPad {{T43}}. As discussed above, the parameters are specific to this one CPU. You will need to experimentally find the correct settings for your own CPU and adjust the patch accordingly.&lt;br /&gt;
&lt;br /&gt;
Note that the Pentium M 750 has a 533MHz FSB (quad-pumped 133MHz), hence the use of &amp;lt;tt&amp;gt;OP133&amp;lt;/tt&amp;gt;. If you have a Pentium M with 400MHz FSB (i.e., quad-pumped 100MHz, found in [[Intel Pentium M (Banias)|Banias]] and older [[Intel Pentium M (Dothan)|Dothan]]) then in the voltage table change &amp;lt;tt&amp;gt;OP133&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;OP&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
{{CodeRef|undervolt-pentium-m-2.6.13.1.patch}}&lt;br /&gt;
&lt;br /&gt;
Don't forget to disable &amp;lt;tt&amp;gt;CONFIG_X86_SPEEDSTEP_CENTRINO_ACPI&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Alternative 2: patch with user-space control==&lt;br /&gt;
&lt;br /&gt;
If you want to use the Ubuntu 2.6.15 Kernel, please have a look at this thread: http://ubuntuforums.org/showthread.php?t=146366&lt;br /&gt;
&lt;br /&gt;
The [http://fabrice.bellamy.club.fr/bdz.undervolt.2005.10.22.a.patch bdz.undervolt.2005.10.22.a.patch] patch, written by Gentoo-Wiki user &amp;quot;Bdz&amp;quot;, allows voltages to be changed without reboot.&lt;br /&gt;
&lt;br /&gt;
It presents a userspace interface, as in the following example:&lt;br /&gt;
:{{cmdroot|cat /sys/devices/system/cpu/cpu0/cpufreq/voltage_table}}&lt;br /&gt;
:{{cmdresult|1356,1356,1356,1356,1356,1356,1356,1244,1116,988}}&lt;br /&gt;
:{{cmdroot|echo &amp;quot;1084,1084,1084,1084,1084,1084,1084,988,908,860&amp;quot; &amp;gt;/sys/devices/system/cpu/cpu0/cpufreq/voltage_table}}&lt;br /&gt;
&lt;br /&gt;
The relevant [http://gentoo-wiki.com/HOWTO_Undervolt_a_Pentium_M_CPU page] on Gentoo-Wiki providues further information and some helpful hints and scripts for voltage adjustment.&lt;br /&gt;
&lt;br /&gt;
When applying this patch be sure to keep the &amp;quot;ACPI tables for decoding frequency pairs&amp;quot; option -- this patch only allows adjustment of the voltages for the normal clock speeds as reported by the ACPI table in the BIOS.  On some models (e.g., ThinkPad {{T43}}) this does not include all clock speeds supported by the processor.&lt;br /&gt;
&lt;br /&gt;
=Initscript=&lt;br /&gt;
This is a Gentoo initscript for the patch from Gentoo-Wiki user &amp;quot;Bdz&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Configuration file ===&lt;br /&gt;
&amp;lt;bash&amp;gt;&lt;br /&gt;
# /etc/conf.d/undervoltage&lt;br /&gt;
&lt;br /&gt;
# voltage table sysfs interface&lt;br /&gt;
VTABLE_SYSFS=&amp;quot;/sys/devices/system/cpu/cpu0/cpufreq/voltage_table&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# switch back to  DEFAULT_VTABLE if undervoltage is stopped? [yes/no]&lt;br /&gt;
SWITCH_BACK=&amp;quot;no&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# pentium-m banias 1,7GHz default voltages&lt;br /&gt;
DEFAULT_VTABLE=&amp;quot;1484,1308,1228,1116,1004,956&amp;quot;&lt;br /&gt;
# pentium-m banias 1,7GHz lowered voltages [ -208mV ]&lt;br /&gt;
MOD_VTABLE=&amp;quot;1276,1100,1020,908,796,748&amp;quot;&lt;br /&gt;
&amp;lt;/bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Initscript ===&lt;br /&gt;
&amp;lt;bash&amp;gt;&lt;br /&gt;
#!/sbin/runscript&lt;br /&gt;
# Copyright 1999-2005 Gentoo Foundation&lt;br /&gt;
# Distributed under the terms of the GNU General Public License v2&lt;br /&gt;
# $Header: $&lt;br /&gt;
&lt;br /&gt;
sysfs_check() {&lt;br /&gt;
&lt;br /&gt;
        if ! [ -e ${VTABLE_SYSFS} ]; then&lt;br /&gt;
                logger &amp;quot;No sysfs voltage_table present. Modifying vcore voltage failed.&amp;quot;&lt;br /&gt;
                eerror &amp;quot;It seems that the undervolting patch has not been applied to the kernel.&amp;quot;&lt;br /&gt;
                eerror &amp;quot;see http://gentoo-wiki.com/HOWTO_Undervolt_a_Pentium_M_CPU for further information&amp;quot;&lt;br /&gt;
                return 1&lt;br /&gt;
        fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
start() {&lt;br /&gt;
        sysfs_check || return 1&lt;br /&gt;
        ebegin &amp;quot;Switching to modified voltage table [${MOD_VTABLE}]&amp;quot;&lt;br /&gt;
                echo ${MOD_VTABLE} &amp;gt; ${VTABLE_SYSFS}&lt;br /&gt;
        eend $?&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# I think it is not necessary to switch to the default voltage table on shutdown&lt;br /&gt;
stop() {&lt;br /&gt;
        if [ $SWITCH_BACK = &amp;quot;yes&amp;quot; ]; then&lt;br /&gt;
                ebegin &amp;quot;Switching back to default voltage table [${DEFAULT_VTABLE}]&amp;quot;&lt;br /&gt;
                        echo ${DEFAULT_VTABLE} &amp;gt; ${VTABLE_SYSFS}&lt;br /&gt;
                eend $?&lt;br /&gt;
        fi &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Alternative 3: another patch with user-space control==&lt;br /&gt;
&lt;br /&gt;
The [http://avkrok.net/nw8240/centrino-voltages.diff centrino-voltages.diff] patch, written by Rickard Holmberg, also provides user-space control. See [http://avkrok.net/nw8240/ here] and [http://mailman.linux-thinkpad.org/pipermail/linux-thinkpad/2005-December/030772.html here] for usage.&lt;br /&gt;
&lt;br /&gt;
==Stress Testing==&lt;br /&gt;
&lt;br /&gt;
This [[Undervolt Stress Testing Script|script]] illustrates a very conservative method to stress test your lowered voltage settings.&lt;br /&gt;
&lt;br /&gt;
==Tested frequencies/voltages==&lt;br /&gt;
&lt;br /&gt;
If you have done excessive testing with user defined frequencies (stable system for over a month).&lt;br /&gt;
and no lookups occur when computing primes with mprime http://mersenne.org/ (gentoo: 'emerge gimps')&lt;br /&gt;
you can post your frequencies here. But note that this is just a rough indication, since the stable values will differ between individual processors, even in the same model.&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
! CPU Type !! GHz !! Frequency Steps&lt;br /&gt;
|-&lt;br /&gt;
| Pentium-M Banias || 1.6  || 1212,1084,956,860,796,748&lt;br /&gt;
|-&lt;br /&gt;
| Pentium-M Banias || 1.7  || 1276,1100,1020,908,796,748&lt;br /&gt;
|-&lt;br /&gt;
| Pentium-M Dothan || 1.4 || 924,892,860,828,796,764,732,700&lt;br /&gt;
|-&lt;br /&gt;
| Pentium-M Dothan || 1.86 || 1068,972,876,780,700&lt;br /&gt;
|-&lt;br /&gt;
| Pentium-M SL6F7  || 1.6  || 1196,1052,956,860,780,732&lt;br /&gt;
|-&lt;br /&gt;
| Pentium-M Dothan || 1.5 || 924,892,860,828,812,796,764,732,700&lt;br /&gt;
|-&lt;br /&gt;
| Pentium-M Dothan || 2.0 || 1084,940,844,764,748&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Following values were obtained with: (running at the same time)&lt;br /&gt;
&amp;lt;bash&amp;gt;&lt;br /&gt;
nice -n19 glxgears &amp;amp;&lt;br /&gt;
mplayer somedivx.avi &amp;amp;&lt;br /&gt;
cd /usr/src/linux &amp;amp;&amp;amp; make -j2&lt;br /&gt;
&amp;lt;/bash&amp;gt;&lt;br /&gt;
* note1: for pre-Core Intel CPUs, VID is related to voltage (in mV) as follows: VID=(voltage-700)/16 (or: voltage=(VID*16+700) mV)&lt;br /&gt;
* note2: when testing for stability you should pay attention to sound too, occasional distortions which disappear after bumping voltage a notch or two&lt;br /&gt;
* note3: if you use phc_vids for your script, then take only second number in each pair&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
! Machine !! CPU Type !! GHz !! phc_controls (fid:vid)&lt;br /&gt;
|-&lt;br /&gt;
| {{X41T}} || Pentium-M Dothan LV (758) || 1.5 || 15:15 14:13 13:11 12:9 11:7 10:5 9:3 8:2 6:2&lt;br /&gt;
|-&lt;br /&gt;
| {{X32}} || Pentium-M Dothan (745) || 1.8 || 18:26 16:20 14:15 12:11 10:6 8:2 6:1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Patches]]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Fglrx&amp;diff=34774</id>
		<title>Fglrx</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Fglrx&amp;diff=34774"/>
		<updated>2007-11-22T06:27:13Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: /* Status */ fglrx 7-11 released&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;
== ATI fglrx driver ==&lt;br /&gt;
This is a proprietary Linux binary-only driver for ATI graphic chips with support for 3D acceleration.&lt;br /&gt;
&lt;br /&gt;
Also see [[R300|opensource driver]] with 3D support&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Availability / Project Homepage==&lt;br /&gt;
Home page: http://ati.amd.com/support/drivers/linux/linux-radeon.html&lt;br /&gt;
&lt;br /&gt;
== Packages ==&lt;br /&gt;
The ATI drivers have explicit permission for repackaging and redistribution of the Linux drivers.  Many distributions are supported within the installer, and many more repackaged by external developers.  Please visit the  [http://wiki.cchtml.com/index.php/Category:Distributions Distribution Page at the Unofficial ATI driver Wiki]&lt;br /&gt;
&lt;br /&gt;
*{{Debian}}&lt;br /&gt;
** These packages have been added to Debian unstable as &amp;lt;tt&amp;gt;fglrx-driver&amp;lt;/tt&amp;gt;, so you can now apt-get them and use module-assistant to install.&lt;br /&gt;
** If you are on stable sarge with backport's kernel 2.6.15, download ATI's installer, let it build Debian packages and proceed as usual. There's a [http://jroller.com/page/erAck?entry=lot_day_6_2_fglrx detailed description] available.&lt;br /&gt;
** [http://wiki.cchtml.com/index.php/Debian_Installation_Guide Debian Howto]&lt;br /&gt;
*{{SUSE}} packages: http://www.suse.de/~sndirsch/ati-installer-HOWTO.html&lt;br /&gt;
*{{Gentoo}} {{cmdroot|emerge ati-drivers}}&lt;br /&gt;
*{{Fedora}} 4 packages: http://rpm.livna.org&lt;br /&gt;
** For stock Fedora kernels: {{cmdroot|yum install kernel-module-fglrx-$(uname -r) ati-fglrx }}&lt;br /&gt;
** For custom-compiled kernels: see [[How to build custom packages for fglrx]]&lt;br /&gt;
*{{Fedora}} 5 packages: http://rpm.livna.org&lt;br /&gt;
** For stock Fedora kernels: {{cmdroot|yum install xorg-x11-drv-fglrx}}&lt;br /&gt;
** For custom-compiled kernels: see [[How to build custom packages for fglrx]]&lt;br /&gt;
*{{Fedora}} 7 packages: http://rpm.livna.org&lt;br /&gt;
** The newest version of the driver (8.39.4) is supposed to work with Fedora 7, and is available from Livna.&lt;br /&gt;
*{{Arch Linux}}&lt;br /&gt;
:{{cmdroot|pacman -S ati-fglrx}} (kernel module for 2.6.15-ARCH)&lt;br /&gt;
:{{cmdroot|pacman -S ati-fglrx-archck}} (kernel module for 2.6.15-archck)&lt;br /&gt;
:{{cmdroot|pacman -S ati-fglrx-utils}} (xorg7 stuff and tools)&lt;br /&gt;
*{{Ubuntu}}&lt;br /&gt;
**[http://wiki.cchtml.com/index.php/Ubuntu_Dapper_Installation_Guide Dapper Drake Howto]&lt;br /&gt;
**[http://wiki.cchtml.com/index.php/Ubuntu_Breezy_Installation_Guide Breezy Badger Howto]&lt;br /&gt;
**[http://wiki.cchtml.com/index.php/Ubuntu_Edgy_Installation_Guide Edgy Eft Howto]&lt;br /&gt;
**[http://wiki.cchtml.com/index.php/Ubuntu_Feisty_Installation_Guide Feisty Fawn Howto]&lt;br /&gt;
&lt;br /&gt;
== Building for Xorg 7.0==&lt;br /&gt;
To compile fglrx versions &amp;lt;= 8.24.8 for Xorg 7.0.0, fake Xorg 6.9.0 by &lt;br /&gt;
:{{cmdroot|1=export X_VERSION=x690; sh ati-driver-installer-8.24.8-x86.run}}&lt;br /&gt;
Next, move the various resulting libraries and modules from /usr/X11R6 to /usr/lib/xorg&lt;br /&gt;
&lt;br /&gt;
In {{path|/usr/src/ATI}} additional sources are installed for fireglcontrol and fgl_glxgears&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
Current version: 7-11 (8.433) (21st October 2007).&lt;br /&gt;
Major changes:&lt;br /&gt;
* 7-11: new versioning scheme, kernel 2.6.23 support&lt;br /&gt;
* 8.42.3: Composite support added enabling AIGLX and Beryl/Compiz on the desktop. Support for (most?) FireGl cards dropped (should be restored in upcoming versions)&lt;br /&gt;
* 8.41.7: increased OpenGL performance on some Radeon Cards, size/position TV-out adjustments work for Radeon X1900 or higher, X crash when connecting external DFP display fixed &lt;br /&gt;
* 8.40.4: some new TV out control options in CCC, another (non-exciting) maintenance release (see [http://www.phoronix.com/scan.php?page=article&amp;amp;item=804&amp;amp;num=1 Phoronix])&lt;br /&gt;
* 8.39.4: kernel 2.6.22 support, TexturedVideo fix, aticonfig segfault fix (see 8.38.7 hotfix), to get rid of the &amp;quot;AMD Testing use only&amp;quot; logo, use [http://www.phoronix.com/forums/showpost.php?p=10641&amp;amp;postcount=44 this] workaround.&lt;br /&gt;
* 8.38.7: hotfix release for &amp;quot;Using aticonfig --initial segfaults destroying xorg.conf file when run in X with Vesa driver.&amp;quot;, search for &amp;quot;737-28261&amp;quot; on the ATI website.&lt;br /&gt;
* 8.38.6: RedHat Enterprise Linux 5 support, Xserver crashes on moving video window between two monitors fixed, corruption when playing multiple vodeps with textured video fixed&lt;br /&gt;
* 8.37.6: Xorg Server 1.3 support, CCC 1.0, crash when logging off from X fixed, Xv cropping bug fixed&lt;br /&gt;
* 8.36.5: Kernel 2.6.20 support, CCC Beta 0.9 with localization&lt;br /&gt;
* 8.35.5: Beta AMD Catalyst Control Center, X-Server termination from console does not result in a blank screen. Kernel 2.6.20 requires some patching (see [[Problems_with_fglrx#fglrx_8.35.5|fglrx patches section]]).&lt;br /&gt;
* 8.34.8: Radeon Xpress 1250 support, X-Video on x86_64 fix, hibernation mode fix. Kernel 2.6.20 requires some patching (see [[Problems_with_fglrx#fglrx_8.34.8|fglrx patches section]]).&lt;br /&gt;
* 8.33.6: X.Org 7.2 support, kernel 2.6.19 support, some fixes in the installer, 2 more bugfixes. Resume from suspend works if you make sure you have set &amp;quot;VbetoolPost no&amp;quot; and &amp;quot;EnableVbetool no&amp;quot; in your suspend to ram hibernate conf (/etc/hibernate/ram.conf on ubuntu/debian).&lt;br /&gt;
* 8.32.5: support for X1650, X.Org 7.2 RC2 support, bugfixes. Suspend-to-ram is broken with specific cards, *no* 2.6.19 support (see [[Problems_with_fglrx#fglrx_8.32.5|fglrx patches section]]).&lt;br /&gt;
* 8.31.5: no new features, only bugfixes.  Of note, for some users, this version breaks suspend-to-ram and suspend-to-disk.&lt;br /&gt;
* 8.30.3: no new features, only bugfixes&lt;br /&gt;
* 8.29.6: Linux 2.6.18 support, dropped support for Radeon 8500/9000/9100/9200/9250 (both, mobile and normal versions)&lt;br /&gt;
* 8.28.8: Display Switching Support for ThinkPads, ATI Pairmode support, Retaining display device state between restarts, Support for Radeon Xpress 1200, 1250, and 1300&lt;br /&gt;
* 8.27.10: X.org 7.1 support, Fedora Core package support&lt;br /&gt;
* 8.26.18: support for dynamically attached DFPs and Thermal Event Power Management (both via daemon), minor bug fixes&lt;br /&gt;
* 8.25.18: Xorg 7.0 support, FireGLâ„¢V5xxx/V7xxx support, Dynamic Display Management, fixed a lot of critical bugs.&lt;br /&gt;
* 8.24.8: support for X1300, X1400, X1600, X1800 (generic and mobility) and 3D accelerated video playback on Avivo&lt;br /&gt;
* 8.23.7: support for X850 and X800, OpenGL 2.0 Enhancement, FSAA for some chips&lt;br /&gt;
* 8.22.5: added kernel 2.6.15 support -- patch no longer required&lt;br /&gt;
* 8.21.7: initial OpenGL 2.0 support&lt;br /&gt;
* 8.20.8: fixed resume issues, fixed compile problems with kernels 2.6.13 and 2.6.14&lt;br /&gt;
* 8.19.10: has added suspend / resume and dynamic GPU power management support.  Using vbetool no longer required.&lt;br /&gt;
&lt;br /&gt;
== Known problems and solutions ==&lt;br /&gt;
See [[Problems with fglrx]].&lt;br /&gt;
== User experience ==&lt;br /&gt;
=== Speed ===&lt;br /&gt;
How much is the speed gain versus the opensource drivers?&lt;br /&gt;
&lt;br /&gt;
Compared to the old drivers, approximately 40% speed gain have been noticed with fglrx. However, there are issues with freezing/garbage after suspend, garbage when resizing desktop (via {{key|ctrl}}{{key|alt}}{{key|plus}}, {{key|ctrl}}{{key|alt}}{{key|minus}}), and garbage while using VMware. The current 8.14.13 has shown 400% improvement over using the open source radeon driver: 1200 FPS for glxgears{{footnote|1}}!&lt;br /&gt;
&lt;br /&gt;
However the situation seems to be changing significantly as time goes on. With recent x11-drm-20060608 driver (gentoo) and thinkpad t42 (ati 9600) the speed is confirmed as 1900fps and stable.  As of October 2007 there is dramatic improvement in the open source 3d drivers in speed and stability.&lt;br /&gt;
&lt;br /&gt;
=== 3D acceleration ===&lt;br /&gt;
&lt;br /&gt;
According to [http://xoomer.alice.it/flavio.stanchina/debian/fglrx-installer.html#configure Flavio's page] you need these options:&lt;br /&gt;
&lt;br /&gt;
  Section &amp;quot;Module&amp;quot;&lt;br /&gt;
    ...&lt;br /&gt;
    Load &amp;quot;GLcore&amp;quot;&lt;br /&gt;
    Load &amp;quot;glx&amp;quot;&lt;br /&gt;
    Load &amp;quot;dri&amp;quot;&lt;br /&gt;
    ...&lt;br /&gt;
  EndSection&lt;br /&gt;
&lt;br /&gt;
  # Of course you need to activate the driver&lt;br /&gt;
  Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    ...&lt;br /&gt;
    Driver     &amp;quot;fglrx&amp;quot;&lt;br /&gt;
  EndSection&lt;br /&gt;
&lt;br /&gt;
Don't forget to load the module &amp;lt;tt&amp;gt;fglrx&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;modprobe fglrx&amp;lt;/tt&amp;gt;).  Under Debian the module can be placed in &amp;lt;tt&amp;gt;/etc/modules&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
With fglrx drivers prior to 8.42.3 will need to disable composite to enable 3D DRI acceleration. To do this, add an extra Extensions section (if necessary) containing:&lt;br /&gt;
&lt;br /&gt;
  Section &amp;quot;Extensions&amp;quot;&lt;br /&gt;
     Option  &amp;quot;Composite&amp;quot; &amp;quot;Disable&amp;quot;  #make DRI work with fglrx.&lt;br /&gt;
  EndSection&lt;br /&gt;
&lt;br /&gt;
If you are unsure whether you have DRI running, issue &amp;lt;tt&amp;gt;glxinfo | grep -i direct&amp;lt;/tt&amp;gt; after disabling composite.  Note, this &lt;br /&gt;
&lt;br /&gt;
{{NOTE|1=Video overlay acceleration may be disabled when 3D acceleration is enabled. The following comment from the xorg.conf file bundled with the fglrx driver indicates that:&lt;br /&gt;
   # === OpenGL Overlay ===&lt;br /&gt;
   # Note: When OpenGL Overlay is enabled, Video Overlay&lt;br /&gt;
   #       will be disabled automatically&lt;br /&gt;
       Option &amp;quot;OpenGLOverlay&amp;quot;              &amp;quot;1&amp;quot;&lt;br /&gt;
However, you can use either regular Xv video overlay or make the video an opengl texture and let the OpenGL engine scale your video.  This has nothing to do with the acceleration of 2D drawing primitives.  Further, your mileage on performance may vary depending on what card you have.  The open source drivers don't support newer cards, while the ATI drivers don't support older cards.&lt;br /&gt;
&lt;br /&gt;
You may be able to preserve VideoOverlay acceleration if you explicitly remove the OpenGLOverlay using:&lt;br /&gt;
&lt;br /&gt;
Option &amp;quot;VideoOverlay&amp;quot;  &amp;quot;True&amp;quot; and Option &amp;quot;OpenGLOverlay&amp;quot; &amp;quot;False&amp;quot;.  See [http://xoomer.alice.it/flavio.stanchina/debian/fglrx-installer.html#configure Flavio's page] for detail.}}&lt;br /&gt;
&lt;br /&gt;
=== Power saving ===&lt;br /&gt;
Power saving is much better than with the &amp;lt;tt&amp;gt;radeon&amp;lt;/tt&amp;gt; driver, but doesn't work in dual-screen configuration (see [[How to make use of Graphics Chips Power Management features]]).&lt;br /&gt;
&lt;br /&gt;
=== Suspending with fglrx ===&lt;br /&gt;
&lt;br /&gt;
On a ThinkPad T42 with Kernel 2.6.19 with Software Suspend 2 and R60 with Kernel 2.6.18-suspend2-r1 (Gentoo) , the following addition to &amp;lt;tt&amp;gt;/etc/hibernate/suspend2.conf&amp;lt;/tt&amp;gt; is required:&lt;br /&gt;
&lt;br /&gt;
  # For fglrx&lt;br /&gt;
  ProcSetting extra_pages_allowance 20000&lt;br /&gt;
&lt;br /&gt;
=== Display Switching (Dynamic Display Management) ===&lt;br /&gt;
&lt;br /&gt;
Version 8.25.18 introduces a new feature: Dynamic Display Management. It allows display switching on-the-fly.&lt;br /&gt;
&lt;br /&gt;
To list all connected and enabled monitors:&lt;br /&gt;
:{{cmdroot|1=aticonfig --query-monitor}}&lt;br /&gt;
&lt;br /&gt;
To switch displays:&lt;br /&gt;
:{{cmdroot|1=aticonfig --enable-monitor=STRING,STRING}}, where STRING can be: none, lvds, crt1, crt2, tv, tdms1, tdms2&lt;br /&gt;
&lt;br /&gt;
Only 2 displays can be enabled at the same time. Any displays that are not on the list will be disabled.&lt;br /&gt;
&lt;br /&gt;
The '''Catalyst Control Center''', which comes with the driver (at least from Livna in Fedora Core 6) can be used to do this switching.  It also does various other kinds of display managements.  However, the version that comes with 8.39.4 doesn't seem to handle switching into Big Desktop mode, does anyone know how to get this to work?  The control center also complains a lot about rebooting, but rebooting doesn't seem to be required.  Does anyone have decent documentation for the control center?&lt;br /&gt;
&lt;br /&gt;
== Useful links == &lt;br /&gt;
* [http://www.ati.com/products/catalyst/linux.html ATI Linux Driver FAQ]&lt;br /&gt;
* [http://www.rage3d.com/content/articles/atilinuxhowto/ ATI Radeon Linux How-To]&lt;br /&gt;
* [http://www.rage3d.com/board/forumdisplay.php?f=61&amp;amp;daysprune=30&amp;amp;order=asc&amp;amp;sort=title Rage3D Linux Discussion Forum]&lt;br /&gt;
* [http://www.driverheaven.net/forumdisplay.php?f=103 Radeon Driver Forum at Driverheaven]&lt;br /&gt;
* [http://odin.prohosting.com/wedge01/gentoo-radeon-faq.html Gentoo ATI Radeon FAQ]&lt;br /&gt;
* [http://forums.gentoo.org/viewtopic-t-374745-highlight-t42+ati+dri.html Gentoo T42 ATI. DRI + xorg driver]&lt;br /&gt;
* [http://ati.cchtml.com/ Unofficial community ATI bugzilla] - tracks bugs in the driver. Might be monitored by ATI ([http://www.rage3d.com/board/showpost.php?p=1333438751&amp;amp;postcount=386], [http://www.rage3d.com/board/showpost.php?p=1333439009&amp;amp;postcount=390]).&lt;br /&gt;
&lt;br /&gt;
== ThinkPads that may be supported ==&lt;br /&gt;
Supported chips, as found in select IBM ThinkPads:&lt;br /&gt;
{{NOTE|fglrx version 8.29.6 discontinued support for Radeon 9200 and earlier.}}&lt;br /&gt;
* [[ATI Mobility FireGL 9000]]&lt;br /&gt;
** {{T40p}}&lt;br /&gt;
* [[ATI Mobility FireGL T2]]&lt;br /&gt;
** {{R50p}}&lt;br /&gt;
** {{T41p}}, {{T42p}}&lt;br /&gt;
* [[ATI Mobility FireGL V3200]]&lt;br /&gt;
** {{T43p}}&lt;br /&gt;
* [[ATI Mobility Radeon 9000]]&lt;br /&gt;
** {{R50}}, {{R51}}&lt;br /&gt;
** {{T40}}, {{T41}}, {{T42}}&lt;br /&gt;
* [[ATI Mobility Radeon 9600]]&lt;br /&gt;
** {{T42}}&lt;br /&gt;
* [[ATI Mobility Radeon X300]]&lt;br /&gt;
** {{R52}}&lt;br /&gt;
** {{T43}}&lt;br /&gt;
** {{Z60m}}&lt;br /&gt;
* [[ATI Mobility Radeon Xpress 200M]]&lt;br /&gt;
** {{R51e}}&lt;br /&gt;
* [[ATI Mobility Radeon X600]]&lt;br /&gt;
** {{Z60m}}&lt;br /&gt;
* [[ATI Mobility Radeon X1400]]&lt;br /&gt;
** {{T60}}, {{R60}}, {{Z61m}}&lt;br /&gt;
* [[ATI Mobility FireGL V5200]]&lt;br /&gt;
** {{T60p}}, {{Z61p}}&lt;br /&gt;
&lt;br /&gt;
== ThinkPads that are NOT supported by fglrx==&lt;br /&gt;
Unsupported chips, as found in select IBM ThinkPads:&lt;br /&gt;
* [[ATI Mobility Radeon 7500]]&lt;br /&gt;
** {{R40}}&lt;br /&gt;
** {{T30}}&lt;br /&gt;
** {{T42}}&lt;br /&gt;
&lt;br /&gt;
{{footnotes|&lt;br /&gt;
#Note that glxgears isn't a benchmark tool, it's so simple that its FPS values is without any meaning... you can only compare glxgears using the same drivers/machine, if you change any of then you can have higher/lower values and in real life programs/games happen to have the opposite effects. Think in terms of a car engines rpms: higher rpms in the same car usually means a faster car, change anything and it's meaningless, ie: gears, truck, wheel size, etc. make it useless.&lt;br /&gt;
}}&lt;br /&gt;
[[Category:Drivers]]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Template:Industry_News&amp;diff=34773</id>
		<title>Template:Industry News</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Template:Industry_News&amp;diff=34773"/>
		<updated>2007-11-22T06:24:18Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: fglrx 7-11 (8.433) released&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;21. 11. 2007: New [[fglrx]] driver version 7-11 (8.433) [https://a248.e.akamai.net/f/674/9206/0/www2.ati.com/drivers/linux/catalyst_711_linux.html released].&lt;br /&gt;
&lt;br /&gt;
23. 10. 2007: New [[fglrx]] driver version 8.42.3 [https://a248.e.akamai.net/f/674/9206/0/www2.ati.com/drivers/linux/linux_8.42.3.html released].&lt;br /&gt;
&lt;br /&gt;
12. 10. 2007: New [http://www.thinkpadreserve.com/ ThinkPad Reserve edition] model officially announced.&lt;br /&gt;
&lt;br /&gt;
12. 9. 2007: New [[fglrx]] driver version 8.41.7 [https://a248.e.akamai.net/f/674/9206/0/www2.ati.com/drivers/linux/linux_8.41.7.html released].&lt;br /&gt;
&lt;br /&gt;
8. 9. 2007: Lenovo's [http://lenovoblogs.com/insidethebox Inside the Box] blog discusses ThinkPad Linux support&lt;br /&gt;
&lt;br /&gt;
5. 9. 2007: AMD/ATI announces [http://home.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&amp;amp;newsId=20070904006432&amp;amp;newsLang=en new HD2k Radeon drivers], pledging composite support and significant performance improvements on modern (2.6.22) kernels. &lt;br /&gt;
&lt;br /&gt;
8. 8. 2007: New [[fglrx]] driver version 8.40.4 [https://a248.e.akamai.net/f/674/9206/0/www2.ati.com/drivers/linux/linux_8.40.4.html released].&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=HDAPS&amp;diff=34701</id>
		<title>HDAPS</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=HDAPS&amp;diff=34701"/>
		<updated>2007-11-18T14:51:27Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: /* Kernel patch */&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;
=== HDAPS - IBM Active Protection System Linux Driver ===&lt;br /&gt;
This is the Linux driver for monitoring the accelerometer known as [[Active Protection System|IBM Active Protection System]].&lt;br /&gt;
&lt;br /&gt;
The driver only enables reading of the acceleration data. It does '''not''' perform [[#Harddisk Protection|automatic disk head parking]]. But there are already some other useful [[#Applications|applications]] for HDAPS, using the {{path|/sys}} interface it provides.&lt;br /&gt;
&lt;br /&gt;
{{WARN|There are two versions of the hdaps driver, one in the Linux kernel mainline, and another provided by [[tp_smapi]].  '''Use of the tp_smapi version of hdaps is strongly recommended by the current hdaps developers.'''}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
*provides accelerometer values via sysfs&lt;br /&gt;
*provides a joystick type input device&lt;br /&gt;
&lt;br /&gt;
=== Project Homepage / Availability ===&lt;br /&gt;
*[http://hdaps.sourceforge.net/ Project Homepage]&lt;br /&gt;
*The driver is included in the 2.6-mm series of kernels since August, 26th 2005.&lt;br /&gt;
*The driver is now in the mainline (2.6.14).&lt;br /&gt;
*The [[tp_smapi]] package contains some patches to this driver. These are necessary for some recent models, and recommended for all.&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
A driver is included in recent Linux kernels and is actively maintained, but it is very inferior to the driver in tp_smapi (which provides its own hdaps module).&lt;br /&gt;
&lt;br /&gt;
=== How to install the driver ===&lt;br /&gt;
Recent Linux kernels include the &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; driver. However, the driver in the mainline Linux kernel has two problems with recent models:&lt;br /&gt;
* It doesn't whitelist them (you have to edit hdaps_init() in drivers/hwmon/hdaps.c to include a line like &amp;lt;tt&amp;gt;HDAPS_DMI_MATCH_LENOVO(&amp;quot;ThinkPad T60&amp;quot;)&amp;lt;/tt&amp;gt;)&lt;br /&gt;
* It doesn't work reliably, e.g., it may read out constant values (0,0). See [http://sourceforge.net/mailarchive/message.php?msg_id=15350314 here].&lt;br /&gt;
&lt;br /&gt;
To solve both problems, install the modified hdaps that is bundled with [[tp_smapi]].&lt;br /&gt;
&lt;br /&gt;
=== Harddisk Protection ===&lt;br /&gt;
As mentioned above, the hdaps kernel driver is only responsible for reading the accelerometer data and exporting it through the sysfs interface. In order to use this information to protect the disk, some additional steps are required.&lt;br /&gt;
&lt;br /&gt;
See [[How to protect the harddisk through APS]].&lt;br /&gt;
&lt;br /&gt;
=== Input device support ===&lt;br /&gt;
The hdaps driver in the lastest kernels (2.6.14 and later?) also exports a joystick type input device, which can be used by games.&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
====Disk head parking====&lt;br /&gt;
You will need the kernel patch and userspace daemon. The GUI monitoring is optional.&lt;br /&gt;
&lt;br /&gt;
See [[How to protect the harddisk through APS]] for more information.&lt;br /&gt;
&lt;br /&gt;
===== Kernel patch =====&lt;br /&gt;
Apply these using 'patch -p1 -l &amp;lt; hdaps_xx.patch'.&lt;br /&gt;
* New interface&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1093 Latest sata/ide disk protection patch for 2.6.23.8]&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1077 Latest sata/ide disk protection patch for 2.6.22.9 and 2.6.23-rc9]&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/993 Latest sata/ide disk protection patch for 2.6.20 and 2.6.21]&lt;br /&gt;
* Old interface&lt;br /&gt;
**[http://www.nabble.com/attachment/9047418/0/hdaps_protect-2.6.20.patch.bz2 Latest sata/ide disk protection patch for 2.6.20]&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.kernel/470413 Latest sata/ide disk protection patch for 2.6.19-rc6]&lt;br /&gt;
**[http://www.dresco.co.uk/hdaps/hdaps_protect-2.6.18.3-2.patch Latest sata/ide disk protection patch for 2.6.18.3]&lt;br /&gt;
**[http://exitzero.de/t41p-configs/hdaps_protect-2.6.17.1-20060625.patch Untested patch for 2.6.17.1]: see [http://thread.gmane.org/gmane.linux.drivers.hdaps.devel/708/focus=708]&lt;br /&gt;
**[http://whoopie.gmxhome.de/linux/patches/2.6.17.14-tj/03-hdaps_protect-20060430-for-2.6.17-tj.patch Latest sata/ide disk protection patch for use with the libata hotplug 2.6.17.4 patches] - See [[How_to_hotswap_UltraBay_devices]]&lt;br /&gt;
**[http://whoopie.gmxhome.de/linux/patches/2.6.16-tj/05-hdaps_protect-20060430-for-2.6.16-tj.patch Latest sata/ide disk protection patch for use with the libata hotplug 2.6.16.16 patches] - See [[How_to_hotswap_UltraBay_devices]]&lt;br /&gt;
**[http://www.dresco.co.uk/hdaps/hdaps_protect.20060430.patch Latest sata/ide disk protection patch for 2.6.16]&lt;br /&gt;
**[http://www.dresco.co.uk/hdaps/hdaps_protect.20060118.patch sata/ide disk protection patch for 2.6.15]&lt;br /&gt;
**[http://jenster.dyndns.org/files/blk_freeze-01-nodetection-for-2.6.15.patch disk park patch adapted for the t41p model] &amp;lt;tt&amp;gt; kernel 2.6.15 ([http://sourceforge.net/mailarchive/message.php?msg_id=13214288 capability detection disabled], no libata support)&amp;lt;/tt&amp;gt;&lt;br /&gt;
**[http://jenster.dyndns.org/files/blk_freeze-01-nodetection-for-2.6.14.patch disk park patch adapted for the t41p model] &amp;lt;tt&amp;gt; kernel 2.6.14 ([http://sourceforge.net/mailarchive/message.php?msg_id=13214288 capability detection disabled], no libata support)&amp;lt;/tt&amp;gt;&lt;br /&gt;
**[http://lwn.net/Articles/154923/ disk park patch] &amp;lt;tt&amp;gt;an experimental patch for parking the disk (Linux 2.6.14 for 2.6.15 see below)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Userspace daemon =====&lt;br /&gt;
*[http://www.dresco.co.uk/hdaps/hdapsd-20070524.c Recommended version]&lt;br /&gt;
*[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1045 Reduced power version] - reduces timer interrupts, as measured by [[PowerTOP]]. This leads to lower power consumption on [[tickless kernel|tickless kernels]]. Interrupt reduction requires the &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; kernel module from [[tp_smapi]] 0.32 or newer, and a [http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1040 udev rule].&lt;br /&gt;
*[ftp://rohrmoser-engineering.de/pub Modified adaptive algorithm version] - uses a different (and potentially better) algorithm for the adaptive sensivity threshold.&lt;br /&gt;
&lt;br /&gt;
===== GUI monitoring =====&lt;br /&gt;
*[http://roy.marples.name/node/269 khdapmonitor] KDE System Tray Monitor&lt;br /&gt;
*[http://www.dresco.co.uk/hdaps/gnome-hdaps-applet-20060120.tar.gz gnome-hdaps-applet] visual display of disk protection status in gnome panel&lt;br /&gt;
&lt;br /&gt;
====Security &amp;amp; safety====&lt;br /&gt;
*[[Script for theft alarm using HDAPS]]&lt;br /&gt;
&lt;br /&gt;
====Tilt monitoring====&lt;br /&gt;
*[http://www.mulliner.org/collin/gkibm-acpi.php gkhdaps] &amp;lt;tt&amp;gt;a GKrellM applet displaying tilt data&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[http://rlove.org/log/2005082203.html gnome-tilt] &amp;lt;tt&amp;gt;a gnome applet showing tilt data&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Visualisation of ThinkPad orientation====&lt;br /&gt;
*[http://rlove.org/log/2005082401.html hdaps-gl] &amp;lt;tt&amp;gt;a little app animating a 3D-ThinkPad&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[https://sourceforge.net/project/showfiles.php?group_id=138242 hdapsgl-applet] &amp;lt;tt&amp;gt; a GNOME applet animating a 3D-ThinkPad&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[https://sourceforge.net/project/showfiles.php?group_id=138242 wmadhps] &amp;lt;tt&amp;gt;a WindowMaker DockApp animating a 3D-ThinkPad&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[http://www.cs.cmu.edu/~ecc/gyro.tar.gz OpenGL gyroscope hack] &amp;lt;tt&amp;gt;keeps your display levelled when tilting the ThinkPad&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Games====&lt;br /&gt;
*[http://icculus.org/neverball/ Neverball] is quite fun with HDAPS. (You'll need to have the HDAPS joystick device)&lt;br /&gt;
*Turn your ThinkPad into a Jedi Weapon (hey, it [http://isnoop.net/blog/2006/05/20/macsaber-turn-your-mac-into-a-jedi-weapon works for Mac laptops])&lt;br /&gt;
&lt;br /&gt;
====Other====&lt;br /&gt;
&lt;br /&gt;
*[http://blog.micampe.it/articles/2006/06/04/here-comes-the-smackpad smack.py] - switch workspace by smacking your laptop, inspired by the [http://blog.medallia.com/2006/05/smacbook_pro.html SmackBook] (uses EWMH)&lt;br /&gt;
**an [http://weblogs.mozillazine.org/gerv/archives/2006/09/stablilised_smackpad.html improved version] adds stabilization (by comparing smacks to previous ones, uses EWMH)&lt;br /&gt;
**another [http://pberndt.com/Programme/Linux/pyhdaps/index.html approach] adds stabilization (by requiring a certain type of value deflection, uses xmacroplay)&lt;br /&gt;
**[http://www.gnome.org/~fherrera/gtollina.c GTollina] is another smack program for use with compiz (video [http://www.gnome.org/~fherrera/blog/gtollina.html here]).&lt;br /&gt;
*[http://blog.odonnell.nu/61.html xmms-smack.py] - move through your xmms playlist by smacking, based on the two smack scripts above.&lt;br /&gt;
*[http://www-128.ibm.com/developerworks/linux/library/l-knockage.html?ca=dgr-lnxw02aKnockBasedCommands KnockBasedCommands] - Execute commands by tapping your laptop.&lt;br /&gt;
*[http://people.ksp.sk/~mic/?menu=32&amp;amp;file=rotate.py rotate.py] - rotate desktop by turning your laptop&lt;br /&gt;
&lt;br /&gt;
=== Interesting links related to this project ===&lt;br /&gt;
* [https://lists.sourceforge.net/lists/listinfo/hdaps-devel HDAPS mailinglist and its archive]&lt;br /&gt;
* #hdaps channel on irc.freenode.org&lt;br /&gt;
* [https://sourceforge.net/projects/hdaps/ hdaps projects] overview of userspace programs using hdaps&lt;br /&gt;
* [http://www-307.ibm.com/pc/support/site.wss/document.do?lndocid=TPAD-HDFIRM IBM ThinkPads hardware drive firmware site]&lt;br /&gt;
* [http://www.paul.sladen.org/thinkpad-r31/accelerometer.html http://www.paul.sladen.org/thinkpad-r31/accelerometer/]&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=119845 Gentoo ebuild for hdaps driver and daemon including a initscript*&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137345 Gentoo ebuild for gkhdaps gkrell plugin&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137350 Gentoo ebuild for hdaps-gl application&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137351 Gentoo ebuild for gnome hdapsgl-applet&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137352 Gentoo ebuild for gnome tilt application&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137353 Gentoo ebuild for wmhdaps&lt;br /&gt;
* [http://lenovoblogs.com/insidethebox/?p=71 Why the ThinkPad accelerometer is only 2D] - explanation by Lenovo&lt;br /&gt;
&lt;br /&gt;
[[Category:R50]] [[Category:R50p]] [[Category:R51]] [[Category:R52]] [[Category:R60]] [[Category:T41]] [[Category:T41p]] [[Category:T42]] [[Category:T42p]] [[Category:T43]] [[Category:T43p]] [[Category:T60]] [[Category:T60p]] [[Category:T61]] [[Category:X40]] [[Category:X41]] [[Category:X41 Tablet]] [[Category:X60]] [[Category:X60s]] [[Category:Z60m]] [[Category:Z60t]] [[Category:Drivers]] [[Category:Z61m]]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=HDAPS&amp;diff=34698</id>
		<title>HDAPS</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=HDAPS&amp;diff=34698"/>
		<updated>2007-11-18T13:16:53Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: /* Kernel patch */ updated disk-protect patch for 2.6.23.8&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;
=== HDAPS - IBM Active Protection System Linux Driver ===&lt;br /&gt;
This is the Linux driver for monitoring the accelerometer known as [[Active Protection System|IBM Active Protection System]].&lt;br /&gt;
&lt;br /&gt;
The driver only enables reading of the acceleration data. It does '''not''' perform [[#Harddisk Protection|automatic disk head parking]]. But there are already some other useful [[#Applications|applications]] for HDAPS, using the {{path|/sys}} interface it provides.&lt;br /&gt;
&lt;br /&gt;
{{WARN|There are two versions of the hdaps driver, one in the Linux kernel mainline, and another provided by [[tp_smapi]].  '''Use of the tp_smapi version of hdaps is strongly recommended by the current hdaps developers.'''}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
*provides accelerometer values via sysfs&lt;br /&gt;
*provides a joystick type input device&lt;br /&gt;
&lt;br /&gt;
=== Project Homepage / Availability ===&lt;br /&gt;
*[http://hdaps.sourceforge.net/ Project Homepage]&lt;br /&gt;
*The driver is included in the 2.6-mm series of kernels since August, 26th 2005.&lt;br /&gt;
*The driver is now in the mainline (2.6.14).&lt;br /&gt;
*The [[tp_smapi]] package contains some patches to this driver. These are necessary for some recent models, and recommended for all.&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
A driver is included in recent Linux kernels and is actively maintained, but it is very inferior to the driver in tp_smapi (which provides its own hdaps module).&lt;br /&gt;
&lt;br /&gt;
=== How to install the driver ===&lt;br /&gt;
Recent Linux kernels include the &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; driver. However, the driver in the mainline Linux kernel has two problems with recent models:&lt;br /&gt;
* It doesn't whitelist them (you have to edit hdaps_init() in drivers/hwmon/hdaps.c to include a line like &amp;lt;tt&amp;gt;HDAPS_DMI_MATCH_LENOVO(&amp;quot;ThinkPad T60&amp;quot;)&amp;lt;/tt&amp;gt;)&lt;br /&gt;
* It doesn't work reliably, e.g., it may read out constant values (0,0). See [http://sourceforge.net/mailarchive/message.php?msg_id=15350314 here].&lt;br /&gt;
&lt;br /&gt;
To solve both problems, install the modified hdaps that is bundled with [[tp_smapi]].&lt;br /&gt;
&lt;br /&gt;
=== Harddisk Protection ===&lt;br /&gt;
As mentioned above, the hdaps kernel driver is only responsible for reading the accelerometer data and exporting it through the sysfs interface. In order to use this information to protect the disk, some additional steps are required.&lt;br /&gt;
&lt;br /&gt;
See [[How to protect the harddisk through APS]].&lt;br /&gt;
&lt;br /&gt;
=== Input device support ===&lt;br /&gt;
The hdaps driver in the lastest kernels (2.6.14 and later?) also exports a joystick type input device, which can be used by games.&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
====Disk head parking====&lt;br /&gt;
You will need the kernel patch and userspace daemon. The GUI monitoring is optional.&lt;br /&gt;
&lt;br /&gt;
See [[How to protect the harddisk through APS]] for more information.&lt;br /&gt;
&lt;br /&gt;
===== Kernel patch =====&lt;br /&gt;
Apply these using 'patch -p1 -l &amp;lt; hdaps_xx.patch'.&lt;br /&gt;
* New interface&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1092 Latest sata/ide disk protection patch for 2.6.23.8]&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1077 Latest sata/ide disk protection patch for 2.6.22.9 and 2.6.23-rc9]&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/993 Latest sata/ide disk protection patch for 2.6.20 and 2.6.21]&lt;br /&gt;
* Old interface&lt;br /&gt;
**[http://www.nabble.com/attachment/9047418/0/hdaps_protect-2.6.20.patch.bz2 Latest sata/ide disk protection patch for 2.6.20]&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.kernel/470413 Latest sata/ide disk protection patch for 2.6.19-rc6]&lt;br /&gt;
**[http://www.dresco.co.uk/hdaps/hdaps_protect-2.6.18.3-2.patch Latest sata/ide disk protection patch for 2.6.18.3]&lt;br /&gt;
**[http://exitzero.de/t41p-configs/hdaps_protect-2.6.17.1-20060625.patch Untested patch for 2.6.17.1]: see [http://thread.gmane.org/gmane.linux.drivers.hdaps.devel/708/focus=708]&lt;br /&gt;
**[http://whoopie.gmxhome.de/linux/patches/2.6.17.14-tj/03-hdaps_protect-20060430-for-2.6.17-tj.patch Latest sata/ide disk protection patch for use with the libata hotplug 2.6.17.4 patches] - See [[How_to_hotswap_UltraBay_devices]]&lt;br /&gt;
**[http://whoopie.gmxhome.de/linux/patches/2.6.16-tj/05-hdaps_protect-20060430-for-2.6.16-tj.patch Latest sata/ide disk protection patch for use with the libata hotplug 2.6.16.16 patches] - See [[How_to_hotswap_UltraBay_devices]]&lt;br /&gt;
**[http://www.dresco.co.uk/hdaps/hdaps_protect.20060430.patch Latest sata/ide disk protection patch for 2.6.16]&lt;br /&gt;
**[http://www.dresco.co.uk/hdaps/hdaps_protect.20060118.patch sata/ide disk protection patch for 2.6.15]&lt;br /&gt;
**[http://jenster.dyndns.org/files/blk_freeze-01-nodetection-for-2.6.15.patch disk park patch adapted for the t41p model] &amp;lt;tt&amp;gt; kernel 2.6.15 ([http://sourceforge.net/mailarchive/message.php?msg_id=13214288 capability detection disabled], no libata support)&amp;lt;/tt&amp;gt;&lt;br /&gt;
**[http://jenster.dyndns.org/files/blk_freeze-01-nodetection-for-2.6.14.patch disk park patch adapted for the t41p model] &amp;lt;tt&amp;gt; kernel 2.6.14 ([http://sourceforge.net/mailarchive/message.php?msg_id=13214288 capability detection disabled], no libata support)&amp;lt;/tt&amp;gt;&lt;br /&gt;
**[http://lwn.net/Articles/154923/ disk park patch] &amp;lt;tt&amp;gt;an experimental patch for parking the disk (Linux 2.6.14 for 2.6.15 see below)&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===== Userspace daemon =====&lt;br /&gt;
*[http://www.dresco.co.uk/hdaps/hdapsd-20070524.c Recommended version]&lt;br /&gt;
*[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1045 Reduced power version] - reduces timer interrupts, as measured by [[PowerTOP]]. This leads to lower power consumption on [[tickless kernel|tickless kernels]]. Interrupt reduction requires the &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; kernel module from [[tp_smapi]] 0.32 or newer, and a [http://article.gmane.org/gmane.linux.drivers.hdaps.devel/1040 udev rule].&lt;br /&gt;
*[ftp://rohrmoser-engineering.de/pub Modified adaptive algorithm version] - uses a different (and potentially better) algorithm for the adaptive sensivity threshold.&lt;br /&gt;
&lt;br /&gt;
===== GUI monitoring =====&lt;br /&gt;
*[http://roy.marples.name/node/269 khdapmonitor] KDE System Tray Monitor&lt;br /&gt;
*[http://www.dresco.co.uk/hdaps/gnome-hdaps-applet-20060120.tar.gz gnome-hdaps-applet] visual display of disk protection status in gnome panel&lt;br /&gt;
&lt;br /&gt;
====Security &amp;amp; safety====&lt;br /&gt;
*[[Script for theft alarm using HDAPS]]&lt;br /&gt;
&lt;br /&gt;
====Tilt monitoring====&lt;br /&gt;
*[http://www.mulliner.org/collin/gkibm-acpi.php gkhdaps] &amp;lt;tt&amp;gt;a GKrellM applet displaying tilt data&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[http://rlove.org/log/2005082203.html gnome-tilt] &amp;lt;tt&amp;gt;a gnome applet showing tilt data&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Visualisation of ThinkPad orientation====&lt;br /&gt;
*[http://rlove.org/log/2005082401.html hdaps-gl] &amp;lt;tt&amp;gt;a little app animating a 3D-ThinkPad&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[https://sourceforge.net/project/showfiles.php?group_id=138242 hdapsgl-applet] &amp;lt;tt&amp;gt; a GNOME applet animating a 3D-ThinkPad&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[https://sourceforge.net/project/showfiles.php?group_id=138242 wmadhps] &amp;lt;tt&amp;gt;a WindowMaker DockApp animating a 3D-ThinkPad&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[http://www.cs.cmu.edu/~ecc/gyro.tar.gz OpenGL gyroscope hack] &amp;lt;tt&amp;gt;keeps your display levelled when tilting the ThinkPad&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Games====&lt;br /&gt;
*[http://icculus.org/neverball/ Neverball] is quite fun with HDAPS. (You'll need to have the HDAPS joystick device)&lt;br /&gt;
*Turn your ThinkPad into a Jedi Weapon (hey, it [http://isnoop.net/blog/2006/05/20/macsaber-turn-your-mac-into-a-jedi-weapon works for Mac laptops])&lt;br /&gt;
&lt;br /&gt;
====Other====&lt;br /&gt;
&lt;br /&gt;
*[http://blog.micampe.it/articles/2006/06/04/here-comes-the-smackpad smack.py] - switch workspace by smacking your laptop, inspired by the [http://blog.medallia.com/2006/05/smacbook_pro.html SmackBook] (uses EWMH)&lt;br /&gt;
**an [http://weblogs.mozillazine.org/gerv/archives/2006/09/stablilised_smackpad.html improved version] adds stabilization (by comparing smacks to previous ones, uses EWMH)&lt;br /&gt;
**another [http://pberndt.com/Programme/Linux/pyhdaps/index.html approach] adds stabilization (by requiring a certain type of value deflection, uses xmacroplay)&lt;br /&gt;
**[http://www.gnome.org/~fherrera/gtollina.c GTollina] is another smack program for use with compiz (video [http://www.gnome.org/~fherrera/blog/gtollina.html here]).&lt;br /&gt;
*[http://blog.odonnell.nu/61.html xmms-smack.py] - move through your xmms playlist by smacking, based on the two smack scripts above.&lt;br /&gt;
*[http://www-128.ibm.com/developerworks/linux/library/l-knockage.html?ca=dgr-lnxw02aKnockBasedCommands KnockBasedCommands] - Execute commands by tapping your laptop.&lt;br /&gt;
*[http://people.ksp.sk/~mic/?menu=32&amp;amp;file=rotate.py rotate.py] - rotate desktop by turning your laptop&lt;br /&gt;
&lt;br /&gt;
=== Interesting links related to this project ===&lt;br /&gt;
* [https://lists.sourceforge.net/lists/listinfo/hdaps-devel HDAPS mailinglist and its archive]&lt;br /&gt;
* #hdaps channel on irc.freenode.org&lt;br /&gt;
* [https://sourceforge.net/projects/hdaps/ hdaps projects] overview of userspace programs using hdaps&lt;br /&gt;
* [http://www-307.ibm.com/pc/support/site.wss/document.do?lndocid=TPAD-HDFIRM IBM ThinkPads hardware drive firmware site]&lt;br /&gt;
* [http://www.paul.sladen.org/thinkpad-r31/accelerometer.html http://www.paul.sladen.org/thinkpad-r31/accelerometer/]&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=119845 Gentoo ebuild for hdaps driver and daemon including a initscript*&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137345 Gentoo ebuild for gkhdaps gkrell plugin&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137350 Gentoo ebuild for hdaps-gl application&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137351 Gentoo ebuild for gnome hdapsgl-applet&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137352 Gentoo ebuild for gnome tilt application&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137353 Gentoo ebuild for wmhdaps&lt;br /&gt;
* [http://lenovoblogs.com/insidethebox/?p=71 Why the ThinkPad accelerometer is only 2D] - explanation by Lenovo&lt;br /&gt;
&lt;br /&gt;
[[Category:R50]] [[Category:R50p]] [[Category:R51]] [[Category:R52]] [[Category:R60]] [[Category:T41]] [[Category:T41p]] [[Category:T42]] [[Category:T42p]] [[Category:T43]] [[Category:T43p]] [[Category:T60]] [[Category:T60p]] [[Category:T61]] [[Category:X40]] [[Category:X41]] [[Category:X41 Tablet]] [[Category:X60]] [[Category:X60s]] [[Category:Z60m]] [[Category:Z60t]] [[Category:Drivers]] [[Category:Z61m]]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=ATI_Mobility_FireGL_9000&amp;diff=34353</id>
		<title>ATI Mobility FireGL 9000</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=ATI_Mobility_FireGL_9000&amp;diff=34353"/>
		<updated>2007-11-08T09:43:47Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: alphabetical order&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 0; margin-right:10px; border: 1px solid #dfdfdf; padding: 0em 1em 1em 1em; background-color:#F8F8FF; align:right;&amp;quot;&amp;gt;&lt;br /&gt;
=== ATI Mobility FireGL 9000 ===&lt;br /&gt;
This is an ATI video adapter&lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
* Chipset: ATI RV250 (M9) - Similar to [[ATI_Mobility_Radeon_9000|Radeon 9000]]&lt;br /&gt;
* PCI ID: 1002:4c66&lt;br /&gt;
* AGP 4X&lt;br /&gt;
* 64 MB DDR-SDRAM video memory&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Linux driver - OpenSource ===&lt;br /&gt;
This adapter is supported by recent versions of the 'radeon' driver as found in X.Org and XFree86.&lt;br /&gt;
&lt;br /&gt;
=== External (VGA, DVI, SVideo) ===&lt;br /&gt;
??&lt;br /&gt;
&lt;br /&gt;
=== Linux driver - Proprietary ===&lt;br /&gt;
The ATI proprietary [[fglrx]] driver also provides 3D acceleration, but you have to use some old stuff:&lt;br /&gt;
The ATI Mobility FireGL 9000 is only supported by fglrx drivers up to version 8.28.8 which can be downloaded [http://ati.amd.com/support/drivers/linux/linux-radeon-prer200.html here]. Be aware that this driver only supports Xorg 7.1 and no newer versions!&lt;br /&gt;
&lt;br /&gt;
=== ThinkPads this chip may be found in ===&lt;br /&gt;
* {{R51}}&lt;br /&gt;
* {{T40p}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Components]]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=How_to_reduce_power_consumption&amp;diff=34184</id>
		<title>How to reduce power consumption</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=How_to_reduce_power_consumption&amp;diff=34184"/>
		<updated>2007-10-30T12:23:53Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: /* Useful Patchs */ s/patchs/patches&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Reducing system power consumption will extend battery life, reduce system&lt;br /&gt;
temperature and (on some models) reduce system fan noise.&lt;br /&gt;
Power consumption can be greatly improved from a stock distribution configuration&lt;br /&gt;
to a fine tuned system. The general rules are :&lt;br /&gt;
* Unload drivers for unused devices (ie. USB 1.1, Yenta/PCMCIA, Wireless, IRDA, Bluetooth, ...)&lt;br /&gt;
* Reduce polling on devices (drives, USB subsystem, nvram, use SATA AN, ...)&lt;br /&gt;
* Reduce hard drive activity&lt;br /&gt;
* Reduce LCD brightness to the minimum you can stand&lt;br /&gt;
* Reduce CPU wakeups, so it can stay longer in deep power saving c-states&lt;br /&gt;
* Make use of every hardware devices availables power saving features (AHCI ALPM, USB autosuspend, Alsa and Wireless powersaving modes, HPET timers, ...)&lt;br /&gt;
&lt;br /&gt;
==Tools==&lt;br /&gt;
Arjan van de Ven's [[PowerTOP]] utility&lt;br /&gt;
is a gold mine to improve energy efficiency, but is almost only CPU-oriented. This tool helps to easily detect&lt;br /&gt;
the top power offenders, both userland and kernel modules, which prevent the use of CPU power saving mechanisms and sometime suggest &lt;br /&gt;
fixes accordingly.&lt;br /&gt;
PowerTOP users collected some [http://www.linuxpowertop.org/known.php tips &amp;amp; tricks]&lt;br /&gt;
and an informative [http://www.linuxpowertop.org/faq.php faq].&lt;br /&gt;
&lt;br /&gt;
Alternatively (or complementary) to PowerTOP, running &amp;lt;code&amp;gt;strace -p $(pidof yourapp)&amp;lt;/code&amp;gt; &lt;br /&gt;
for all your favorite or background running applications while they are expected to be &lt;br /&gt;
idle, will show the misbehaviors.&lt;br /&gt;
&lt;br /&gt;
Beside CPU wakeups, disks spins are also power angry. To detect what make your disk spinning,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 sysctl vm.block_dump=1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will list all applications causing disks wakeups on the kernel's dmesg.&lt;br /&gt;
Other useful tools for this purpose are blktrace, iostat and lm-profiler&lt;br /&gt;
(from laptop-mode-tools suite).&lt;br /&gt;
&lt;br /&gt;
See also [[#Misbehaving Userland]].&lt;br /&gt;
&lt;br /&gt;
==BIOS settings==&lt;br /&gt;
Some Thinkpad BIOS (like 2.08 BIOS on {{X40}}) offer two very lame options,&lt;br /&gt;
with a very misleading online help (saying &amp;quot;Usually not needed&amp;quot;). That's&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 CPU power management: (default disabled)&lt;br /&gt;
 PCI bus power management: (default disabled)&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should indeed enable them, else the deepest C3 and C4 ACPI C-states&lt;br /&gt;
are disabled.&lt;br /&gt;
&lt;br /&gt;
==CPU==&lt;br /&gt;
Look at:&lt;br /&gt;
* [[How to make use of Dynamic Frequency Scaling]]&lt;br /&gt;
* [[Pentium M undervolting and underclocking]]&lt;br /&gt;
&lt;br /&gt;
A good thing to keep in mind is that every CPU wakeup, even if it's for&lt;br /&gt;
a trivial light job, reduce the time the CPU stays on a deep power&lt;br /&gt;
saving C-state (like C3 or C4). Therefore you should ensure your applications&lt;br /&gt;
stay really idle when they meant to be idle (track shorts select timeouts&lt;br /&gt;
in loop, etc. with [[PowerTOP]]).&lt;br /&gt;
&lt;br /&gt;
Also note that manually locking the CPU in the lowest P-state (frequency) &lt;br /&gt;
available is '''not''' an efficient way to improve battery lifetime. This will&lt;br /&gt;
cause the CPU to stay longer in C0 (power angry C-state) doing hard work when &lt;br /&gt;
there is something to do, while it could have done this work faster by augmenting&lt;br /&gt;
the CPU freq, and returned back faster to a deeper, economic, C-state and to a&lt;br /&gt;
lower frequency (P-state).&lt;br /&gt;
The best is to let the kernel select the appropriates CPU frequencies by itself&lt;br /&gt;
with the help of in kernel CPU governors.&lt;br /&gt;
Have a look at [http://www.bughost.org/pipermail/power/2007-May/000166.html this explanation]&lt;br /&gt;
from Intel's kernel developer Arjan van de Ven.&lt;br /&gt;
&lt;br /&gt;
==Kernel settings and patches==&lt;br /&gt;
&lt;br /&gt;
===General settings===&lt;br /&gt;
The 2.6.21 kernel brought some very effective changes (like dynticks). If&lt;br /&gt;
it's not already on your distribution and you value power efficiency, you&lt;br /&gt;
may think about compiling it (or a more recent one) yourself.&lt;br /&gt;
&lt;br /&gt;
Here are a few options (beside the ACPI and APM related one) that matter to &lt;br /&gt;
reduce power consumption or to help diagnosing consumers:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 # From PowerTOP's FAQ:&lt;br /&gt;
 CONFIG_NO_HZ&lt;br /&gt;
 CONFIG_HIGH_RES_TIMERS&lt;br /&gt;
 CONFIG_HPET&lt;br /&gt;
 CONFIG_HPET_TIMER&lt;br /&gt;
 CONFIG_CPU_FREQ_GOV_ONDEMAND&lt;br /&gt;
 CONFIG_USB_SUSPEND&lt;br /&gt;
 CONFIG_SND_AC97_POWER_SAVE&lt;br /&gt;
 CONFIG_TIMER_STATS&lt;br /&gt;
 CONFIG_ACPI_BATTERY&lt;br /&gt;
 CONFIG_CPU_FREQ_STAT&lt;br /&gt;
 CONFIG_INOTIFY&lt;br /&gt;
&lt;br /&gt;
 # Not from the PowerTOP FAQ:&lt;br /&gt;
 CONFIG_BLK_DEV_IO_TRACE&lt;br /&gt;
 CONFIG_X86_ACPI_CPUFREQ&lt;br /&gt;
 CONFIG_X86_SPEEDSTEP_CENTRINO&lt;br /&gt;
 CONFIG_X86_SPEEDSTEP_ICH&lt;br /&gt;
 CONFIG_X86_SPEEDSTEP_SMI&lt;br /&gt;
 CONFIG_CPU_IDLE&lt;br /&gt;
 CONFIG_CPU_IDLE_GOV_LADDER&lt;br /&gt;
 CONFIG_CPU_IDLE_GOV_MENU&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Those options are already in Fedora Core 7 and Ubuntu Gutsy (not Feisty) default i686 kernels.&lt;br /&gt;
PowerTOP FAQ also suggest to '''disable'''&lt;br /&gt;
CONFIG_IRQBALANCE and CONFIG_ACPI_DEBUG.&lt;br /&gt;
&lt;br /&gt;
Also, you need to properly set APM and ACPI. Look at:&lt;br /&gt;
* [[Power Management]]&lt;br /&gt;
* [[How to make use of Power Management features]]&lt;br /&gt;
&lt;br /&gt;
===Useful Patches===&lt;br /&gt;
&lt;br /&gt;
Thomas Gleixner High Resolution Timers (hrt) patchset brings many improvements,&lt;br /&gt;
like the cpuidle work and Udo A. Steinberg and Venki Pallipadi &amp;quot;force&lt;br /&gt;
enable HPET&amp;quot; patches (non HPET timers causes about 20-40 CPU wakeups/second, but&lt;br /&gt;
HPET is often hidden by the BIOS due to Windows XP deficiencies). Those are &lt;br /&gt;
fully merged in 2.6.24-rc1 vanilla kernel.&lt;br /&gt;
See http://www.tglx.de/projects/hrtimers/&lt;br /&gt;
&lt;br /&gt;
Kristen Carlson Accardi from Intel has a patchset to turn on &amp;quot;Aggressive&lt;br /&gt;
Link Power Management&amp;quot; (ALPM) for the AHCI driver (for SATA bus). See:&lt;br /&gt;
http://www.kernel.org/pub/linux/kernel/people/kristen/patches/SATA/alpm/&lt;br /&gt;
&lt;br /&gt;
The [[HDAPS]] disk protection systems can reduce battery life. &lt;br /&gt;
Matthew Garrett provides [http://www.linuxpowertop.org/patches/hdaps.patch a patch]&lt;br /&gt;
that prevents hdaps kernel module to generate interrupts when&lt;br /&gt;
this feature isn't used.&lt;br /&gt;
&lt;br /&gt;
===Useful sysctls===&lt;br /&gt;
The meaning of those settings is explained case by case on the relevant &lt;br /&gt;
sections of this document. But for convenience sake, we group them here too.&lt;br /&gt;
&lt;br /&gt;
Note that the &amp;quot;ondemand&amp;quot; scaling governor is recommended by Intel developers&lt;br /&gt;
for energy efficiency: it's expected to be more efficient than the &amp;quot;powersave&amp;quot;&lt;br /&gt;
governor, or than userspace daemons (like cpufreq-utils, cpufreqd, powernowd...).&lt;br /&gt;
Look [http://www.bughost.org/pipermail/power/2007-May/000071.html here],&lt;br /&gt;
[http://www.bughost.org/pipermail/power/2007-May/000073.html here], or&lt;br /&gt;
[http://www.bughost.org/pipermail/power/2007-May/000166.html here] for a&lt;br /&gt;
kernel developer explanation about &amp;quot;ondemand&amp;quot; being better on modern Intel CPUs.&lt;br /&gt;
&lt;br /&gt;
The &amp;quot;link_power_management_policy&amp;quot; tunable won't be available unless you&lt;br /&gt;
run a 2.6.24-rc2 or more kernel, or applied Kirsten patchset, have an Intel &lt;br /&gt;
AHCI compatible chipset, and use SATA drives.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 echo 5 &amp;gt; /proc/sys/vm/laptop_mode&lt;br /&gt;
 echo 0 &amp;gt; /proc/sys/kernel/nmi_watchdog&lt;br /&gt;
 echo Y &amp;gt; /sys/module/snd_ac97_codec/parameters/power_save&lt;br /&gt;
 echo 1 &amp;gt; /sys/devices/system/cpu/sched_mc_power_savings&lt;br /&gt;
 echo ondemand &amp;gt; /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor&lt;br /&gt;
 echo 1500 &amp;gt; /proc/sys/vm/dirty_writeback_centisecs&lt;br /&gt;
 # those sysctl's are only available if you have an AHCI compatible SATA &lt;br /&gt;
 # controler and use kernel &amp;gt; 2.6.24-rc2 (or use Kristen ALPM patchset) : &lt;br /&gt;
 echo min_power &amp;gt; /sys/class/scsi_host/host0/link_power_management_policy&lt;br /&gt;
 echo min_power &amp;gt; /sys/class/scsi_host/host1/link_power_management_policy&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you're running a kernel older than 2.6.22 do this. Not needed for kernels 2.6.22 onward:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 cd /sys/devices/system/cpu/cpu0/cpufreq&lt;br /&gt;
 cat ondemand/sampling_rate_max &amp;gt; ondemand/sampling_rate&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==ATA drives==&lt;br /&gt;
Hard drives and CDRom drives spinning is very costly. To improve battery&lt;br /&gt;
lifetime, you should reduce disks access (or devices polling) the more you&lt;br /&gt;
can.  &lt;br /&gt;
&lt;br /&gt;
===Hard Drives===&lt;br /&gt;
The files access time update, while mandated by POSIX, is causing lots of&lt;br /&gt;
disks access; even accessing files on disk cache may wake the ATA or USB&lt;br /&gt;
bus. If you don't use this feature, disable it via:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 mount -o remount,noatime /  # and so on for all mounted fs&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The laptop_mode reduce disk usage by regrouping writes. You should enable&lt;br /&gt;
it, at least while on battery. See [[Laptop-mode]] for more details:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 echo 5 &amp;gt; /proc/sys/vm/laptop_mode&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The default kernel dirty page writeback frequency is very conservative. On&lt;br /&gt;
a laptop running on battery, one might find more appropriate to reduce it:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 echo 1500 &amp;gt; /proc/sys/vm/dirty_writeback_centisecs&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Some power saving hard drives features can be activated with hdparm (beware&lt;br /&gt;
that &amp;quot;-B 1&amp;quot; may reduce your drive lifetime, if you have lot of intermittent&lt;br /&gt;
disk activity causing lots of heads load/unloads: so reduce I/O activity first,&lt;br /&gt;
as explained above, in order to get longer disks idling periods).&lt;br /&gt;
For more details look at [[How to make use of Power Management features]] :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; &lt;br /&gt;
 hdparm -B 1 -S 12 /dev/sda # and/or any other disk device&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Optical drive===&lt;br /&gt;
The optical drive is reported to consume power even when not accessed. See &lt;br /&gt;
&lt;br /&gt;
* [[How to hotswap UltraBay devices|Eject the UltraBay optical drive]], or just turn off its power supply (i.e., run the appropriate eject script but leave the drive inserted).&lt;br /&gt;
* [[How to set optical drive speed|Reduce the spinning speed of the optical drive]].&lt;br /&gt;
&lt;br /&gt;
The hald daemon polling tends to maintain the ATA buses out of power saving&lt;br /&gt;
modes, and to wakeup CDROM drive (except if you have a kernel &amp;gt;= 2.6.24, hal &amp;gt;= 0.5.10,&lt;br /&gt;
and SATA AN compatible devices). If you have a recent hald version, you&lt;br /&gt;
can stop this polling when on battery:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 hal-disable-polling /dev/scd0 # or whatever your CD drive is&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your hald is not recent enough, consider suspending it when running on battery. Some moderns SATA buses and drivers supports a notification mechanism (SATA AN - Asynchronous Events Notifications) that obsolete the need for polling on modern hardware; support for this feature had been merged in Linux 2.6.24-rc1 and HAL 0.5.10.&lt;br /&gt;
&lt;br /&gt;
==LCD Backlight/Brightness==&lt;br /&gt;
The LCD backlight is one of the very major power drain. &lt;br /&gt;
Reducing brightness to the lowest readable&lt;br /&gt;
level will save a lot of battery lifetime. Also, don't forget to configure&lt;br /&gt;
your screen saver to shutdown the screen backlight (rather than displaying some&lt;br /&gt;
eye candy), when no activity for a few minutes.&lt;br /&gt;
&lt;br /&gt;
You can also let the system [[automatically reduce brightness]] after a &lt;br /&gt;
period of inactivity.&lt;br /&gt;
&lt;br /&gt;
If you're choosing your Thinkpad laptop model, keep in mind that the screen&lt;br /&gt;
size affect the battery time greatly: more power needed for larger screens.&lt;br /&gt;
&lt;br /&gt;
==Graphic controllers==&lt;br /&gt;
All xorg Thinkpad graphics chipsets drivers (ati, radeon, fglrx, i810) have&lt;br /&gt;
the same bug causing very frequent CPU wakeups when DRI is activated, even&lt;br /&gt;
when you don't use any 3D application.&lt;br /&gt;
This problem is partly fixed on xorg git tree but not released as of xorg&lt;br /&gt;
7.2. If you value more battery than 3D, you should disable DRI: put this on&lt;br /&gt;
the /etc/X11/xorg.conf &amp;quot;Device&amp;quot; of you graphic controller:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 Option          &amp;quot;NoDRI&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Also be sure that DPMS is working: &amp;lt;code&amp;gt;grep DPMS /var/log/Xorg.0.log&amp;lt;/code&amp;gt;&lt;br /&gt;
should output &amp;quot;DPMS enabled&amp;quot;. If not, put &amp;lt;code&amp;gt;Option &amp;quot;DPMS&amp;quot;&amp;lt;/code&amp;gt; in your config.&lt;br /&gt;
&lt;br /&gt;
On recent xrandr/xorg versions, you can disable the TV output when you're&lt;br /&gt;
not using it (it's known to consume power) :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt; &lt;br /&gt;
 xrandr --output TV -off&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When you don't have an external monitor plugged, disable CRT and DVI output &lt;br /&gt;
(for some, this can make a difference in power usage) : &lt;br /&gt;
&amp;lt;code&amp;gt; &lt;br /&gt;
 echo crt_disable &amp;gt; /proc/acpi/ibm/video&lt;br /&gt;
 echo dvi_disable &amp;gt; /proc/acpi/ibm/video&lt;br /&gt;
&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Some drivers have specials power saving mode, and/or allows underclocking the GPU. See also:&lt;br /&gt;
* [[How to make use of Graphics Chips Power Management features]], or with [[Rovclock]] on ATI.&lt;br /&gt;
* [[Problem with high power drain in ACPI sleep]]&lt;br /&gt;
&lt;br /&gt;
==USB Subsystem==&lt;br /&gt;
The kernel support an efficient USB 2.0 power saving feature if you enabled&lt;br /&gt;
CONFIG_USB_SUSPEND. This may not trigger in when you have an USB device&lt;br /&gt;
plugged (and beside, USB devices tends to suck power on their own), so avoid&lt;br /&gt;
using such devices when on battery. And you must enable it, either a boot time &lt;br /&gt;
by adding this in the kernel boot options (ie. in grub's menu.lst):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 usbcore.autosuspend=1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or at runtime, per device, with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 for i in /sys/bus/usb/devices/%s/power/autosuspend; do echo 1 &amp;gt; $i; done&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
USB 1.1 is worst. It needs polling the bus frequently, hence can't really go&lt;br /&gt;
in a low power mode when you enabled it, even if you don't have any device&lt;br /&gt;
plugged. You'd better remove it when you don't use a 1.1 device:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 rmmod uhci_hcd&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you don't intend to use any device needing USB 1.1 (unfortunately, the built-in bluetooth and fingerprint-reader are USB 1.1 devices), the USB 1.1 support can also be totaly avoided. On Debian and derivatives, just do:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 echo &amp;quot;blacklist uhci_hcd&amp;quot; &amp;gt;&amp;gt; /etc/modprobe.d/blacklist&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Sound==&lt;br /&gt;
ALSA has a power saving feature that should be enabled on your kernel&lt;br /&gt;
(CONFIG_SND_AC97_POWER_SAVE). Note that this low power mode won't trigger in&lt;br /&gt;
unless you muted all sound inputs (micro, line in etc.). This feature has&lt;br /&gt;
to be activated with:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 amixer set Line mute nocap&lt;br /&gt;
 amixer set Mic mute nocap&lt;br /&gt;
 echo Y &amp;gt; /sys/module/snd_ac97_codec/parameters/power_save&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
More radical: you can unload all sound related modules when you are on &lt;br /&gt;
battery, or mute the sound system (echo mute &amp;gt; /proc/acpi/ibm/volume).&lt;br /&gt;
&lt;br /&gt;
Seel also [[How to enable AC97 power saving]].&lt;br /&gt;
&lt;br /&gt;
==Wireless Interface==&lt;br /&gt;
Wireless network consume a lot of power.&lt;br /&gt;
To save power, you can kill the Wi-Fi radio when it's not in use:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 echo 1 &amp;gt; /sys/bus/pci/devices/*/rf_kill&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you need Wi-Fi, you can also reduce power consumption (at the price of&lt;br /&gt;
performances) by activating the power saving modes:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 iwpriv eth1 set_power 5&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For drivers using the new Wi-Fi kernel framework (mac80211/cfg80211), &lt;br /&gt;
the canonical way to do this is now:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 for i in /sys/bus/pci/devices/%s/power_level ; do echo 5 &amp;gt; $i ; done&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Reducing beacon intervals on your Access Point to 1 per second will also&lt;br /&gt;
reduce network card interrupts, therefore power savings. This shouldn't have&lt;br /&gt;
negatives side effects.&lt;br /&gt;
&lt;br /&gt;
Drivers not using the new mac80211 framework (like ipw2200) use to go in &lt;br /&gt;
aggressive scanning mode when the interface is down and they are not associated&lt;br /&gt;
with any Access Point (more info about this on Intel's&lt;br /&gt;
[http://www.lesswatts.org/tips/wireless.php LessWatts] website).&lt;br /&gt;
This behavior consumes a lot of power, even more than when the interface&lt;br /&gt;
is plain active and in use, but can disabled at module's load time :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 rmmod ipw2200&lt;br /&gt;
 modprobe ipw2200 associate=0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can fix this setting by placing the following in /etc/modprobe.d/options (Debian/Ubuntu) &lt;br /&gt;
or /etc/modprobe.conf (Red Hat/Fedora):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 options ipw2200 associate=0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
See also, to activate power saving on the wireless network card:&lt;br /&gt;
* For [[Intel PRO/Wireless 2200BG Mini-PCI Adapter]] and [[Intel PRO/Wireless 2915ABG Mini-PCI Adapter]], see instructions for the [[ipw2200]] driver.&lt;br /&gt;
* For [[Intel PRO/Wireless 3945ABG Mini-PCI Express Adapter]], see the [http://ipw3945.sourceforge.net/README.ipw3945 ipw3945 driver README]&lt;br /&gt;
&lt;br /&gt;
==Ethernet Controler==&lt;br /&gt;
If you don't use Wake-on-LAN, you should disable it for your network card,&lt;br /&gt;
because it sucks a lot of power:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 ethtool -s eth0 wol d&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you can, try to reduce useless network activity on your ethernet&lt;br /&gt;
segment, coming to your NIC (ie. uneeded broadcasts), those cause &lt;br /&gt;
interrupts and CPU wakeups.&lt;br /&gt;
&lt;br /&gt;
Forcing 100Mbps full-duplex speed on a gigabit ethernet NIC can also save a lot of power (~1W) on most network workloads. This also reduces components temperature (e.g., [[Thermal Sensors|thermal sensor]] 0xC0 on the {{T43}} cools down by 5 degree between 1000Mbps and 100Mbps, and another 1 degree for 10Mbps).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
  ethtool -s eth0 autoneg off speed 100&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Bluetooth==&lt;br /&gt;
When you don't need bluetooth, disable it. Because of its radio, &lt;br /&gt;
bluetooth is not power friendly.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 hciconfig hci0 down ; rmmod hci_usb&lt;br /&gt;
 echo disable &amp;gt; /proc/acpi/ibm/bluetooth&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Modem==&lt;br /&gt;
When was the last time you used your analog modem? If you can't remember, you probably just don't need it. If it is on a separate module in your laptop, simply remove it. Store it in a ESD safe place (like the bag in which your last addon card or hard drive was packed), in case you should need it again. This won't save you a lot of power and weight, but why carry something around you never use.&lt;br /&gt;
&lt;br /&gt;
==System Fans==&lt;br /&gt;
Fans consumes power when running, so you may look at the [[ACPI fan control script]].&lt;br /&gt;
&lt;br /&gt;
==Misbehaving Userland==&lt;br /&gt;
You should avoid using Beagle, Compiz, Beryl, XMMS, gnome-power-manager&lt;br /&gt;
and Evolution while on battery.&lt;br /&gt;
Look at the PowerTOP's [http://www.linuxpowertop.org/known.php known problems]&lt;br /&gt;
list.&lt;br /&gt;
&lt;br /&gt;
Deactivate desktop animations (blinking cursor on the terms, animated wallpapers, ...): they cause regular X (therefore kernel and CPU) wakeups.&lt;br /&gt;
&lt;br /&gt;
In short, while on battery, you should stop all applications that don't really stay idle when you're not using them. This means applications that:&lt;br /&gt;
* Wakes up the CPU too often (by polling something, because of too short select() timeouts, ...)&lt;br /&gt;
* Access the disks at regular intervals&lt;br /&gt;
* Access an hardware bus (USB, ATA, ...) at regular intervals&lt;br /&gt;
To find those offenders run:&lt;br /&gt;
* &amp;lt;code&amp;gt;strace -p $(pidof yourapp)&amp;lt;/code&amp;gt; # for all your running applications&lt;br /&gt;
* &amp;lt;code&amp;gt;powertop&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;sysctl vm.block_dump=1&amp;lt;/code&amp;gt; # and look at dmesg&lt;br /&gt;
* &amp;lt;code&amp;gt;ps aux | awk '{print$10,$11}' | sort -n&amp;lt;/code&amp;gt; # will list all running softs sorted by used cpu time&lt;br /&gt;
Please, don't forget to fill a bug when you find such a misbehaving software.&lt;br /&gt;
{{NOTE|Not all software is evil, buggy or badly written. Some produce regular activity because they have to, in order to provide their intented functionality.  Think twice before filling bugs about this.}}&lt;br /&gt;
&lt;br /&gt;
==See Also==&lt;br /&gt;
* [[How to measure power consumption]]&lt;br /&gt;
* [[Script for monitoring power consumption]]&lt;br /&gt;
* Battery [[maintenance]]&lt;br /&gt;
&lt;br /&gt;
==External resources==&lt;br /&gt;
* [http://www.free-it.de/archiv/talks_2005/paper-11017/paper-11017.html ''Current trends in Linux Kernel Power Management''], Dominik Brodowski, 2005&lt;br /&gt;
* [http://www.linuxpowertop.org PowerTOP] website&lt;br /&gt;
* [http://www.gentoo.org/doc/en/power-management-guide.xml Power Management Guide] from the Gentoo Linux documentation&lt;br /&gt;
* [http://mailman.linux-thinkpad.org/pipermail/linux-thinkpad/2005-November/030478.html When/where/what for low power consumption?] (thread on Linux-Thinkpad)&lt;br /&gt;
* ''8 hours of battery life on your lap(top)'' ([http://atrey.karlin.mff.cuni.cz/~pavel/swsusp/8hours.odp ODP]/[http://atrey.karlin.mff.cuni.cz/~pavel/swsusp/8hours.pdf PDF]), a presentation by Pavel Machek&lt;br /&gt;
* [http://www.lesswatts.org Website dedicated to save energy on Intel systems using Linux]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:600X]] [[Category:A20m]] [[Category:A20p]] [[Category:A21e]] [[Category:A21m]] [[Category:A21p]] [[Category:A22e]] [[Category:A22m]] [[Category:A22p]] [[Category:A30]] [[Category:A30p]] [[Category:A31]] [[Category:A31p]] [[Category:i1200]] [[Category:i1300]] [[Category:i1620]] [[Category:G40]] [[Category:G41]] [[Category:R30]] [[Category:R31]] [[Category:R32]] [[Category:R40]] [[Category:R40e]] [[Category:R50]] [[Category:R50e]] [[Category:R50p]] [[Category:R51]] [[Category:R52]] [[Category:R60]] [[Category:R60e]] [[Category:T20]] [[Category:T21]] [[Category:T22]] [[Category:T23]] [[Category:T30]] [[Category:T40]] [[Category:T40p]] [[Category:T41]] [[Category:T41p]] [[Category:T42]] [[Category:T42p]] [[Category:T43]] [[Category:T43p]] [[Category:T60]] [[Category:T60p]] [[Category:T61]] [[Category:X20]] [[Category:X21]] [[Category:X22]] [[Category:X23]] [[Category:X24]] [[Category:X30]] [[Category:X31]] [[Category:X32]] [[Category:X40]] [[Category:X41]] [[Category:X41 Tablet]] [[Category:X60]] [[Category:X60s]] [[Category:Z60m]] [[Category:Z60t]] [[Category:Z61t]] [[Category:Z61e]] [[Category:TransNote]]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Template:Industry_News&amp;diff=34124</id>
		<title>Template:Industry News</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Template:Industry_News&amp;diff=34124"/>
		<updated>2007-10-26T05:50:13Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: change the link to the release notes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;23. 10. 2007: New [[fglrx]] driver version 8.42.3 [https://a248.e.akamai.net/f/674/9206/0/www2.ati.com/drivers/linux/linux_8.42.3.html released].&lt;br /&gt;
&lt;br /&gt;
12. 10. 2007: New [http://www.thinkpadreserve.com/ ThinkPad Reserve edition] model officially announced.&lt;br /&gt;
&lt;br /&gt;
12. 9. 2007: New [[fglrx]] driver version 8.41.7 [https://a248.e.akamai.net/f/674/9206/0/www2.ati.com/drivers/linux/linux_8.41.7.html released].&lt;br /&gt;
&lt;br /&gt;
8. 9. 2007: Lenovo's [http://lenovoblogs.com/insidethebox Inside the Box] blog discusses ThinkPad Linux support&lt;br /&gt;
&lt;br /&gt;
5. 9. 2007: AMD/ATI announces [http://home.businesswire.com/portal/site/google/index.jsp?ndmViewId=news_view&amp;amp;newsId=20070904006432&amp;amp;newsLang=en new HD2k Radeon drivers], pledging composite support and significant performance improvements on modern (2.6.22) kernels. &lt;br /&gt;
&lt;br /&gt;
8. 8. 2007: New [[fglrx]] driver version 8.40.4 [https://a248.e.akamai.net/f/674/9206/0/www2.ati.com/drivers/linux/linux_8.40.4.html released].&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=ATI_Mobility_Radeon_X1300&amp;diff=34071</id>
		<title>ATI Mobility Radeon X1300</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=ATI_Mobility_Radeon_X1300&amp;diff=34071"/>
		<updated>2007-10-22T11:44:42Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 0; margin-right:10px; border: 1px solid #dfdfdf; padding: 0em 1em 1em 1em; background-color:#F8F8FF; align:right;&amp;quot;&amp;gt;&lt;br /&gt;
This is an ATI video adapter&lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
* Chipset: ATI M52&lt;br /&gt;
* PCI ID: 1002:7149&lt;br /&gt;
* PCI Express x16&lt;br /&gt;
* 64MB GDDR1 video memory&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Linux X.Org driver ===&lt;br /&gt;
Should be supported by the new (as of 2007-10-22) radeonhd driver. A Debian package already exists in the experimental branch. 3d is still under development.&lt;br /&gt;
&lt;br /&gt;
=== ThinkPad LCD ===&lt;br /&gt;
Display on the internal LCD works as long as you set the monitor settings correct.&lt;br /&gt;
&lt;br /&gt;
=== External VGA port ===&lt;br /&gt;
??&lt;br /&gt;
&lt;br /&gt;
=== SVideo port ===&lt;br /&gt;
??&lt;br /&gt;
&lt;br /&gt;
=== DVI port ===&lt;br /&gt;
DVI port is enabled in T60.&lt;br /&gt;
&lt;br /&gt;
Using the proprietary driver the Dell 2405FPW works at 1920x1200 pixels via Advanced Mini Dock.&lt;br /&gt;
&lt;br /&gt;
=== Proprietary ATI driver ===&lt;br /&gt;
fglrx supports this card since release 8.24.8.&lt;br /&gt;
&lt;br /&gt;
driver by ATI&lt;br /&gt;
&lt;br /&gt;
https://support.ati.com/ics/support/KBAnswer.asp?questionID=18875&lt;br /&gt;
&lt;br /&gt;
=== Linux kernel Framebuffer driver ===&lt;br /&gt;
* OS: RHEL4-U3&lt;br /&gt;
* Kernel: 2.6.9-34&lt;br /&gt;
* X Version: 6.8.2-1&lt;br /&gt;
* Result: ''Failure''&lt;br /&gt;
** Driver can't find a compatible card&lt;br /&gt;
&lt;br /&gt;
=== ThinkPads this chip may be found in ===&lt;br /&gt;
* {{T60}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Components]]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Problems_with_fglrx&amp;diff=34068</id>
		<title>Problems with fglrx</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Problems_with_fglrx&amp;diff=34068"/>
		<updated>2007-10-22T05:42:12Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page discusses issues with the ATI proprietary [[fglrx]] display driver.&lt;br /&gt;
&lt;br /&gt;
== Known Troubles and Solutions ==&lt;br /&gt;
&lt;br /&gt;
=== X-specific issues ===&lt;br /&gt;
&lt;br /&gt;
==== upgrading xserver-xorg ====&lt;br /&gt;
ATI proprietary drivers version 8.21.7 and later work with x.org 6.9.&lt;br /&gt;
&lt;br /&gt;
If you are running an older version (8.20.8) under Debian sid and you upgrade your xserver-xorg, apt will force you to remove any debian-packaged fglrx drivers (package fglrx-driver depends on x.org &amp;lt;&amp;lt; 6.8.99).  You can just download the driver from the ATI site and install after modifying the Debian packager script to allow dependencies to be satisfied by x.org 6.9, or just download 8.21.7 and install manually.  See talk page for step-by-step commands.&lt;br /&gt;
&lt;br /&gt;
After installing the fglrx driver, you can use module-assist to build the appropriate kernel module.&lt;br /&gt;
&lt;br /&gt;
==== new Xorg ID Scheme ====&lt;br /&gt;
ATI proprietary drivers &amp;lt;=8.36.5 with xorg &amp;gt;=7.1.0-18 (==1.3.0.0) in Debian Sid and Fedora ([http://www.sidux.com/PNphpBB2-viewtopic-t-3162-postdays-0-postorder-asc.html Debian] and [http://www.phoronix.net/forums/showthread.php?t=2382 Fedora] Forum Entries)&lt;br /&gt;
&lt;br /&gt;
Ubuntu feisty made their own xorg with the standard id of 7.2, to work around this issue.&lt;br /&gt;
&lt;br /&gt;
Xorg has changed its ID Scheme in newer Versions, and fglrx cannot cope with that (Error message saying &amp;quot;[...] X version mismatch - detected X.org 1.3.-1.905, required X.org 7.1.0.0 [...]&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
A binary hack solves the Problem [http://rage3d.com/board/showthread.php?s=4638d94143536f6acacbccd8f0443472&amp;amp;t=33889029 (rage3d.com Forum Entry)]. This is a very '''dirty''' solution, and is probably violating the ATI driver license. &lt;br /&gt;
&lt;br /&gt;
Simply using the open source ati driver (or holding back the xorg upgrades) until a new driver is released, is suggested.&lt;br /&gt;
&lt;br /&gt;
As of version 8.37.6, this issue is solved. No more binary hacking needed.&lt;br /&gt;
&lt;br /&gt;
=== Kernel-specific troubles ===&lt;br /&gt;
&lt;br /&gt;
Using ATI drivers &amp;lt;=8.21.7 with kernel &amp;gt;=2.6.15 needs a [http://marc.theaimsgroup.com/?l=linux-kernel&amp;amp;m=113429835515001&amp;amp;w=2 patch].  (see table below for detail.) If you can't compile the driver modules with 2.6.15 or later, you should apply this [http://www.ksp.sk/~rasto/fglrx_with_2.6.15.patch patch] instead. &lt;br /&gt;
&lt;br /&gt;
If you do not use one of these patches, you may experience peculiar lockups of X.  Try {{cmduser|fglrxinfo}} - if your shell hangs at the end of this command, you may have an issue and should try the patch or upgrade.&lt;br /&gt;
&lt;br /&gt;
Although unproven, there is a substantial amount of user / developer concern that the above patches prevent hard lockups but do not provide full reliability with 2.6.15 and there are larger / redisgn issues preventing compatibility.  These issues have been fixed with later ATI drivers (&amp;gt; 8.21.7) so you can simply upgrade if you are running a more modern kernel.&lt;br /&gt;
&lt;br /&gt;
==== 2.6.23 ====&lt;br /&gt;
In 2.6.23 release cycle, config option CONFIG_SUSPEND_SMP got renamed to CONFIG_PM_SLEEP_SMP. fglrx uses this variable for disabling power management on older kernels. As a result, SMP users running 2.6.23 weren't able to resume properly (almost instant lockup in that rare case fglrx managed to show a few usable pixels. A [http://linux.derkeiler.com/Mailing-Lists/Kernel/2007-10/msg03437.html quick patch] is available.&lt;br /&gt;
&lt;br /&gt;
=== No hardware acceleration ===&lt;br /&gt;
&lt;br /&gt;
====Acceleration lost after driver update====&lt;br /&gt;
If you lose hardware acceleration after a driver update this can be caused by an old fglrx kernel module being loaded.&lt;br /&gt;
&lt;br /&gt;
Check out {{path|1=/var/log/Xorg.0.log}} for a message like:&lt;br /&gt;
:&amp;lt;code&amp;gt;(WW) fglrx(0): Kernel Module version does *not* match driver.&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;(EE) fglrx(0): incompatible kernel module detected - HW accelerated OpenGL will not work&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can verify this yourself by looking at the version message some lines above. It should read something not matching the installed version like:&lt;br /&gt;
:&amp;lt;code&amp;gt;(II) fglrx(0): Kernel Module Version Information:&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;(II) fglrx(0):     Name: fglrx&amp;lt;/code&amp;gt;&lt;br /&gt;
:&amp;lt;code&amp;gt;(II) fglrx(0):     Version: 8.10.19&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The cause for this trouble might be that there resist multiple versions of the fglrx module within the kernel module search path.&amp;lt;br&amp;gt;&lt;br /&gt;
Go to {{path|1=/lib/modules/&amp;lt;your linux kernel version&amp;gt;/}} and type {{cmdroot|1=grep fglrx modules.dep}}.&amp;lt;br&amp;gt;&lt;br /&gt;
If grep finds multiple lines you nailed down the problem. All you have to do now is to delete any versions of the module (look at the filedate) but the most current one. Then run {{cmdroot|1=depmod}} and you are done.&lt;br /&gt;
&lt;br /&gt;
{{HINT|Newer versions (8.21.7) of the fglrx module seem to be installed in the &amp;lt;code&amp;gt;extra/&amp;lt;/code&amp;gt; subdirectory.&amp;lt;br&amp;gt;&lt;br /&gt;
Older versions (8.19.10) used to be located in the &amp;lt;code&amp;gt;kernel/drivers/char/drm/&amp;lt;/code&amp;gt; subdirectory.}}&lt;br /&gt;
&lt;br /&gt;
====GCC 3.4====&lt;br /&gt;
If the ATI driver works only without the hardware acceleration, take into consideration that {{path|fglrx_dri.so}} was linked against libstdc++.so.5 which may not be present if your system uses gcc-3.4.&lt;br /&gt;
&lt;br /&gt;
To fix this, compile gcc-3.3.5 and copy &amp;lt;tt&amp;gt;libstdc++.so.5*&amp;lt;/tt&amp;gt; to {{path|/usr/lib}} and update the dynamic linker cache via {{cmdroot|ldconfig}}.&lt;br /&gt;
&lt;br /&gt;
Or install a compat package for your favorite distro. FC4 users can do:&lt;br /&gt;
:{{cmdroot|yum install libstdc++.so.5}}&lt;br /&gt;
&lt;br /&gt;
====radeonfb framebuffer====&lt;br /&gt;
Another possible cause for broken hardware acceleration (2D and 3D) is the radeonfb framebuffer: Switching to vesafb or vesafb-tng is reported to solve the problem on some systems. Also it has proven helpful to not perform {{cmdroot|modprobe fglrx}} after boot but to have the module loaded via {{path|/etc/modules.autoload/kernel2.x}} at boottime instead.&lt;br /&gt;
&lt;br /&gt;
====Perpetual Mesa GLX Indirect on Debian====&lt;br /&gt;
If you've done everything right and you're still seeing:&lt;br /&gt;
&lt;br /&gt;
:{{cmduser|fglrxinfo}}&lt;br /&gt;
:{{cmdresult|display: :0.0  screen: 0}}&lt;br /&gt;
:{{cmdresult|OpenGL vendor string: Mesa project: www.mesa3d.org}}&lt;br /&gt;
:{{cmdresult|OpenGL renderer string: Mesa GLX Indirect}}&lt;br /&gt;
:{{cmdresult|OpenGL version string: 1.2 (1.5 Mesa 6.4.1)}}&lt;br /&gt;
&lt;br /&gt;
try this:&lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|mkdir -p /usr/X11R6/lib/modules/dri}}&lt;br /&gt;
:{{cmdroot|ln -s /usr/lib/dri/fglrx_dri.so /usr/X11R6/lib/modules/dri}}&lt;br /&gt;
&lt;br /&gt;
Thanks to Maciej Matysiak for the clear debug [http://lists.debian.org/debian-amd64/2006/02/msg00217.html here] and solution [http://lists.debian.org/debian-amd64/2006/02/msg00311.html here].&lt;br /&gt;
&lt;br /&gt;
More generally, use LIBGL_DEBUG=verbose fglrxinfo, to see what's happening, and whether you get this:&lt;br /&gt;
:{{cmduser|&amp;lt;nowiki&amp;gt;LIBGL_DEBUG=verbose&amp;lt;/nowiki&amp;gt; fglrxinfo}}&lt;br /&gt;
:{{cmdresult|libGL: XF86DRIGetClientDriverName: 8.26.18 fglrx (screen 0)}}&lt;br /&gt;
:{{cmdresult|libGL: OpenDriver: trying /usr/X11R6/lib/modules/dri/fglrx_dri.so}}&lt;br /&gt;
:{{cmdresult|libGL error: dlopen /usr/X11R6/lib/modules/dri/fglrx_dri.so failed (/usr/X11R6/lib/modules/dri/fglrx_dri.so: cannot open shared object file: No such file or directory)}}&lt;br /&gt;
:{{cmdresult|libGL error: unable to find driver: fglrx_dri.so}}&lt;br /&gt;
:{{cmdresult|display: :0.0  screen: 0}}&lt;br /&gt;
:{{cmdresult|OpenGL vendor string: Mesa project: www.mesa3d.org}}&lt;br /&gt;
:{{cmdresult|OpenGL renderer string: Mesa GLX Indirect}}&lt;br /&gt;
:{{cmdresult|OpenGL version string: 1.2 (1.5 Mesa 6.4.2)}}&lt;br /&gt;
&lt;br /&gt;
instead of that:&lt;br /&gt;
:{{cmduser|&amp;lt;nowiki&amp;gt;LIBGL_DEBUG=verbose&amp;lt;/nowiki&amp;gt; fglrxinfo}}&lt;br /&gt;
:{{cmdresult|libGL: XF86DRIGetClientDriverName: 8.26.18 fglrx (screen 0)}}&lt;br /&gt;
:{{cmdresult|libGL: OpenDriver: trying /usr/X11R6/lib/modules/dri/fglrx_dri.so}}&lt;br /&gt;
:{{cmdresult|libGL: XF86DRIGetClientDriverName: 8.26.18 fglrx (screen 0)}}&lt;br /&gt;
:{{cmdresult|drmOpenByBusid: busid is PCI:1:0:0}}&lt;br /&gt;
:{{cmdresult|drmOpenDevice: minor is 0}}&lt;br /&gt;
:{{cmdresult|drmOpenDevice: node name is /dev/dri/card0}}&lt;br /&gt;
:{{cmdresult|drmOpenDevice: open result is 4, (OK)}}&lt;br /&gt;
:{{cmdresult|drmOpenByBusid: drmOpenMinor returns 4}}&lt;br /&gt;
:{{cmdresult|drmOpenByBusid: drmGetBusid reports PCI:1:0:0}}&lt;br /&gt;
:{{cmdresult|Can't open configuration file /home/merlin/.drirc: No such file or directory.}}&lt;br /&gt;
:{{cmdresult|fglrx: DPD supported.}}&lt;br /&gt;
:{{cmdresult|display: :0.0  screen: 0}}&lt;br /&gt;
:{{cmdresult|OpenGL vendor string: ATI Technologies Inc.}}&lt;br /&gt;
:{{cmdresult|OpenGL renderer string: MOBILITY FIREGL T2 Pentium 4 (SSE2) (FireGL) (GNU_ICD)}}&lt;br /&gt;
:{{cmdresult|OpenGL version string: 2.0.5879 (8.26.18)}}&lt;br /&gt;
&lt;br /&gt;
I have contacted ATI to add that info by default, the mesa guys to do that in glxinfo too, as well as the debian packager to fix the debian packaging bug (2006/07/22), so hopefully the situation will improve soon&lt;br /&gt;
&lt;br /&gt;
You may have to run fglrxinfo as root to get this detail rather than a useless message.&lt;br /&gt;
&lt;br /&gt;
==== Where to look for fglrx_dri.so (gentoo and general)====&lt;br /&gt;
After installing a new kernel (linux-2.6.20-gentoo-r7) with gentoo I again was not able to get the ATI driver working&lt;br /&gt;
correctly. But now I found out what the problem was:&lt;br /&gt;
&lt;br /&gt;
I tried &lt;br /&gt;
:{{cmduser|&amp;lt;nowiki&amp;gt;LIBGL_DEBUG=verbose&amp;lt;/nowiki&amp;gt; fglrxinfo}}&lt;br /&gt;
:{{cmdresult|libGL: XF86DRIGetClientDriverName: 8.35.5 fglrx (screen 0)}}&lt;br /&gt;
:{{cmdresult|libGL: OpenDriver: trying /usr/lib32/dri/fglrx_dri.so}}&lt;br /&gt;
:{{cmdresult|libGL error: dlopen /usr/lib32/dri/fglrx_dri.so failed (/usr/lib32/dri/fglrx_dri.so: wrong ELF class: ELFCLASS32)}}&lt;br /&gt;
:{{cmdresult|libGL error: unable to find driver: fglrx_dri.so}}&lt;br /&gt;
&lt;br /&gt;
The error itself makes sense, because I am running a 64-Bit linux on AMD. The question was, why libGL tries to look&lt;br /&gt;
in /usr/lib32 only...&lt;br /&gt;
&lt;br /&gt;
After some digging around I found out, that apparently 8.35.5 version of the driver uses the environment variable&lt;br /&gt;
'''LIBGL_DRIVERS_PATH''' to find out where it should look for the &amp;quot;fglrx_dri.so&amp;quot; driver.&lt;br /&gt;
&lt;br /&gt;
Now in my case this environment variable pointed to &amp;quot;/usr/lib32/dri&amp;quot; and that was what caused the problem.&lt;br /&gt;
So doing&lt;br /&gt;
:{{cmduser|&amp;lt;nowiki&amp;gt;export LIBGL_DRIVERS_PATH='/usr/lib64/dri:/usr/lib32/dri'&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
solved the problem in my case.&lt;br /&gt;
&lt;br /&gt;
As mentioned I use gentoo. After some more digging around I found out, that it is apparently necessary to call&lt;br /&gt;
:{{cmduser|env-update}}&lt;br /&gt;
after a re-install of the ATI driver. To be more specific, it seems that &amp;quot;eselect opengl set ati&amp;quot; sometimes&lt;br /&gt;
does something wrong. &amp;quot;env-update&amp;quot; seems to repair the problem so that afterwards the '''LIBGL_DRIVERS_PATH'''&lt;br /&gt;
environment variable is set correctly when you log in.&lt;br /&gt;
&lt;br /&gt;
If you want to check, look in &amp;lt;code&amp;gt;/etc/profile.env&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;/etc/profile.csh&amp;lt;/code&amp;gt;. This is the&lt;br /&gt;
place where the '''LIBGL_DRIVERS_PATH''' environment variable gets set.&lt;br /&gt;
&lt;br /&gt;
=== Softlink hell ===&lt;br /&gt;
The [[fglrx]] installer replaces the standard X.org OpenGL implementation (Mesa) with its own files, potentially causing collisions with the distribution's file and package management. It is best to install the driver via a package built for your distribution, which will typically include the necessary kludges to make things work. See the [[fglrx]] page for pointers.&lt;br /&gt;
&lt;br /&gt;
====Discussion====&lt;br /&gt;
If using {{cmduser|fglrxinfo}} after installing [[fglrx]] indicates that you are still using the mesa indirect software GL renderer, you likely have some misplaced softlinks.  It seems like it has to do with an apt-get upgrade that sometimes replaces these links.  Anyway, go to&lt;br /&gt;
:{{cmdroot|cd /usr/X11R6/lib}}&lt;br /&gt;
and list your GL libraries and links&lt;br /&gt;
:{{cmdroot|ls -la *GL*}}&lt;br /&gt;
You should see something like the following two lines amoung others:&lt;br /&gt;
:{{cmdresult|libGL.so -&amp;gt; libGL.so.1.2}}&lt;br /&gt;
:{{cmdresult|libGL.so.1 -&amp;gt; libGL.so.1.2}}&lt;br /&gt;
If you see a link to a mesa library (something like {{cmdresult|... -&amp;gt; libGL.mesa.1.2}}), then that's your problem!  Restore the softlink like this (use your actual library version, though):&lt;br /&gt;
:{{cmdroot|ln -s libGL.so.1.2 libGL.so.1}}&lt;br /&gt;
&lt;br /&gt;
For some reason, this link might &amp;quot;break&amp;quot; later, giving you the software rendering once more.  Even after renaming the mesa library to something like &amp;lt;tt&amp;gt;mesa.bkup&amp;lt;/tt&amp;gt;, the system might still find it and link to it despite the name change.  If you have to do this a lot, you could write a restoreGL script.&lt;br /&gt;
&lt;br /&gt;
=====Gentoo=====&lt;br /&gt;
{{Gentoo}} has built in tools for managing the OpenGL symlinks.  &lt;br /&gt;
:{{cmdroot|eselect opengl set ati}}&lt;br /&gt;
If &amp;lt;tt&amp;gt;eselect opengl ati&amp;lt;/tt&amp;gt; doesn't fix it for you, you should probably tell [http://bugs.gentoo.org Gentoo Bugzilla] (assuming they don't know yet).&lt;br /&gt;
&lt;br /&gt;
If {{cmdroot|ldd /usr/X11R6/bin/glxinfo}} shows that your system still uses the xorg-x11 mesa libs after trying one of the above commands, i.e. a line like this:&lt;br /&gt;
:{{cmdresult|1=libGL.so.1 =&amp;gt; /usr/lib/opengl/xorg-x11/lib/libGL.so.1 (0x400a8000)}}&lt;br /&gt;
you will also need to relink {{path|libGl.so.1.2}}:&lt;br /&gt;
:{{cmdroot|cd /usr/lib/opengl/xorg-x11/lib/}}&lt;br /&gt;
:{{cmdroot|mv libGL.so.1.2 libGL.so.1.2_backup}}&lt;br /&gt;
:{{cmdroot|ln -s /usr/lib/libGL.so.1.2 libGL.so.1.2}}&lt;br /&gt;
After another restart of X {{cmduser|fglrxinfo}} should show that it's using the right libs now.&lt;br /&gt;
&lt;br /&gt;
=====Debian=====&lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|rm /usr/lib/libGL.so*}}&lt;br /&gt;
:{{cmdroot|rm /usr/X11R6/lib/libGL.so*}}&lt;br /&gt;
:{{cmdroot|cd /usr/X11R6/lib}}&lt;br /&gt;
:{{cmdroot|cp /usr/lib/fglrx/diversions/lib/libGL.so.1.2 .}}&lt;br /&gt;
:{{cmdroot|ln -s libGL.so.1.2 libGL.so.1}}&lt;br /&gt;
:{{cmdroot|ldconfig}}&lt;br /&gt;
&lt;br /&gt;
=== Troubles using software suspend ===&lt;br /&gt;
When the computer resumes from suspend, X only displays a garbled image and the computer is frozen.&lt;br /&gt;
The problem is acknowledged in ATI's release notes and in knowledge base entry &amp;lt;strike&amp;gt;[https://support.ati.com/ics/support/KBResult.asp?searchFor=Search+Words&amp;amp;search.x=0&amp;amp;search.y=0&amp;amp;searchOption=id&amp;amp;questionID=737-218+&amp;amp;task=knowledge&amp;amp;searchTime=-1&amp;amp;productID=&amp;amp;folderID=-1&amp;amp;resultLimit=50 737-218]&amp;lt;/strike&amp;gt; [https://support.ati.com/ics/support/KBAnswer.asp?questionID=218 737-218]. Driver version 8.19.10 has &amp;quot;initial support for Suspend and Resume&amp;quot; but is working very nicely for most people (verified on T43, T43p and T42) without vbetool.&lt;br /&gt;
&lt;br /&gt;
If you are using an older version of fglrx, using [http://www.srcf.ucam.org/~mjg59/vbetool/ vbetool] to save/restore the video card state before/after suspend worked for some people. If you use [[Software Suspend 2|Software Suspend 2 (suspend2)]] scripts, you can simply uncomment &amp;lt;tt&amp;gt;EnableVbetool yes&amp;lt;/tt&amp;gt; in {{path|/etc/hibernate/hibernate.conf}}. Be aware though that it breaks suspend/resume for drivers beginning with version 8.19.10, so remember to disable it again when upgrading.&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|+ tested with the following configurations&lt;br /&gt;
!model!!distro||kernel!!fglrx!!PM!!success!!comments&lt;br /&gt;
|-&lt;br /&gt;
|{{T42}}||SUSE 9.3||2.6.11||8.14.13||swsusp||yes||&lt;br /&gt;
|-&lt;br /&gt;
|{{T41p}}||???||2.6.14||8.19.10||suspend2 2.2-rc9||yes||needs a small [http://mailman.linux-thinkpad.org/pipermail/linux-thinkpad/2005-November/030381.html patch]&lt;br /&gt;
|-&lt;br /&gt;
|{{T42p}}||Debian||2.6.10||Debian packaged||suspend2||yes||&lt;br /&gt;
|-&lt;br /&gt;
|{{T43}}||Debian sid||2.6.14.2||8.19.10||swsusp||yes||works perfectly with 8.19.10 (but not earlier versions!)&lt;br /&gt;
|-&lt;br /&gt;
|{{T43}}||Debian etch||2.6.14.2||8.19.10||swsusp||yes||works perfectly with 8.19.10 and without vbetool&lt;br /&gt;
|-&lt;br /&gt;
|{{T43}}||Ubuntu Breezy||2.6.12-10||8.19.10||swsusp||yes||Perfect.  (Finally.)&lt;br /&gt;
|-&lt;br /&gt;
|{{T43}}||FC4||2.6.14.1||8.19.10||suspend2 2.2-rc9||yes||needs a small [http://mailman.linux-thinkpad.org/pipermail/linux-thinkpad/2005-November/030381.html patch], requires DRI disabled in {{path|xorg.conf}} (hence no 3D acceleration)&lt;br /&gt;
|-&lt;br /&gt;
|{{T43}}||FC4||2.6.14.2||8.19.10||suspend2 2.2-rc11||yes||requires DRI disabled in {{path|xorg.conf}} (hence no 3D acceleration)&lt;br /&gt;
|-&lt;br /&gt;
|{{T43}}||FC4||2.6.14.3||8.19.10||suspend2 2.2-rc13||no||DRI enabled&lt;br /&gt;
|-&lt;br /&gt;
|{{T43}}||FC4||2.6.14.3||8.20.8||suspend2 2.2-rc13||no||DRI enabled&lt;br /&gt;
|-&lt;br /&gt;
|{{T43p}}||FC6||2.6.20-1.2933||8.34.8||swsusp, STR||yes||DRI enabled, occasionally fails, reason unknown.&lt;br /&gt;
|-&lt;br /&gt;
|{{R50p}}||???||???||8.19.10||swsusp||yes||&lt;br /&gt;
|-&lt;br /&gt;
|{{T43p}}||Debian sid||2.6.14||8.19.10||Suspend to RAM||yes||without vbetool or UseDummyXServer, those two ''break'' the resume process here, with DRI enabled&lt;br /&gt;
|-&lt;br /&gt;
|{{T43p}}||Debian sid||2.6.14.3||8.20.8||Suspend to RAM||yes||without vbetool or UseDummyXServer, with DRI enabled&lt;br /&gt;
|-&lt;br /&gt;
|{{R52}}||Debian sid||2.6.15-rc5||8.20.8||swsup||yes||both vbetool and UseDummyXServer disabled, DRI enabled, needs [http://marc.theaimsgroup.com/?l=linux-kernel&amp;amp;m=113429835515001&amp;amp;w=2 patch]&lt;br /&gt;
|-&lt;br /&gt;
|{{T43p}}||Gentoo||[http://packages.gentoo.org/ebuilds/?suspend2-sources-2.6.15-r6 2.6.15]||8.22.5||Suspend to RAM||yes||without vbetool or UseDummyXServer, with DRI enabled - console is garbled until switching back from X&lt;br /&gt;
|-&lt;br /&gt;
|{{T43p}}||Gentoo||[http://packages.gentoo.org/ebuilds/?suspend2-sources-2.6.15-r6 2.6.15]||8.22.5||suspend2 2.2||yes||without vbetool or UseDummyXServer, with DRI enabled&lt;br /&gt;
|-&lt;br /&gt;
|{{T43}}||SUSE 10.1||2.6.16||8.25.18||swsusp||yes||without vbetool or UseDummyXServer, with DRI enabled&lt;br /&gt;
|-&lt;br /&gt;
|{{T43}}||SUSE 10.1||2.6.16||8.25.18||Suspend to RAM||yes||without vbetool or UseDummyXServer, with DRI enabled&lt;br /&gt;
|-&lt;br /&gt;
|{{T60}}||Gentoo 2006.1||2.6.19-suspend2||8.31.5||Suspend2||yes||Everything works: 3D, suspend-to-disk, suspend-to-ram, suspend in X.org, switching to VT's at any moment. Never needed to unload any modules manually, worked immediately. Fglrx driver 8.32.5 totally broke suspend for me, so i'm sticking with 8.31.5. T60 2008-B62 model.&lt;br /&gt;
|-&lt;br /&gt;
|{{T60p}}||Kubuntu 6.06||2.6.15||8.25.18||swsusp||no||Switching to VT to suspend: no resume, X restarts; Not switching: suspend works, garbled X display on resume, later X restarts&lt;br /&gt;
|-&lt;br /&gt;
|{{T60p}}||Kubuntu 6.06 Text Mode||2.6.15||---||swsusp||yes||suspend works in textmode after rmmod fglrx. &lt;br /&gt;
|-&lt;br /&gt;
|{{T60p}}||Debian/unstable/experimental||2.6.18||8.31.5-1 (from debian experimental)||susptoram hibernate debian packages||yes||suspend and resume works with X, 3D acc., Xv overlay... &lt;br /&gt;
|-&lt;br /&gt;
|{{T60p}}||Fedora Core 6 x86_64||2.6.20-1.2962_1.fc6.cubbi_suspend2|| 8.38.6||suspend2 hibernate||yes||suspend2 hibernate and resume working with libata driver (ahci not tested). Xv still broken since 8.35.5.  Have not needed to set extra_pages_allowance thus far.&lt;br /&gt;
|-&lt;br /&gt;
|{{Z61m}}||Debian Sid||2.6.20.7||8.35.5-1||Suspend to RAM||yes||works without any problems, justs needs the usual acpi_sleep hacks&lt;br /&gt;
|-&lt;br /&gt;
|{{Z61m}}||Debian Sid||2.6.20.7||8.35.5-1||Suspend to Disk (Software Suspend)||yes||works without any problems&lt;br /&gt;
|-&lt;br /&gt;
|{{Z61m}}||Debian Sid||2.6.21||8.35.5-1||Suspend to RAM||yes||fglrx module must not be loaded into the kernel, or it won't resume&lt;br /&gt;
|-&lt;br /&gt;
|{{Z61m}}||openSUSE 10.2||2.6.21.5||8.37.6||suspend2 2.2.10||yes||/sys/power/suspend2/extra_pages_allowance must be set to 20000&lt;br /&gt;
|-&lt;br /&gt;
|{{Z61p}}||ARCH Linux||2.6.20||8.35.5-1||Suspend to RAM||yes||works with KDE suspend&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Troubles with large RAM ===&lt;br /&gt;
Version 8.14.13 (and probably earlier versions) of the driver does not seem to be able to cope with large amounts of RAM: with 512 MB it works, with 1.5 GB it crashes the machine as soon as X is started. The problem is present only if the &amp;lt;tt&amp;gt;fglrx&amp;lt;/tt&amp;gt; kernel module is loaded, but independently of whether {{kernelconf|CONFIG_HIGHMEM||||||}} is enabled. A workaround is to limit RAM by adding the {{bootparm|mem|864m}} kernel parameter.&lt;br /&gt;
&lt;br /&gt;
Version 8.16.20 fixes the problem.&lt;br /&gt;
&lt;br /&gt;
===Display switching ===&lt;br /&gt;
The switching between internal and external display doesn't work with fglrx versions &amp;lt;= 8.24.8, because the driver blocks messing around with the chipset via ACPI. If you want to use this feature (i.e. during presentations), you should use the &amp;lt;tt&amp;gt;vesa&amp;lt;/tt&amp;gt; server instead (experienced with a R52, Kernel 2.6.11, xorg 6.8.2, fglrx 8.16.20). Or boot notebook with CRT connected, it will automatically detect it and display on both.&lt;br /&gt;
&lt;br /&gt;
===Composite Support===&lt;br /&gt;
ATI has not officially supported composite windowing (alpha channel) enabling hardware accelerated translucent windows (primarily for 'eye candy.')  Enabling Composite in KDE and the fglrx driver results in a very pretty desktop but unacceptably slow performance on a T43p with ATI's FireGL T2.  It is still unusable in its current state (as of driver 8.25.18).&lt;br /&gt;
&lt;br /&gt;
ATI promises support in the future when composite is officially supported by Xorg.  Discussion of current status of drivers can be found in the Rage3d forums' (http://rage3d.com/board) Linux area.&lt;br /&gt;
&lt;br /&gt;
Composite support is, however, supported with recent Mesa and Xorg &amp;gt; 7 with the open source 3d radeon drivers as found in the linux kernel or debian's driver repository.  It works with the [[R300]] / FireGL T2 series as found on the T43p extremely well.  This has made rapid progress in speed with the latest few releases, and as of kernel 2.6.23 runs perfectly well with an R300 based card.&lt;br /&gt;
&lt;br /&gt;
===Hardlock on X logout===&lt;br /&gt;
Up from driver version 8.19.10 you will experience a system hard lock when logging out from X, if the session manager (kdm/gdm) is not properly configured. You have to tell the session manager to restart X.&lt;br /&gt;
&lt;br /&gt;
In the kdm config file (gentoo: {{path|/usr/kde/&amp;lt;VERSION&amp;gt;/share/config/kdm/kdmrc}}) you have to add following to the section &amp;lt;code&amp;gt;[X-:*-Core]&amp;lt;/code&amp;gt;: &lt;br /&gt;
 TerminateServer=true&lt;br /&gt;
&lt;br /&gt;
In the gdm config (/etc/gdm/gdm.conf) file add the following to the daemon-section:&lt;br /&gt;
 AlwaysRestartServer=true&lt;br /&gt;
&lt;br /&gt;
Information from the ATI bugtracker: http://ati.cchtml.com/show_bug.cgi?id=239&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another reason of hardlock my be using the wrong AGP driver. Make sure that you have proper drivers for your motherboard loaded before fglrx: (gentoo: {{path|/etc/modules.autoload.d/kernel-2.6}}):&lt;br /&gt;
 intel-agp&lt;br /&gt;
 fglrx&lt;br /&gt;
&lt;br /&gt;
A common problem seems to be mistakenly using ATI Chipset drivers instead of Intel.&lt;br /&gt;
&lt;br /&gt;
Information from gentoo bugtracker: &amp;lt;s&amp;gt;[http://bugs.gentoo.org/show_bug.cgi?id=113685 113685]&amp;lt;/s&amp;gt;. Fixed in 8.25.18&lt;br /&gt;
&lt;br /&gt;
===Cannot switch to VT===&lt;br /&gt;
&lt;br /&gt;
With usplash boot enabled, it may not be possible to switch to a VT from X (Using Alt+Fn). Tested on T60p (Mobility Fire GLV5200) on Ubuntu 6.06 / 6.10 and fglrx 8.25.18 / 8.28.8.  Display may become garbled and system might freeze. Solution (testet on Ubuntu 6.10) is to either remove the &amp;quot;splash&amp;quot; kernel boot parameter or add &amp;quot;vga=791&amp;quot; parameter (&amp;quot;vga=794&amp;quot; can be used on 1400x1050 panel).&lt;br /&gt;
&lt;br /&gt;
http://ati.cchtml.com/show_bug.cgi?id=37 &amp;lt;br&amp;gt;&lt;br /&gt;
https://launchpad.net/distros/ubuntu/+source/usplash/+bug/63558&lt;br /&gt;
&lt;br /&gt;
===Flickering Display===&lt;br /&gt;
&lt;br /&gt;
Some people have reported problems with their display flickering when using ati-drivers newer than 8.14.13. The problem is unclear&lt;br /&gt;
(possibly associated with an incorrect modeline setting) and no known solution exists except to use the open source radeon drivers.&lt;br /&gt;
You can follow this problem here: http://ati.cchtml.com/show_bug.cgi?id=248&lt;br /&gt;
&lt;br /&gt;
===Error messages in system log===&lt;br /&gt;
&lt;br /&gt;
If you find something like the following in {{path|/var/log/messages}}:&lt;br /&gt;
&lt;br /&gt;
:{{cmdresult|kernel: mtrr: base(0xc0000000) is not aligned on a size(0x7ff0000) boundary}}&lt;br /&gt;
:{{cmdresult|kernel: [fglrx:firegl_addmap] *ERROR* mtrr allocation failed (-22)}}&lt;br /&gt;
:{{cmdresult|kernel: [fglrx:firegl_unlock] *ERROR* Process 5132 using kernel context 0}}&lt;br /&gt;
&lt;br /&gt;
try to execute the following line and reload the fglrx module:&lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|1=echo &amp;quot;base=0xd0000000 size=0x8000000 type=write-combining&amp;quot; &amp;gt; /proc/mtrr}}&lt;br /&gt;
&lt;br /&gt;
More detailed instructions can be found [http://ubuntuforums.org/showthread.php?t=115104 here].&lt;br /&gt;
&lt;br /&gt;
===Hang when logging out===&lt;br /&gt;
&lt;br /&gt;
A common problem is that when logging out from X, instead of gettign the KDM or GDM prompt, the system hangs.&lt;br /&gt;
&lt;br /&gt;
This is discussed, including workarounds here: http://ati.cchtml.com/show_bug.cgi?id=239&lt;br /&gt;
&lt;br /&gt;
===No power saving when CRT in use===&lt;br /&gt;
&lt;br /&gt;
When both CRT and LCD are in use, power saving cannot be enabled.&lt;br /&gt;
&lt;br /&gt;
This is reported here: http://ati.cchtml.com/show_bug.cgi?id=304&lt;br /&gt;
&lt;br /&gt;
===WineX / Cedega Installs Software But Errors on Loading Games===&lt;br /&gt;
&lt;br /&gt;
Some users may experience problems with certain FIREGL cards (in my case an ibm t43p laptop with a v3200 ati firegl) whereby projects such as cedega and wine refuse to work with 3d graphics, but native binaries (e.g. quake 4) work fine. A possible workaround is to add the following line in the drivers section of your /etc/X11/xorg.conf &lt;br /&gt;
&lt;br /&gt;
 Option &amp;quot;UseFastTLS&amp;quot; &amp;quot;2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
This option used to be configured with the older ati drivers when you ran &amp;quot;fglrxconfig&amp;quot;. I have not yet found a way to get it to appear with &amp;quot;aticonfig&amp;quot;, hence the manual insertion. This option is good for several linux distros I have tried, fedora core 5, ubuntu dapper and suse 10.1. It does not appear to effect performance on natively run programs.&lt;br /&gt;
&lt;br /&gt;
{{NOTE|This may cause problems on machines with a Linux kernel version of 2.6.20 or higher (observed choppy video and video color inversion on T60p with both 2.6.20 and 2.6.21).}}&lt;br /&gt;
&lt;br /&gt;
===Line Appears Below Mouse Cursor===&lt;br /&gt;
&lt;br /&gt;
Some users have reported seeing a line approximately 1 mouse height below the bottom edge of the cursor, which follows the mouse and appears to change color based on the image below the cursor.  This has been seen to happen using fglrx without the kernel module installed (in 2D mode) and additionally on external displays or multiple X servers.  To work around the problem, try disabling the DGA extension by making the following changes to your XFree86.conf or xorg.conf file.  Replace (or comment-out)&lt;br /&gt;
 Load &amp;quot;extmod&amp;quot;&lt;br /&gt;
with&lt;br /&gt;
 SubSection  &amp;quot;extmod&amp;quot;&lt;br /&gt;
  Option  &amp;quot;omit xfree86-dga&amp;quot;&lt;br /&gt;
 EndSubSection&lt;br /&gt;
&lt;br /&gt;
===Freeze while using OpenGL Apps===&lt;br /&gt;
&lt;br /&gt;
Some OpenGL applications such as screensavers or games (SecondLife) cause freezes.  The cursor still moves, but otherwise the machine is unresponsive.  This is the case with Xorg 7.1 and fglrx 8.29.6 using an x1400 and other cards.  The solution is to add the following options to the video Device section in xorg.conf:&lt;br /&gt;
 Option &amp;quot;Capabilities&amp;quot; &amp;quot;0x00000800&amp;quot;&lt;br /&gt;
 Option &amp;quot;KernelModuleParm&amp;quot; &amp;quot;locked-userpages=0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===Xv doesn't work correctly with drivers &amp;gt;= 8.36 and Xyyyy-cards===&lt;br /&gt;
&lt;br /&gt;
See [http://ati.cchtml.com/show_bug.cgi?id=677] for further information. It seems as if only Xyyyy-cards are affected. Problem: graphical glitches with mplayer, programs like xine and totem might not start up at all. 8.35 doesn't seem to be affected&lt;br /&gt;
&lt;br /&gt;
===Floating Point Exception with various X apps===&lt;br /&gt;
&lt;br /&gt;
When the X server is left to autodetect the DPI, the fglrx driver may fail to supply the monitor dimensions.  Video output switching may contribute to this bug.&lt;br /&gt;
&lt;br /&gt;
Problems were experienced on T42p with Ubuntu 7.04, xorg-driver-fglrx 7.1.0-8.34.8+2.6.20.5-16.29.&lt;br /&gt;
&lt;br /&gt;
This can be observed with xdpyinfo&lt;br /&gt;
&lt;br /&gt;
:{{cmduser|xdpyinfo | grep dimensions}}&lt;br /&gt;
:{{cmdresult|dimensions:    1280x1024 pixels (0x0 millimeters)}}&lt;br /&gt;
&lt;br /&gt;
Many applications will use the screen size and attempt to calculate DPI, resulting in a divide by zero operation and a SIGFPE.&lt;br /&gt;
&lt;br /&gt;
A work around is to supply the dimensions in /etc/X11/xorg.conf.  Use the DisplaySize parameter within your monitor's configuration.  For example:&lt;br /&gt;
&lt;br /&gt;
  Section &amp;quot;Monitor&amp;quot;&lt;br /&gt;
          Identifier   &amp;quot;Generic Monitor&amp;quot;&lt;br /&gt;
          HorizSync    28.0 - 64.0&lt;br /&gt;
          VertRefresh  43.0 - 60.0&lt;br /&gt;
          Option      &amp;quot;DPMS&amp;quot;&lt;br /&gt;
          DisplaySize 433 351&lt;br /&gt;
  EndSection&lt;br /&gt;
&lt;br /&gt;
== Patches ==&lt;br /&gt;
The following patches might be needed for certain versions of fglrx. Before you apply any of these, make sure that you really need them, as some distributions include all the necessary patches with the appropriate package (e.g. ati-drivers in gentoo).&lt;br /&gt;
&lt;br /&gt;
===fglrx 8.37.6===&lt;br /&gt;
* For kernel 2.6.22 you need this patch from a [http://www.phoronix.com/forums/showthread.php?t=2849 Phoronix thread].&lt;br /&gt;
&lt;br /&gt;
===fglrx 8.35.5===&lt;br /&gt;
* [http://whoopie.gmxhome.de/linux/patches/2.6.20/fglrx-8.35.5-for-2.6.20.patch For kernel 2.6.20], part of the Fedora packaging scripts in the ATI installer&lt;br /&gt;
&lt;br /&gt;
===fglrx 8.34.8===&lt;br /&gt;
* [http://whoopie.gmxhome.de/linux/patches/2.6.20/fglrx-8.34.8-for-2.6.20.patch For kernel 2.6.20]&lt;br /&gt;
&lt;br /&gt;
===fglrx 8.32.5===&lt;br /&gt;
* [http://whoopie.gmxhome.de/linux/patches/2.6.19/fglrx-8.32.5-for-2.6.19.patch For kernel 2.6.19]&lt;br /&gt;
&lt;br /&gt;
===fglrx 8.23.7===&lt;br /&gt;
* For kernel 2.6.16: [http://mirror.espri.arizona.edu/gentoo/rsync/x11-drivers/ati-drivers/files/ati-drivers-8.22.5-intermodule.patch &amp;lt;tt&amp;gt;intermodule&amp;lt;/tt&amp;gt; patch] and [http://mirror.espri.arizona.edu/gentoo/rsync/x11-drivers/ati-drivers/files/ati-drivers-8.23.7-noiommu.patch &amp;lt;tt&amp;gt;noiommu&amp;lt;/tt&amp;gt; patch]&lt;br /&gt;
&lt;br /&gt;
===fglrx 8.21.7===&lt;br /&gt;
&lt;br /&gt;
* [http://www.ksp.sk/~rasto/fglrx_with_2.6.15.patch for kernels &amp;gt;= 2.6.15]&lt;br /&gt;
&lt;br /&gt;
===fglrx 8.20.8===&lt;br /&gt;
&lt;br /&gt;
* [http://marc.theaimsgroup.com/?l=linux-kernel&amp;amp;m=113429835515001&amp;amp;w=2 for kernel 2.6.15]&lt;br /&gt;
or&lt;br /&gt;
* [http://www.ksp.sk/~rasto/fglrx_with_2.6.15.patch for kernels &amp;gt;= 2.6.15]&lt;br /&gt;
&lt;br /&gt;
===fglrx (problem met at least with version 8.18.8)===&lt;br /&gt;
* [http://lkml.org/lkml/2005/9/22/183 for kernel &amp;gt;= 2.6.13 ]  Missing verify_area bug&lt;br /&gt;
&lt;br /&gt;
===fglrx 8.8.25 ===&lt;br /&gt;
* [http://www.rage3d.com/board/showthread.php?t=33798874 for kernels &amp;gt;= 2.6.10]&lt;br /&gt;
* [http://www.gehirn.org.uk/wiki/images/8.8.25-kernel-2.6.11+.patch For kernels &amp;gt;= 2.6.11-rc1]&lt;br /&gt;
&lt;br /&gt;
===Links ===&lt;br /&gt;
* [http://gentoo-wiki.com/HOWTO_ATI_Drivers Gentoo HOWTO ATI]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=HDAPS&amp;diff=30332</id>
		<title>HDAPS</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=HDAPS&amp;diff=30332"/>
		<updated>2007-06-07T12:35:33Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: /* Disk head parking */&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;
=== HDAPS - IBM Active Protection System Linux Driver ===&lt;br /&gt;
This is the Linux driver for monitoring the accelerometer known as [[Active Protection System|IBM Active Protection System]].&lt;br /&gt;
&lt;br /&gt;
The driver only enables reading of the acceleration data. It does '''not''' perform [[#Harddisk Protection|automatic disk head parking]]. But there are already some other useful [[#Applications|applications]] for HDAPS, using the {{path|/sys}} interface it provides.&lt;br /&gt;
&lt;br /&gt;
{{WARN|There are two versions of the hdaps driver, one in the Linux kernel mainline, and another provided by [[tp_smapi]].  '''Use of the tp_smapi version of hdaps is strongly recommended by the current hdaps developers.'''}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
*provides accelerometer values via sysfs&lt;br /&gt;
*provides a joystick type input device&lt;br /&gt;
&lt;br /&gt;
=== Project Homepage / Availability ===&lt;br /&gt;
*[http://hdaps.sourceforge.net/ Project Homepage]&lt;br /&gt;
*The driver is included in the 2.6-mm series of kernels since August, 26th 2005.&lt;br /&gt;
*The driver is now in the mainline (2.6.14).&lt;br /&gt;
*The [[tp_smapi]] package contains some patches to this driver. These are necessary for some recent models, and recommended for all.&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
A driver is included in recent Linux kernels and is actively maintained, but it is very inferior to the driver in tp_smapi.&lt;br /&gt;
&lt;br /&gt;
=== How to install the driver ===&lt;br /&gt;
If you are using a version of the Linux kernel &amp;lt; 2.6.14, please upgrade. I struggled long and hard to get the driver working with an old version of the kernel, and it was a mess. I gave up, upgraded my kernel, and one recompile later, HDAPS was working. &lt;br /&gt;
&lt;br /&gt;
For 2.6.18 kernel, T60 users have to edit hdaps_init() in drivers/hwmon/hdaps.c to include a HDAPS_DMI_MATCH_LENOVO(&amp;quot;ThinkPad T60&amp;quot;) line.&lt;br /&gt;
&lt;br /&gt;
Install the tp_smapi module if you experience problems with hdaps always reading out constant values of (0,0) [http://sourceforge.net/mailarchive/message.php?msg_id=15350314 refer]&lt;br /&gt;
&lt;br /&gt;
=== Harddisk Protection ===&lt;br /&gt;
As mentioned above, the hdaps kernel driver is only responsible for reading the accelerometer data and exporting it through the sysfs interface. In order to use this information to protect the disk, some additional steps are required.&lt;br /&gt;
&lt;br /&gt;
See [[How to protect the harddisk through APS]].&lt;br /&gt;
&lt;br /&gt;
=== Input device support ===&lt;br /&gt;
The hdaps driver in the lastest kernels (2.6.14 and later?) also exports a joystick type input device, which can be used by games.&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
====Disk head parking====&lt;br /&gt;
You will need the kernel patch and userspace daemon. The GUI monitoring is optional.&lt;br /&gt;
* Kernel patch (apply using 'patch -p1 -l &amp;lt; hdaps_xx.patch')&lt;br /&gt;
**[http://lwn.net/Articles/154923/ disk park patch] &amp;lt;tt&amp;gt;an experimental patch for parking the disk (Linux 2.6.14 for 2.6.15 see below)&amp;lt;/tt&amp;gt;&lt;br /&gt;
**[http://jenster.dyndns.org/files/blk_freeze-01-nodetection-for-2.6.14.patch disk park patch adapted for the t41p model] &amp;lt;tt&amp;gt; kernel 2.6.14 *([http://sourceforge.net/mailarchive/message.php?msg_id=13214288 capability detection disabled], no libata support)&amp;lt;/tt&amp;gt;&lt;br /&gt;
**[http://jenster.dyndns.org/files/blk_freeze-01-nodetection-for-2.6.15.patch disk park patch adapted for the t41p model] &amp;lt;tt&amp;gt; kernel 2.6.15 *([http://sourceforge.net/mailarchive/message.php?msg_id=13214288 capability detection disabled], no libata support)&amp;lt;/tt&amp;gt;&lt;br /&gt;
**[http://www.dresco.co.uk/hdaps/hdaps_protect.20060118.patch sata/ide disk protection patch for 2.6.15]&lt;br /&gt;
**[http://www.dresco.co.uk/hdaps/hdaps_protect.20060430.patch Latest sata/ide disk protection patch for 2.6.16]&lt;br /&gt;
**[http://whoopie.gmxhome.de/linux/patches/2.6.16-tj/05-hdaps_protect-20060430-for-2.6.16-tj.patch Latest sata/ide disk protection patch for use with the libata hotplug 2.6.16.16 patches] - See [[How_to_hotswap_UltraBay_devices]]&lt;br /&gt;
**[http://whoopie.gmxhome.de/linux/patches/2.6.17.14-tj/03-hdaps_protect-20060430-for-2.6.17-tj.patch Latest sata/ide disk protection patch for use with the libata hotplug 2.6.17.4 patches] - See [[How_to_hotswap_UltraBay_devices]]&lt;br /&gt;
**[http://exitzero.de/t41p-configs/hdaps_protect-2.6.17.1-20060625.patch Untested patch for 2.6.17.1]: see [http://thread.gmane.org/gmane.linux.drivers.hdaps.devel/708/focus=708]&lt;br /&gt;
**[http://www.dresco.co.uk/hdaps/hdaps_protect-2.6.18.3-2.patch Latest sata/ide disk protection patch for 2.6.18.3]&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.kernel/470413 Latest sata/ide disk protection patch for 2.6.19-rc6]&lt;br /&gt;
**[http://www.nabble.com/attachment/9047418/0/hdaps_protect-2.6.20.patch.bz2 Latest sata/ide disk protection patch for 2.6.20] (old design)&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/993 Latest sata/ide disk protection patch for 2.6.20 and 2.6.21] (new design)&lt;br /&gt;
*Userspace daemon&lt;br /&gt;
**[http://www.dresco.co.uk/hdaps/hdapsd-20070415.c  userspace parking daemon] (recommended version)&lt;br /&gt;
**[ftp://rohrmoser-engineering.de/pub/  hdapsd-&amp;lt;date&amp;gt;.c  is a version of the daemon which uses a different (and potentially better) algorithm for the adaptive sensivity threshold] (fork of the &amp;quot;upstream&amp;quot; daemon)&lt;br /&gt;
*GUI monitoring&lt;br /&gt;
**[http://roy.marples.name/node/269 khdapmonitor] KDE System Tray Monitor&lt;br /&gt;
**[http://www.dresco.co.uk/hdaps/gnome-hdaps-applet-20060120.tar.gz gnome-hdaps-applet] visual display of disk protection status in gnome panel&lt;br /&gt;
See [[How to protect the harddisk through APS]] for more information.&lt;br /&gt;
&lt;br /&gt;
====Security &amp;amp; safety====&lt;br /&gt;
*[[Script for theft alarm using HDAPS]]&lt;br /&gt;
&lt;br /&gt;
====Tilt monitoring====&lt;br /&gt;
*[http://www.mulliner.org/collin/gkibm-acpi.php gkhdaps] &amp;lt;tt&amp;gt;a GKrellM applet displaying tilt data&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[http://rlove.org/log/2005082203.html gnome-tilt] &amp;lt;tt&amp;gt;a gnome applet showing tilt data&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Visualisation (of ThinkPad orientation)====&lt;br /&gt;
*[http://rlove.org/log/2005082401.html hdaps-gl] &amp;lt;tt&amp;gt;a little app animating a 3D-ThinkPad&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[https://sourceforge.net/project/showfiles.php?group_id=138242 hdapsgl-applet] &amp;lt;tt&amp;gt; a GNOME applet animating a 3D-ThinkPad&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[https://sourceforge.net/project/showfiles.php?group_id=138242 wmadhps] &amp;lt;tt&amp;gt;a WindowMaker DockApp animating a 3D-ThinkPad&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[http://www.cs.cmu.edu/~ecc/gyro.tar.gz OpenGL gyroscope hack] &amp;lt;tt&amp;gt;keeps your display levelled when tilting the ThinkPad&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Games====&lt;br /&gt;
*[http://icculus.org/neverball/ Neverball] is quite fun with HDAPS. (You'll need to have the HDAPS joystick device)&lt;br /&gt;
*Turn your ThinkPad into a Jedi Weapon (hey, it [http://isnoop.net/blog/2006/05/20/macsaber-turn-your-mac-into-a-jedi-weapon works for Mac laptops])&lt;br /&gt;
&lt;br /&gt;
====Other====&lt;br /&gt;
&lt;br /&gt;
*[http://blog.micampe.it/articles/2006/06/04/here-comes-the-smackpad smack.py] - switch workspace by smacking your laptop, inspired by the [http://blog.medallia.com/2006/05/smacbook_pro.html SmackBook] (uses EWMH)&lt;br /&gt;
**an [http://weblogs.mozillazine.org/gerv/archives/2006/09/stablilised_smackpad.html improved version] adds stabilization (by comparing smacks to previous ones, uses EWMH)&lt;br /&gt;
**another [http://pberndt.com/Programme/Linux/pyhdaps/index.html approach] adds stabilization (by requiring a certain type of value deflection, uses xmacroplay)&lt;br /&gt;
**[http://www.gnome.org/~fherrera/gtollina.c GTollina] is another smack program for use with compiz (video [http://www.gnome.org/~fherrera/blog/gtollina.html here]).&lt;br /&gt;
*[http://blog.odonnell.nu/61.html xmms-smack.py] - move through your xmms playlist by smacking, based on the two smack scripts above.&lt;br /&gt;
*[http://www-128.ibm.com/developerworks/linux/library/l-knockage.html?ca=dgr-lnxw02aKnockBasedCommands KnockBasedCommands] - Execute commands by tapping your laptop.&lt;br /&gt;
&lt;br /&gt;
=== Interesting links related to this project ===&lt;br /&gt;
* [https://lists.sourceforge.net/lists/listinfo/hdaps-devel HDAPS mailinglist and its archive]&lt;br /&gt;
* #hdaps channel on irc.freenode.org&lt;br /&gt;
* [https://sourceforge.net/projects/hdaps/ hdaps projects] overview of userspace programs using hdaps&lt;br /&gt;
* [http://www-307.ibm.com/pc/support/site.wss/document.do?lndocid=TPAD-HDFIRM IBM ThinkPads hardware drive firmware site]&lt;br /&gt;
* [http://www.paul.sladen.org/thinkpad-r31/accelerometer.html http://www.paul.sladen.org/thinkpad-r31/accelerometer/]&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=119845 Gentoo ebuild for hdaps driver and daemon including a initscript*&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137345 Gentoo ebuild for gkhdaps gkrell plugin&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137350 Gentoo ebuild for hdaps-gl application&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137351 Gentoo ebuild for gnome hdapsgl-applet&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137352 Gentoo ebuild for gnome tilt application&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137353 Gentoo ebuild for wmhdaps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:R50]] [[Category:R50p]] [[Category:R51]] [[Category:R52]] [[Category:R60]] [[Category:T41]] [[Category:T41p]] [[Category:T42]] [[Category:T42p]] [[Category:T43]] [[Category:T43p]] [[Category:T60]] [[Category:T60p]] [[Category:T61]] [[Category:X40]] [[Category:X41]] [[Category:X41 Tablet]] [[Category:X60]] [[Category:X60s]] [[Category:Z60m]] [[Category:Z60t]] [[Category:Drivers]] [[Category:Z61m]]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Fglrx&amp;diff=30197</id>
		<title>Fglrx</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Fglrx&amp;diff=30197"/>
		<updated>2007-05-31T21:04:10Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: /* Status */ fglrx 8.37.6&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;
== ATI fglrx driver ==&lt;br /&gt;
This is a proprietary Linux binary-only driver for ATI graphic chips with support for 3D acceleration.&lt;br /&gt;
&lt;br /&gt;
Also see [[R300|opensource driver]] with 3D support&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Availability / Project Homepage==&lt;br /&gt;
Home page: http://ati.amd.com/support/drivers/linux/linux-radeon.html&lt;br /&gt;
&lt;br /&gt;
== Packages ==&lt;br /&gt;
The ATI drivers have explicit permission for repackaging and redistribution of the Linux drivers.  Many distributions are supported within the installer, and many more repackaged by external developers.  Please visit the  [http://wiki.cchtml.com/index.php/Category:Distributions Distribution Page at the Unofficial ATI driver Wiki]&lt;br /&gt;
&lt;br /&gt;
*{{Debian}} packages: http://www.stanchina.net/~flavio/debian-official/fglrx-driver.html&lt;br /&gt;
** These packages have been added to Debian unstable as &amp;lt;tt&amp;gt;fglrx-driver&amp;lt;/tt&amp;gt;, so you can now apt-get them and use module-assistant to install.&lt;br /&gt;
** If you are on stable sarge with backport's kernel 2.6.15, download ATI's installer, let it build Debian packages and proceed as usual. There's a [http://jroller.com/page/erAck?entry=lot_day_6_2_fglrx detailed description] available.&lt;br /&gt;
*{{SUSE}} packages: http://www.suse.de/~sndirsch/ati-installer-HOWTO.html&lt;br /&gt;
*{{Gentoo}} {{cmdroot|emerge ati-drivers}}&lt;br /&gt;
*{{Fedora}} 4 packages: http://rpm.livna.org&lt;br /&gt;
** For stock Fedora kernels: {{cmdroot|yum install kernel-module-fglrx-$(uname -r) ati-fglrx }}&lt;br /&gt;
** For custom-compiled kernels: see [[How to build custom packages for fglrx]]&lt;br /&gt;
*{{Fedora}} 5 packages: http://rpm.livna.org&lt;br /&gt;
** For stock Fedora kernels: {{cmdroot|yum install xorg-x11-drv-fglrx}}&lt;br /&gt;
** For custom-compiled kernels: see [[How to build custom packages for fglrx]]&lt;br /&gt;
*{{Arch Linux}}&lt;br /&gt;
:{{cmdroot|pacman -S ati-fglrx}} (kernel module for 2.6.15-ARCH)&lt;br /&gt;
:{{cmdroot|pacman -S ati-fglrx-archck}} (kernel module for 2.6.15-archck)&lt;br /&gt;
:{{cmdroot|pacman -S ati-fglrx-utils}} (xorg7 stuff and tools)&lt;br /&gt;
*{{Ubuntu}}&lt;br /&gt;
**[http://wiki.cchtml.com/index.php/Ubuntu_Dapper_Installation_Guide Dapper Drake Howto]&lt;br /&gt;
**[http://wiki.cchtml.com/index.php/Ubuntu_Breezy_Installation_Guide Breezy Badger Howto]&lt;br /&gt;
**[http://wiki.cchtml.com/index.php/Ubuntu_Edgy_Installation_Guide Edgy Eft Howto]&lt;br /&gt;
**[http://wiki.cchtml.com/index.php/Ubuntu_Feisty_Installation_Guide Feisty Fawn Howto]&lt;br /&gt;
&lt;br /&gt;
== Building for Xorg 7.0==&lt;br /&gt;
To compile fglrx versions &amp;lt;= 8.24.8 for Xorg 7.0.0, fake Xorg 6.9.0 by &lt;br /&gt;
:{{cmdroot|1=export X_VERSION=x690; sh ati-driver-installer-8.24.8-x86.run}}&lt;br /&gt;
Next, move the various resulting libraries and modules from /usr/X11R6 to /usr/lib/xorg&lt;br /&gt;
&lt;br /&gt;
In {{path|/usr/src/ATI}} additional sources are installed for fireglcontrol and fgl_glxgears&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
Current version: 8.37.6 (31st May 2007).&lt;br /&gt;
Major changes:&lt;br /&gt;
* 8.37.6: Xorg Server 1.3 support, CCC 1.0, crash when logging off from X fixed, Xv cropping bug fixed&lt;br /&gt;
* 8.36.5: Kernel 2.6.20 support, CCC Beta 0.9 with localization&lt;br /&gt;
* 8.35.5: Beta AMD Catalyst Control Center, X-Server termination from console does not result in a blank screen. Kernel 2.6.20 requires some patching (see [[Problems_with_fglrx#fglrx_8.35.5|fglrx patches section]]).&lt;br /&gt;
* 8.34.8: Radeon Xpress 1250 support, X-Video on x86_64 fix, hibernation mode fix. Kernel 2.6.20 requires some patching (see [[Problems_with_fglrx#fglrx_8.34.8|fglrx patches section]]).&lt;br /&gt;
* 8.33.6: X.Org 7.2 support, kernel 2.6.19 support, some fixes in the installer, 2 more bugfixes. Resume from suspend works if you make sure you have set &amp;quot;VbetoolPost no&amp;quot; and &amp;quot;EnableVbetool no&amp;quot; in your suspend to ram hibernate conf (/etc/hibernate/ram.conf on ubuntu/debian).&lt;br /&gt;
* 8.32.5: support for X1650, X.Org 7.2 RC2 support, bugfixes. Suspend-to-ram is broken with specific cards, *no* 2.6.19 support (see [[Problems_with_fglrx#fglrx_8.32.5|fglrx patches section]]).&lt;br /&gt;
* 8.31.5: no new features, only bugfixes.  Of note, for some users, this version breaks suspend-to-ram and suspend-to-disk.&lt;br /&gt;
* 8.30.3: no new features, only bugfixes&lt;br /&gt;
* 8.29.6: Linux 2.6.18 support, dropped support for Radeon 8500/9000/9100/9200/9250 (both, mobile and normal versions)&lt;br /&gt;
* 8.28.8: Display Switching Support for ThinkPads, ATI Pairmode support, Retaining display device state between restarts, Support for Radeon Xpress 1200, 1250, and 1300&lt;br /&gt;
* 8.27.10: X.org 7.1 support, Fedora Core package support&lt;br /&gt;
* 8.26.18: support for dynamically attached DFPs and Thermal Event Power Management (both via daemon), minor bug fixes&lt;br /&gt;
* 8.25.18: Xorg 7.0 support, FireGLâ„¢V5xxx/V7xxx support, Dynamic Display Management, fixed a lot of critical bugs.&lt;br /&gt;
* 8.24.8: support for X1300, X1400, X1600, X1800 (generic and mobility) and 3D accelerated video playback on Avivo&lt;br /&gt;
* 8.23.7: support for X850 and X800, OpenGL 2.0 Enhancement, FSAA for some chips&lt;br /&gt;
* 8.22.5: added kernel 2.6.15 support -- patch no longer required&lt;br /&gt;
* 8.21.7: initial OpenGL 2.0 support&lt;br /&gt;
* 8.20.8: fixed resume issues, fixed compile problems with kernels 2.6.13 and 2.6.14&lt;br /&gt;
* 8.19.10: has added suspend / resume and dynamic GPU power management support.  Using vbetool no longer required.&lt;br /&gt;
&lt;br /&gt;
== Known problems and solutions ==&lt;br /&gt;
See [[Problems with fglrx]].&lt;br /&gt;
== User experience ==&lt;br /&gt;
=== Speed ===&lt;br /&gt;
How much is the speed gain versus the opensource drivers?&lt;br /&gt;
&lt;br /&gt;
Compared to the old drivers, approximately 40% speed gain have been noticed with fglrx. However, there are issues with freezing/garbage after suspend, garbage when resizing desktop (via {{key|ctrl}}{{key|alt}}{{key|plus}}, {{key|ctrl}}{{key|alt}}{{key|minus}}), and garbage while using VMware. The current 8.14.13 has shown 400% improvement over using the open source radeon driver: 1200 FPS for glxgears{{footnote|1}}!&lt;br /&gt;
However the situation seems to be changing today. With recent x11-drm-20060608 driver (gentoo) and thinkpad t42 (ati 9600) the speed is confirmed as 1900fps without any single crash so far.&lt;br /&gt;
&lt;br /&gt;
=== 3D acceleration ===&lt;br /&gt;
&lt;br /&gt;
According to [http://xoomer.alice.it/flavio.stanchina/debian/fglrx-installer.html#configure Flavio's page] you need these options:&lt;br /&gt;
&lt;br /&gt;
  Section &amp;quot;Module&amp;quot;&lt;br /&gt;
    ...&lt;br /&gt;
    Load &amp;quot;GLcore&amp;quot;&lt;br /&gt;
    Load &amp;quot;glx&amp;quot;&lt;br /&gt;
    Load &amp;quot;dri&amp;quot;&lt;br /&gt;
    ...&lt;br /&gt;
  EndSection&lt;br /&gt;
&lt;br /&gt;
  # Of course you need to activate the driver&lt;br /&gt;
  Section &amp;quot;Device&amp;quot;&lt;br /&gt;
    ...&lt;br /&gt;
    Driver     &amp;quot;fglrx&amp;quot;&lt;br /&gt;
  EndSection&lt;br /&gt;
&lt;br /&gt;
Don't forget to load the module &amp;lt;tt&amp;gt;fglrx&amp;lt;/tt&amp;gt; (&amp;lt;tt&amp;gt;modprobe fglrx&amp;lt;/tt&amp;gt;).  Under Debian the module can be placed in &amp;lt;tt&amp;gt;/etc/modules&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
With current fglrx drivers (as of 8.29.6) you must disable composite to get 3D DRI acceleration. To do this, add an extra Extensions section (if necessary) containing:&lt;br /&gt;
&lt;br /&gt;
  Section &amp;quot;Extensions&amp;quot;&lt;br /&gt;
     Option  &amp;quot;Composite&amp;quot; &amp;quot;Disable&amp;quot;  #make DRI work with fglrx.&lt;br /&gt;
  EndSection&lt;br /&gt;
&lt;br /&gt;
If you are unsure whether you have DRI running, issue &amp;lt;tt&amp;gt;glxinfo | grep -i direct&amp;lt;/tt&amp;gt; after disabling composite.  Note, this &lt;br /&gt;
&lt;br /&gt;
{{NOTE|1=Video overlay acceleration may be disabled when 3D acceleration is enabled. The following comment from the xorg.conf file bundled with the fglrx driver indicates that:&lt;br /&gt;
   # === OpenGL Overlay ===&lt;br /&gt;
   # Note: When OpenGL Overlay is enabled, Video Overlay&lt;br /&gt;
   #       will be disabled automatically&lt;br /&gt;
       Option &amp;quot;OpenGLOverlay&amp;quot;              &amp;quot;1&amp;quot;&lt;br /&gt;
However, you can use either regular Xv video overlay or make the video an opengl texture and let the OpenGL engine scale your video.  This has nothing to do with the acceleration of 2D drawing primitives.  Further, your mileage on performance may vary depending on what card you have.  The open source drivers don't support newer cards, while the ATI drivers don't support older cards.&lt;br /&gt;
&lt;br /&gt;
You may be able to preserve VideoOverlay acceleration if you explicitly remove the OpenGLOverlay using:&lt;br /&gt;
&lt;br /&gt;
Option &amp;quot;VideoOverlay&amp;quot;  &amp;quot;True&amp;quot; and Option &amp;quot;OpenGLOverlay&amp;quot; &amp;quot;False&amp;quot;.  See [http://xoomer.alice.it/flavio.stanchina/debian/fglrx-installer.html#configure Flavio's page] for detail.}}&lt;br /&gt;
&lt;br /&gt;
=== Power saving ===&lt;br /&gt;
Power saving is much better than with the &amp;lt;tt&amp;gt;radeon&amp;lt;/tt&amp;gt; driver, but doesn't work in dual-screen configuration (see [[How to make use of Graphics Chips Power Management features]]).&lt;br /&gt;
&lt;br /&gt;
=== Suspending with fglrx ===&lt;br /&gt;
&lt;br /&gt;
On a ThinkPad T42 with Kernel 2.6.19 with Software Suspend 2 and R60 with Kernel 2.6.18-suspend2-r1 (Gentoo) , the following addition to &amp;lt;tt&amp;gt;/etc/hibernate/suspend2.conf&amp;lt;/tt&amp;gt; is required:&lt;br /&gt;
&lt;br /&gt;
  # For fglrx&lt;br /&gt;
  ProcSetting extra_pages_allowance 20000&lt;br /&gt;
&lt;br /&gt;
=== Display Switching (Dynamic Display Management) ===&lt;br /&gt;
&lt;br /&gt;
Version 8.25.18 introduces a new feature: Dynamic Display Management. It allows display switching on-the-fly.&lt;br /&gt;
&lt;br /&gt;
To list all connected and enabled monitors:&lt;br /&gt;
:{{cmdroot|1=aticonfig --query-monitor}}&lt;br /&gt;
&lt;br /&gt;
To switch displays:&lt;br /&gt;
:{{cmdroot|1=aticonfig --enable-monitor=STRING,STRING}}, where STRING can be: none, lvds, crt1, crt2, tv, tdms1, tdms2&lt;br /&gt;
&lt;br /&gt;
Only 2 displays can be enabled at the same time. Any displays that are not on the list will be disabled.&lt;br /&gt;
&lt;br /&gt;
== Useful links == &lt;br /&gt;
* [http://www.ati.com/products/catalyst/linux.html ATI Linux Driver FAQ]&lt;br /&gt;
* [http://www.rage3d.com/content/articles/atilinuxhowto/ ATI Radeon Linux How-To]&lt;br /&gt;
* [http://www.rage3d.com/board/forumdisplay.php?f=61&amp;amp;daysprune=30&amp;amp;order=asc&amp;amp;sort=title Rage3D Linux Discussion Forum]&lt;br /&gt;
* [http://www.driverheaven.net/forumdisplay.php?f=103 Radeon Driver Forum at Driverheaven]&lt;br /&gt;
* [http://odin.prohosting.com/wedge01/gentoo-radeon-faq.html Gentoo ATI Radeon FAQ]&lt;br /&gt;
* [http://forums.gentoo.org/viewtopic-t-374745-highlight-t42+ati+dri.html Gentoo T42 ATI. DRI + xorg driver]&lt;br /&gt;
* [http://ati.cchtml.com/ Unofficial community ATI bugzilla] - tracks bugs in the driver. Might be monitored by ATI ([http://www.rage3d.com/board/showpost.php?p=1333438751&amp;amp;postcount=386], [http://www.rage3d.com/board/showpost.php?p=1333439009&amp;amp;postcount=390]).&lt;br /&gt;
&lt;br /&gt;
== ThinkPads that may be supported ==&lt;br /&gt;
Supported chips, as found in select IBM ThinkPads:&lt;br /&gt;
{{NOTE|fglrx version 8.29.6 discontinued support for Radeon 9200 and earlier.}}&lt;br /&gt;
* [[ATI Mobility FireGL 9000]]&lt;br /&gt;
** {{T40p}}&lt;br /&gt;
* [[ATI Mobility FireGL T2]]&lt;br /&gt;
** {{R50p}}&lt;br /&gt;
** {{T41p}}, {{T42p}}&lt;br /&gt;
* [[ATI Mobility FireGL V3200]]&lt;br /&gt;
** {{T43p}}&lt;br /&gt;
* [[ATI Mobility Radeon 9000]]&lt;br /&gt;
** {{R50}}, {{R51}}&lt;br /&gt;
** {{T40}}, {{T41}}, {{T42}}&lt;br /&gt;
* [[ATI Mobility Radeon 9600]]&lt;br /&gt;
** {{T42}}&lt;br /&gt;
* [[ATI Mobility Radeon X300]]&lt;br /&gt;
** {{R52}}&lt;br /&gt;
** {{T43}}&lt;br /&gt;
** {{Z60m}}&lt;br /&gt;
* [[ATI Mobility Radeon Xpress 200M]]&lt;br /&gt;
** {{R51e}}&lt;br /&gt;
* [[ATI Mobility Radeon X600]]&lt;br /&gt;
** {{Z60m}}&lt;br /&gt;
* [[ATI Mobility Radeon X1400]]&lt;br /&gt;
** {{T60}}, {{R60}}, {{Z61m}}&lt;br /&gt;
* [[ATI Mobility FireGL V5200]]&lt;br /&gt;
** {{T60p}}, {{Z61p}}&lt;br /&gt;
&lt;br /&gt;
== ThinkPads that are NOT supported by fglrx==&lt;br /&gt;
Unsupported chips, as found in select IBM ThinkPads:&lt;br /&gt;
* [[ATI Mobility Radeon 7500]]&lt;br /&gt;
** {{R40}}&lt;br /&gt;
** {{T30}}&lt;br /&gt;
** {{T42}}&lt;br /&gt;
&lt;br /&gt;
{{footnotes|&lt;br /&gt;
#Note that glxgears isn't a benchmark tool, it's so simple that its FPS values is without any meaning... you can only compare glxgears using the same drivers/machine, if you change any of then you can have higher/lower values and in real life programs/games happen to have the opposite effects. Think in terms of a car engines rpms: higher rpms in the same car usually means a faster car, change anything and it's meaningless, ie: gears, truck, wheel size, etc. make it useless.&lt;br /&gt;
}}&lt;br /&gt;
[[Category:Drivers]]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Template:Industry_News&amp;diff=30196</id>
		<title>Template:Industry News</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Template:Industry_News&amp;diff=30196"/>
		<updated>2007-05-31T21:01:25Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;31. 5. 2007: New [[fglrx]] driver version 8.37.6 [https://a248.e.akamai.net/f/674/9206/0/www2.ati.com/drivers/linux/linux_8.37.6.html released].&lt;br /&gt;
&lt;br /&gt;
18. 4. 2007: New [[fglrx]] driver version 8.36.5 [https://a248.e.akamai.net/f/674/9206/0/www2.ati.com/drivers/linux/linux_8.36.5.html released].  Now supports 2.6.20 series kernels.&lt;br /&gt;
&lt;br /&gt;
28. 3. 2007: New [[fglrx]] driver version 8.35.5 [https://a248.e.akamai.net/f/674/9206/0/www2.ati.com/drivers/linux/linux_8.35.5.html released]&lt;br /&gt;
&lt;br /&gt;
1. 3. 2007: New Lenovo [http://www.lenovo.com/batteryprogram battery recall]: FRU 92P1131 (Sanyo 9-cell) may overheat when subject to strong impacts&lt;br /&gt;
&lt;br /&gt;
21. 2. 2007: New [[fglrx]] driver 8.34.8 [https://a248.e.akamai.net/f/674/9206/0/www2.ati.com/drivers/linux/linux_8.34.8.html#182529 released]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Template:Industry_News&amp;diff=30195</id>
		<title>Template:Industry News</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Template:Industry_News&amp;diff=30195"/>
		<updated>2007-05-31T21:01:03Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;31. 5. 2007: New [[fglrx]] driver version 8.37.6 [https://a248.e.akamai.net/f/674/9206/0/www2.ati.com/drivers/linux/linux_8.37.6.html].&lt;br /&gt;
&lt;br /&gt;
18. 4. 2007: New [[fglrx]] driver version 8.36.5 [https://a248.e.akamai.net/f/674/9206/0/www2.ati.com/drivers/linux/linux_8.36.5.html released].  Now supports 2.6.20 series kernels.&lt;br /&gt;
&lt;br /&gt;
28. 3. 2007: New [[fglrx]] driver version 8.35.5 [https://a248.e.akamai.net/f/674/9206/0/www2.ati.com/drivers/linux/linux_8.35.5.html released]&lt;br /&gt;
&lt;br /&gt;
1. 3. 2007: New Lenovo [http://www.lenovo.com/batteryprogram battery recall]: FRU 92P1131 (Sanyo 9-cell) may overheat when subject to strong impacts&lt;br /&gt;
&lt;br /&gt;
21. 2. 2007: New [[fglrx]] driver 8.34.8 [https://a248.e.akamai.net/f/674/9206/0/www2.ati.com/drivers/linux/linux_8.34.8.html#182529 released]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=ThinkWiki_talk:Support&amp;diff=30165</id>
		<title>ThinkWiki talk:Support</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=ThinkWiki_talk:Support&amp;diff=30165"/>
		<updated>2007-05-30T08:33:01Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: does spamming start again?&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;When returning from PayPal, I'm sent to http://www.thinkwiki.org/ThinkWiki:Thanks?=Return+To+Merchant, which generates a 404.&lt;br /&gt;
&lt;br /&gt;
== ibm-acpi donations ==&lt;br /&gt;
&lt;br /&gt;
[[ibm-acpi]] does not need any donations of funds. ThinkWiki it is a damn great resource and it has far more use for the funding than ibm-acpi, so if you were considering donating money to ibm-acpi, please donate to ThinkWiki instead!&lt;br /&gt;
&lt;br /&gt;
--[[User:Hmh|hmh]] 21:33, 8 January 2007 (CET) (ibm-acpi maintainer)&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Category:Debian&amp;diff=30090</id>
		<title>Category:Debian</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Category:Debian&amp;diff=30090"/>
		<updated>2007-05-26T11:01:03Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: fix typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|style=&amp;quot;vertical-align:middle;padding-left:20px;padding-right:20px;width:10px;&amp;quot; | [[Image:Debian_logo.png]]&lt;br /&gt;
|style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 0; margin-right:10px; border: 1px solid #dfdfdf; padding: 0em 1em 1em 1em; background-color:#F8F8FF; align:right;&amp;quot;&amp;gt;&lt;br /&gt;
=== Debian ===&lt;br /&gt;
This page gives an introduction to Debian [http://www.debian.org] and an overview of related articles.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
{| style=&amp;quot;margin-left:20px;margin-right:20px;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
__NOTOC__&lt;br /&gt;
=== What is Debian? ===&lt;br /&gt;
Debian is a free operating system (OS) for your computer. An operating system is the set of basic programs and utilities that make your computer run. Debian uses the Linux kernel (the core of an operating system), but most of the basic OS tools come from the GNU project; hence the name GNU/Linux.&lt;br /&gt;
&lt;br /&gt;
Debian GNU/Linux provides more than a pure OS: it comes with more than 15490 packages, precompiled software bundled up in a nice format for easy installation on your machine.&lt;br /&gt;
&lt;br /&gt;
=== Debian Version [http://www.debian.org/releases/] ===&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;
! colspan=2 | Version     &lt;br /&gt;
! colspan=2 | Documentation               &lt;br /&gt;
! Comments &lt;br /&gt;
|- style=&amp;quot;text-align:left;vertical-align:top;&amp;quot;&lt;br /&gt;
|| &amp;lt;tt&amp;gt;status&amp;lt;/tt&amp;gt; || &amp;lt;tt&amp;gt;Name&amp;lt;/tt&amp;gt;&lt;br /&gt;
|| &amp;lt;tt&amp;gt;Release&amp;lt;br /&amp;gt;Information&amp;lt;/tt&amp;gt;&lt;br /&gt;
|| &amp;lt;tt&amp;gt;Installation&amp;lt;br /&amp;gt; Guide&amp;lt;/tt&amp;gt;&lt;br /&gt;
|| &lt;br /&gt;
|- style=&amp;quot;background-color:#8f8&amp;quot;&lt;br /&gt;
|| '''stable''' || ''' ''Etch 4.0'' '''&lt;br /&gt;
|| [http://www.debian.org/releases/stable/] &lt;br /&gt;
|| [http://www.debian.org/releases/stable/installmanual]&lt;br /&gt;
|| The stable version IS the version you should install.&lt;br /&gt;
|- style=&amp;quot;color:#000; background-color:#dfd&amp;quot;&lt;br /&gt;
|| oldstable || ''Sarge 3.1''&lt;br /&gt;
|| [http://www.debian.org/releases/sarge/] &lt;br /&gt;
|| [http://www.debian.org/releases/sarge/installmanual]&lt;br /&gt;
|| The last stable version. You should consider upgrading. (It's still supported)&lt;br /&gt;
|- style=&amp;quot;color:#333; background-color:#ddd&amp;quot;&lt;br /&gt;
|| obsolete || ''Woody 3.0''&lt;br /&gt;
|| [http://www.debian.org/releases/woody/] &lt;br /&gt;
|| [http://www.debian.org/releases/woody/installmanual]&lt;br /&gt;
|| Obsolete stable version. Don't Install it.&lt;br /&gt;
|- style=&amp;quot;color:#333; background-color:#ddd&amp;quot;&lt;br /&gt;
|| obsolete || ''Potato 2.2''&lt;br /&gt;
|| [http://www.debian.org/releases/potato/] &lt;br /&gt;
|| [http://www.debian.org/releases/potato/installmanual]&lt;br /&gt;
|| Obsolete stable version. Don't Install it.&lt;br /&gt;
|-&lt;br /&gt;
! colspan=5 | Development version&lt;br /&gt;
|- style=&amp;quot;color:#333; background-color:#ddd&amp;quot;&lt;br /&gt;
|| '''testing''' || ''Lenny''&lt;br /&gt;
|| [http://www.debian.org/releases/testing/] &lt;br /&gt;
|| n.a&lt;br /&gt;
|| Development for next stable version. Not for production purpose.&lt;br /&gt;
|- style=&amp;quot;color:#333; background-color:#ddd&amp;quot;&lt;br /&gt;
|| '''unstable''' || ''sid''&lt;br /&gt;
|| [http://www.debian.org/releases/unstable/] &lt;br /&gt;
|| n.a&lt;br /&gt;
|| Early test of package. Not for production purpose.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Debian Support [http://www.debian.org/support] ===&lt;br /&gt;
* Debian Mailing Lists with archives [http://lists.debian.org/]&lt;br /&gt;
** [http://lists.debian.org/debian-laptop/ Debian-Laptop] - Installing, updating and using laptops with Debian.&lt;br /&gt;
** [http://lists.debian.org/debian-user/ Debian-User] - Support for Debian users who speak English.&lt;br /&gt;
* [http://wiki.debian.org Debian Wiki]&lt;br /&gt;
* [http://www.debian.org/support#irc Debian Irc Channel]&lt;br /&gt;
* [http://www.debian.org/doc/ Debian Documentation Hub]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Distributions]]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Default_meanings_of_special_keys&amp;diff=29888</id>
		<title>Default meanings of special keys</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Default_meanings_of_special_keys&amp;diff=29888"/>
		<updated>2007-05-20T15:51:48Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: /* R Series */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| width=&amp;quot;100%&amp;quot; columns=&amp;quot;2&amp;quot;&lt;br /&gt;
|style=&amp;quot;vertical-align:top;padding-right:20px;width:10px;white-space:nowrap;&amp;quot; rowspan=&amp;quot;2&amp;quot; | __TOC__&lt;br /&gt;
|style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
The following table lists the associated functionalities for special keys on ThinkPads.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; {{prettytable}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| Models&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|F1}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|F2}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|F3}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|F4}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|F5}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|F6}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|F7}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|F8}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|F9}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|F10}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|F11}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|F12}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|Home}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|End}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|PageUp}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|Space}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|left}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|right}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|up}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|down}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=21 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===Numbered===&lt;br /&gt;
|-&lt;br /&gt;
| {{240}}, {{240X}}, 240Z&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{365C}}, {{365CD}}, {{365CS}}, {{365CSD}}, {{365E}}, {{365ED}}, {{365X}}, {{365XD}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{380}}, {{380D}}, {{380E}}, {{380ED}}, {{385D}}, {{385ED}}, {{380XD}}, {{385XD}}, {{380Z}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{390}}, {{390E}}, {{390X}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{560}}, {{560E}}, {{560X}}, {{560Z}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{570}}, {{570E}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{600}}, {{600E}}, {{600X}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{750}}, {{750CS}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{755C}}, {{755CS}}, {{755CE}}, {{755CSE}}, {{755CD}}, {{755CX}}, {{755CV}}, {{755CDV}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{760C}}, {{760CD}}, {{760L}}, {{760LD}}, {{760E}}, {{760ED}}, {{760EL}}, {{760ELD}}, {{760XD}}, {{765D}}, {{765L}}, {{760XL}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{770}}, {{770E}}, {{770ED}}, {{770X}}, {{770Z}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=21 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===i Series===&lt;br /&gt;
|-&lt;br /&gt;
| {{i1720}}, {{i1721}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=21 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===A Series===&lt;br /&gt;
|-&lt;br /&gt;
| {{A20m}}, {{A20p}}, {{A21e}}, {{A21m}}, {{A21p}}, {{A22e}}, {{A22m}}, {{A22m}}, {{A22p}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{A30}}, {{A30p}}, {{A31}}, {{A31p}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=21 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
===G Series===&lt;br /&gt;
|-&lt;br /&gt;
| {{G40}}, {{G41}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=21 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
===R Series===&lt;br /&gt;
|-&lt;br /&gt;
| {{R30}}, {{R31}}, {{R32}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{R40}}, {{R40e}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{R50}}, {{R50e}}, {{R50p}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{R51}}, {{R51e}}, {{R52}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| blank screen&lt;br /&gt;
| suspend to ram&lt;br /&gt;
| switch wireless/bluetooth&lt;br /&gt;
|&lt;br /&gt;
| switch display&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| suspend to disk&lt;br /&gt;
| brightness increase&lt;br /&gt;
| brightness decrease&lt;br /&gt;
| thinklight&lt;br /&gt;
| zoom&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{R60}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=21 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===T Series===&lt;br /&gt;
|-&lt;br /&gt;
| {{T20}}, {{T21}}, {{T22}}, {{T23}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{T30}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{T40}}, {{T40p}}, {{T41}}, {{T41p}}, {{T42}}, {{T42p}}, {{T43}}, {{T43p}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| blank screen&lt;br /&gt;
| suspend to ram&lt;br /&gt;
| switch wireless&lt;br /&gt;
|&lt;br /&gt;
| switch display&lt;br /&gt;
| zoom(?)&lt;br /&gt;
| (un)dock&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| suspend to disk&lt;br /&gt;
| brightness increase&lt;br /&gt;
| brightness decrease&lt;br /&gt;
| thinklight&lt;br /&gt;
| zoom&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{T60}}, {{T60p}}&lt;br /&gt;
|&lt;br /&gt;
| lock screen&lt;br /&gt;
| energy manager/ settings&lt;br /&gt;
| suspend to ram&lt;br /&gt;
| wireless/bluetooth&lt;br /&gt;
|&lt;br /&gt;
| switch display&lt;br /&gt;
| control ultranav&lt;br /&gt;
| eject&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| suspend to disk&lt;br /&gt;
| brightness up&lt;br /&gt;
| brightness down&lt;br /&gt;
| thinklight&lt;br /&gt;
| zoom&lt;br /&gt;
| last track&lt;br /&gt;
| next track&lt;br /&gt;
| stop&lt;br /&gt;
| play / pause&lt;br /&gt;
|-&lt;br /&gt;
! colspan=21 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===X Series===&lt;br /&gt;
|-&lt;br /&gt;
| {{X20}}, {{X21}}, {{X22}}, {{X23}}, {{X24}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{X30}}, {{X31}}, {{X32}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{X40}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{X41}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{X41T}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{X60}}, {{X60s}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{X60t}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=21 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===Z Series===&lt;br /&gt;
|-&lt;br /&gt;
| {{Z60m}}, {{Z60t}}&lt;br /&gt;
|&lt;br /&gt;
| lock desktop&lt;br /&gt;
| show state of battery&lt;br /&gt;
| suspend to ram (sleep)&lt;br /&gt;
| toggle bluetooth&lt;br /&gt;
| &lt;br /&gt;
| switch to external vga-output&lt;br /&gt;
| switch between trackpoint and touchpad&lt;br /&gt;
| eject dock&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| suspend to disk (hibernate)&lt;br /&gt;
| brightness increase&lt;br /&gt;
| brightness decrease&lt;br /&gt;
| thinklight&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{Z61e}}, {{Z61m}}, {{Z61p}}, {{Z61t}}&lt;br /&gt;
|&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| suspend to ram&lt;br /&gt;
| switch wireless&lt;br /&gt;
| &lt;br /&gt;
| switch display&lt;br /&gt;
| switch trackpoint / touchpad&lt;br /&gt;
| (un)dock&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| suspend to disk&lt;br /&gt;
| brightness increase&lt;br /&gt;
| brightness decrease&lt;br /&gt;
| thinklight&lt;br /&gt;
| zoom&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=21 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===Other===&lt;br /&gt;
|-&lt;br /&gt;
| {{TransNote}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Tables]]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Default_meanings_of_special_keys&amp;diff=29887</id>
		<title>Default meanings of special keys</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Default_meanings_of_special_keys&amp;diff=29887"/>
		<updated>2007-05-20T15:50:52Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: /* R Series */ added R52&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| width=&amp;quot;100%&amp;quot; columns=&amp;quot;2&amp;quot;&lt;br /&gt;
|style=&amp;quot;vertical-align:top;padding-right:20px;width:10px;white-space:nowrap;&amp;quot; rowspan=&amp;quot;2&amp;quot; | __TOC__&lt;br /&gt;
|style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
The following table lists the associated functionalities for special keys on ThinkPads.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; {{prettytable}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| Models&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|F1}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|F2}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|F3}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|F4}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|F5}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|F6}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|F7}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|F8}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|F9}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|F10}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|F11}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|F12}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|Home}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|End}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|PageUp}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|Space}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|left}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|right}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|up}}&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot;| {{key|Fn}}{{key|down}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=21 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===Numbered===&lt;br /&gt;
|-&lt;br /&gt;
| {{240}}, {{240X}}, 240Z&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{365C}}, {{365CD}}, {{365CS}}, {{365CSD}}, {{365E}}, {{365ED}}, {{365X}}, {{365XD}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{380}}, {{380D}}, {{380E}}, {{380ED}}, {{385D}}, {{385ED}}, {{380XD}}, {{385XD}}, {{380Z}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{390}}, {{390E}}, {{390X}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{560}}, {{560E}}, {{560X}}, {{560Z}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{570}}, {{570E}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{600}}, {{600E}}, {{600X}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{750}}, {{750CS}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{755C}}, {{755CS}}, {{755CE}}, {{755CSE}}, {{755CD}}, {{755CX}}, {{755CV}}, {{755CDV}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{760C}}, {{760CD}}, {{760L}}, {{760LD}}, {{760E}}, {{760ED}}, {{760EL}}, {{760ELD}}, {{760XD}}, {{765D}}, {{765L}}, {{760XL}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{770}}, {{770E}}, {{770ED}}, {{770X}}, {{770Z}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=21 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===i Series===&lt;br /&gt;
|-&lt;br /&gt;
| {{i1720}}, {{i1721}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=21 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===A Series===&lt;br /&gt;
|-&lt;br /&gt;
| {{A20m}}, {{A20p}}, {{A21e}}, {{A21m}}, {{A21p}}, {{A22e}}, {{A22m}}, {{A22m}}, {{A22p}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{A30}}, {{A30p}}, {{A31}}, {{A31p}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=21 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
===G Series===&lt;br /&gt;
|-&lt;br /&gt;
| {{G40}}, {{G41}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=21 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
===R Series===&lt;br /&gt;
|-&lt;br /&gt;
| {{R30}}, {{R31}}, {{R32}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{R40}}, {{R40e}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{R50}}, {{R50e}}, {{R50p}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{R51}}, {{R51e}}, {{R52}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| blank screen&lt;br /&gt;
| suspend to ram&lt;br /&gt;
| switch wireless/bluetooth&lt;br /&gt;
|&lt;br /&gt;
| switch display&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| suspend to disk&lt;br /&gt;
| brightness increase&lt;br /&gt;
| brightness decrease&lt;br /&gt;
| thinklight&lt;br /&gt;
| zoom&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{T60}}, {{T60p}}&lt;br /&gt;
|&lt;br /&gt;
| lock screen&lt;br /&gt;
| energy manager/ settings&lt;br /&gt;
| suspend to ram&lt;br /&gt;
| wireless/bluetooth&lt;br /&gt;
|&lt;br /&gt;
| switch display&lt;br /&gt;
| control ultranav&lt;br /&gt;
| eject&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| suspend to disk&lt;br /&gt;
| brightness up&lt;br /&gt;
| brightness down&lt;br /&gt;
| thinklight&lt;br /&gt;
| zoom&lt;br /&gt;
| last track&lt;br /&gt;
| next track&lt;br /&gt;
| stop&lt;br /&gt;
| play / pause&lt;br /&gt;
|-&lt;br /&gt;
| {{R60}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=21 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===T Series===&lt;br /&gt;
|-&lt;br /&gt;
| {{T20}}, {{T21}}, {{T22}}, {{T23}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{T30}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{T40}}, {{T40p}}, {{T41}}, {{T41p}}, {{T42}}, {{T42p}}, {{T43}}, {{T43p}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| blank screen&lt;br /&gt;
| suspend to ram&lt;br /&gt;
| switch wireless&lt;br /&gt;
|&lt;br /&gt;
| switch display&lt;br /&gt;
| zoom(?)&lt;br /&gt;
| (un)dock&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| suspend to disk&lt;br /&gt;
| brightness increase&lt;br /&gt;
| brightness decrease&lt;br /&gt;
| thinklight&lt;br /&gt;
| zoom&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{T60}}, {{T60p}}&lt;br /&gt;
|&lt;br /&gt;
| lock screen&lt;br /&gt;
| energy manager/ settings&lt;br /&gt;
| suspend to ram&lt;br /&gt;
| wireless/bluetooth&lt;br /&gt;
|&lt;br /&gt;
| switch display&lt;br /&gt;
| control ultranav&lt;br /&gt;
| eject&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| suspend to disk&lt;br /&gt;
| brightness up&lt;br /&gt;
| brightness down&lt;br /&gt;
| thinklight&lt;br /&gt;
| zoom&lt;br /&gt;
| last track&lt;br /&gt;
| next track&lt;br /&gt;
| stop&lt;br /&gt;
| play / pause&lt;br /&gt;
|-&lt;br /&gt;
! colspan=21 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===X Series===&lt;br /&gt;
|-&lt;br /&gt;
| {{X20}}, {{X21}}, {{X22}}, {{X23}}, {{X24}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{X30}}, {{X31}}, {{X32}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{X40}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{X41}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{X41T}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{X60}}, {{X60s}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{X60t}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=21 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===Z Series===&lt;br /&gt;
|-&lt;br /&gt;
| {{Z60m}}, {{Z60t}}&lt;br /&gt;
|&lt;br /&gt;
| lock desktop&lt;br /&gt;
| show state of battery&lt;br /&gt;
| suspend to ram (sleep)&lt;br /&gt;
| toggle bluetooth&lt;br /&gt;
| &lt;br /&gt;
| switch to external vga-output&lt;br /&gt;
| switch between trackpoint and touchpad&lt;br /&gt;
| eject dock&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| suspend to disk (hibernate)&lt;br /&gt;
| brightness increase&lt;br /&gt;
| brightness decrease&lt;br /&gt;
| thinklight&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| {{Z61e}}, {{Z61m}}, {{Z61p}}, {{Z61t}}&lt;br /&gt;
|&lt;br /&gt;
| ?&lt;br /&gt;
| ?&lt;br /&gt;
| suspend to ram&lt;br /&gt;
| switch wireless&lt;br /&gt;
| &lt;br /&gt;
| switch display&lt;br /&gt;
| switch trackpoint / touchpad&lt;br /&gt;
| (un)dock&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
| suspend to disk&lt;br /&gt;
| brightness increase&lt;br /&gt;
| brightness decrease&lt;br /&gt;
| thinklight&lt;br /&gt;
| zoom&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
! colspan=21 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
===Other===&lt;br /&gt;
|-&lt;br /&gt;
| {{TransNote}}&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Tables]]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=How_to_hotswap_Ultrabay_devices&amp;diff=29880</id>
		<title>How to hotswap Ultrabay devices</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=How_to_hotswap_Ultrabay_devices&amp;diff=29880"/>
		<updated>2007-05-19T12:20:00Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: /* Scripts for hotswapping */ give file names more clear names&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following discusses hotswap (AKA &amp;quot;hotplug&amp;quot;) of devices in the [[UltraBay]].&lt;br /&gt;
&lt;br /&gt;
==When using the &amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt; driver==&lt;br /&gt;
The following applies if you use the &amp;lt;tt&amp;gt;ide-disk&amp;lt;/tt&amp;gt; driver for the UltraBay device.&lt;br /&gt;
&lt;br /&gt;
Hotswapping is supposed to be supported as well, using either hdparm/[http://packages.debian.org/unstable/admin/hotswap Debian hotswap] or [[lt_hotswap]] to (un)register IDE devices. The latter is the recommended method with kernels from 2.6, since it will leave DMA working. However, for recent models (R52, T43, X41, Z60 and later) no method is known to work while maintaining DMA support; see [[Problems with SATA and Linux]].&lt;br /&gt;
&lt;br /&gt;
Only IDE devices (HDD's, optical drives, zip drives) require special treatment - batteries, floppies and other devices can just be pulled from the bay, provided they are not mounted or in use at the time. However, you should still power them down first using the [[ibm-acpi]] eject function.&lt;br /&gt;
&lt;br /&gt;
The [[ibm-acpi]] kernel module has an eject function ({{cmdroot|echo eject &amp;gt; /proc/acpi/ibm/bay}}). This only manages the ACPI calls to power down the device and the bay. It does not actually unregister the device from the IDE driver. {{cmdroot|cat /proc/acpi/ibm/bay}} shows &amp;quot;unoccupied&amp;quot; unless an IDE device is present, but the eject function still works and should still be used.&lt;br /&gt;
&lt;br /&gt;
To unregister the device, you can either use the [http://packages.debian.org/unstable/admin/hotswap Debian hotswap] package, or [[lt_hotswap]].&lt;br /&gt;
&lt;br /&gt;
[http://packages.debian.org/unstable/admin/hotswap Debian hotswap] also allows the drive to be swapped as a normal user by default, which is useful. You should use &amp;lt;tt&amp;gt;hotswap&amp;lt;/tt&amp;gt; to unregister the device and then {{cmdroot|echo eject &amp;gt; /proc/acpi/ibm/bay}}. However, if you use this method on a 2.6 kernel, you will lose DMA support for the reinserted drive. This is due to kernel issues. This method was reported to work on a ThinkPad {{T23}} (kernels 2.6.8.1, 2.6.14.2 and 2.6.15-arch) and {{T42}} (kernel 2.6.13), but fails on a ThinkPad {{T43}} (kernel 2.6.14.3).&lt;br /&gt;
&lt;br /&gt;
[[lt_hotswap]] is now the recommended method to un- and reregister the IDE device. It installs as a kernel module and has support for automatically unregistering (if loaded with the auto_eject=1 option) the device when the eject event is generated by [[ibm-acpi]]. It will leave DMA support intact. It has supported to work on a ThinkPad {{T22}} and {{T40}} and should work with many other models (but not recent models which require the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver for disk DMA support). With the [[lt_hotswap]] kernel module loaded, run: {{cmdroot|modprobe -r ide_cd &amp;amp;&amp;amp; modprobe -r cdrom &amp;amp;&amp;amp; echo &amp;quot;MSTR eject&amp;quot; &amp;gt; /proc/acpi/lths}}&lt;br /&gt;
&lt;br /&gt;
===HAL support===&lt;br /&gt;
&lt;br /&gt;
HAL support also can also be configured To do so, create the file {{path|/etc/hal/fdi/information/10-ultrabay.fdi}} as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt; &amp;lt;!-- -*- SGML -*- --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;deviceinfo version=&amp;quot;0.2&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;device&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- UltraBay Devices --&amp;gt;&lt;br /&gt;
    &amp;lt;match key=&amp;quot;storage.bus&amp;quot; string=&amp;quot;ide&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;match key=&amp;quot;storage.physical_device&amp;quot; string=&amp;quot;/org/freedesktop/Hal/devices/pci_8086_24ca_ide_1_0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;merge key=&amp;quot;storage.hotpluggable&amp;quot; type=&amp;quot;bool&amp;quot;&amp;gt;true&amp;lt;/merge&amp;gt;&lt;br /&gt;
      &amp;lt;/match&amp;gt;&lt;br /&gt;
    &amp;lt;/match&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/device&amp;gt;&lt;br /&gt;
&amp;lt;/deviceinfo&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
For more details see HAL section for ata driver.&lt;br /&gt;
&lt;br /&gt;
==When using the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver==&lt;br /&gt;
The following applies when using the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver, which is necessary for many recent ThinkPad models that use an [[Intel ICH6-M]] controller. See also [[Problems with SATA and Linux]]. &lt;br /&gt;
&lt;br /&gt;
Mainline kernels before 2.6.18 cannot reliably recognize newly (re-)inserted UltraBay drives without a reboot. There are experimental hotplug patches against pre-2.6.18 mainline kernels [http://home-tj.org/wiki/index.php/Libata-tj-stable here].&lt;br /&gt;
&lt;br /&gt;
* Available hotplug patches&lt;br /&gt;
**[http://home-tj.org/files/libata-tj-stable/libata-tj-2.6.16.16-20060512.tar.bz2 Patch tarball against 2.6.16.16] ([http://lwn.net/Articles/183407/ Announce])&lt;br /&gt;
**[http://home-tj.org/files/libata-tj-stable/libata-tj-2.6.17-20060625-1.tar.bz2 Patch tarball against 2.6.17/2.6.17.1] ([http://article.gmane.org/gmane.linux.ide/11598 Announce])&lt;br /&gt;
**[http://home-tj.org/files/libata-tj-stable/libata-tj-2.6.17.4-20060710.tar.bz2 Patch tarball against 2.6.17.4]&lt;br /&gt;
**[http://whoopie.gmxhome.de/linux/patches/2.6.17.14-tj/00-libata-tj-2.6.17.4-20060710.patch Patch against 2.6.17.14]&lt;br /&gt;
&lt;br /&gt;
* Confirmed to work on&lt;br /&gt;
**ThinkPad {{T30}}&lt;br /&gt;
**ThinkPad {{T43}}, {{T43p}}&lt;br /&gt;
**ThinkPad {{R52}}&lt;br /&gt;
&lt;br /&gt;
For 2.6.18 kernels, or older kernels that were patched to support &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; hotplug (don't try it otherwise!), one can issue the following after inserting an UltraBay drive to rescan the port:&lt;br /&gt;
 {{cmdroot|echo 0 0 0 &amp;gt;  /sys/class/scsi_host/host1/scan}}&lt;br /&gt;
The inserted drive should now be recognized by the kernel, and appropriate {{path|/dev/*}} entries created automatically (e.g., by &amp;lt;tt&amp;gt;udev&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
You can safely shut down the drive by issuing the following (this works with all recent mainline kernels):&lt;br /&gt;
 {{cmdroot|echo 1 &amp;gt; /sys/class/scsi_device/1\:0\:0\:0/device/delete}}&lt;br /&gt;
 {{cmdroot|echo eject &amp;gt;  /proc/acpi/ibm/bay}}&lt;br /&gt;
The drive can now be ejected.&lt;br /&gt;
&lt;br /&gt;
===Scripts for hotswapping===&lt;br /&gt;
&lt;br /&gt;
The following scripts and [[acpid]] daemon configuration files do the following:&lt;br /&gt;
* Automatically unmounts the relevant filesystems and power off the UltraBay when the UltraBay eject lever is released. Screams if some filesystem can't be unmounted.&lt;br /&gt;
* Rescans the UltraBay port when then UltraBay eject lever is pushed back in.&lt;br /&gt;
&lt;br /&gt;
They assumes you're using the &amp;lt;tt&amp;gt;ata_piix&amp;lt;/tt&amp;gt; driver with an appropriate kernel (see above).&lt;br /&gt;
&lt;br /&gt;
Create {{path|/usr/local/sbin/ultrabay_insert}} with permissions 755:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
echo 12 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
sync&lt;br /&gt;
echo 0 0 0 &amp;gt; /sys/class/scsi_host/host1/scan&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create {{path|/usr/local/sbin/ultrabay_eject}} with permissions 755:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
ULTRABAY_SYSDIR='/sys/class/scsi_device/1:0:0:0/device'&lt;br /&gt;
shopt -s nullglob&lt;br /&gt;
&lt;br /&gt;
# Umount the filesystem(s) backed by the given major:minor device(s)&lt;br /&gt;
unmount_rdev() { perl - &amp;quot;$@&amp;quot; &amp;lt;&amp;lt;'EOPERL'  # let's do it in Perl&lt;br /&gt;
	for $major_minor (@ARGV) {&lt;br /&gt;
		$major_minor =~ m/^(\d+):(\d+)$/ or die;&lt;br /&gt;
		push(@tgt_rdevs, ($1&amp;lt;&amp;lt;8)|$2);&lt;br /&gt;
	}&lt;br /&gt;
        # Sort by reverse length of mount point, to unmount sub-directories first&lt;br /&gt;
        open MOUNTS,&amp;quot;&amp;lt;/proc/mounts&amp;quot; or die &amp;quot;$!&amp;quot;;&lt;br /&gt;
        @mounts=sort { length($b-&amp;gt;[1]) &amp;lt;=&amp;gt; length($a-&amp;gt;[1]) } map { [ split ] } &amp;lt;MOUNTS&amp;gt;;&lt;br /&gt;
        close MOUNTS;&lt;br /&gt;
        foreach $m (@mounts) {&lt;br /&gt;
                ($dev,$dir)=@$m;&lt;br /&gt;
		next unless -b $dev;  $rdev=(stat($dev))[6];&lt;br /&gt;
		next unless grep($_==$rdev, @tgt_rdevs);&lt;br /&gt;
		system(&amp;quot;umount&amp;quot;,&amp;quot;-v&amp;quot;,&amp;quot;$dir&amp;quot;)==0  or  $bad=1;&lt;br /&gt;
	}&lt;br /&gt;
	exit 1 if $bad;&lt;br /&gt;
EOPERL&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
# Get the UltraBay's /dev/foo block device node&lt;br /&gt;
ultrabay_dev_node() {&lt;br /&gt;
	UDEV_PATH=&amp;quot;`readlink -e &amp;quot;$ULTRABAY_SYSDIR/block:&amp;quot;*`&amp;quot; || return 1&lt;br /&gt;
	UDEV_NAME=&amp;quot;`udevinfo -q name -p $UDEV_PATH`&amp;quot; || return 1&lt;br /&gt;
	echo /dev/$UDEV_NAME&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if [ -d $ULTRABAY_SYSDIR ]; then&lt;br /&gt;
	sync&lt;br /&gt;
	# Unmount filesystems backed by this device&lt;br /&gt;
	unmount_rdev `cat $ULTRABAY_SYSDIR/block\:*/dev     \&lt;br /&gt;
	                  $ULTRABAY_SYSDIR/block\:*/*/dev`  \&lt;br /&gt;
	|| {&lt;br /&gt;
		echo 10 &amp;gt; /proc/acpi/ibm/beep;  # error tone&lt;br /&gt;
		exit 1;&lt;br /&gt;
	}&lt;br /&gt;
        sync&lt;br /&gt;
        # Nicely power off the device&lt;br /&gt;
	DEVNODE=`ultrabay_dev_node` &amp;amp;&amp;amp; hdparm -Y $DEVNODE&lt;br /&gt;
        # Let HAL+KDE notice the unmount and let the disk spin down&lt;br /&gt;
	sleep 0.5&lt;br /&gt;
	# Unregister this SCSI device:&lt;br /&gt;
	sync&lt;br /&gt;
	echo 1 &amp;gt; $ULTRABAY_SYSDIR/delete&lt;br /&gt;
fi&lt;br /&gt;
sync&lt;br /&gt;
# Turn off power to the UltraBay:&lt;br /&gt;
if [ -d /sys/devices/platform/bay.0 ]; then&lt;br /&gt;
	echo 1 &amp;gt; /sys/devices/platform/bay.0/eject&lt;br /&gt;
else&lt;br /&gt;
	echo eject &amp;gt; /proc/acpi/ibm/bay&lt;br /&gt;
fi&lt;br /&gt;
# Tell the user we're OK&lt;br /&gt;
echo 12 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/acpi/events/ultrabay-insert}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
event=ibm/bay MSTR 00000001 00000000&lt;br /&gt;
action=/usr/local/sbin/ultrabay_insert&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create {{path|/etc/acpi/events/ultrabay-eject}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
event=ibm/bay MSTR 00000003 00000000&lt;br /&gt;
action=/usr/local/sbin/ultrabay_eject&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Restart &amp;lt;tt&amp;gt;acpid&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===HAL support===&lt;br /&gt;
&lt;br /&gt;
Many programs, KDE included, rely on [[HAL]] to get notifications and information about device hotplugging. You need to tell HAL that devices connected the UltraBay port are hotpluggable. To do so, create the file {{path|/etc/hal/fdi/information/10-ultrabay.fdi}} as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt; &amp;lt;!-- -*- SGML -*- --&amp;gt; &lt;br /&gt;
&lt;br /&gt;
&amp;lt;deviceinfo version=&amp;quot;0.2&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;device&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;!-- UltraBay Devices --&amp;gt;&lt;br /&gt;
    &amp;lt;match key=&amp;quot;storage.bus&amp;quot; string=&amp;quot;scsi&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;match key=&amp;quot;storage.physical_device&amp;quot; string=&amp;quot;/org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_scsi_device_lun0&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;merge key=&amp;quot;storage.hotpluggable&amp;quot; type=&amp;quot;bool&amp;quot;&amp;gt;true&amp;lt;/merge&amp;gt;&lt;br /&gt;
      &amp;lt;/match&amp;gt;&lt;br /&gt;
    &amp;lt;/match&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;/device&amp;gt;&lt;br /&gt;
&amp;lt;/deviceinfo&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Details====&lt;br /&gt;
&lt;br /&gt;
By default, HAL doesn't know that UltraBay devices are hotpluggable:&lt;br /&gt;
&lt;br /&gt;
 # PHYSDEV=/org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_scsi_device_lun0&lt;br /&gt;
 # UDI=`hal-find-by-property --key storage.physical_device --string $PHYSDEV` || echo Failed&lt;br /&gt;
 # hal-get-property --udi $UDI --key block.device&lt;br /&gt;
 /dev/sdb&lt;br /&gt;
 # hal-get-property --udi $UDI --key storage.hotpluggable&lt;br /&gt;
 false&lt;br /&gt;
&lt;br /&gt;
After creating {{path|/etc/hal/fdi/information/10-ultrabay.fdi}} as above and re-plugging the device, it will get marked correctly:&lt;br /&gt;
&lt;br /&gt;
 # PHYSDEV=/org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_scsi_device_lun0&lt;br /&gt;
 # UDI=`hal-find-by-property --key storage.physical_device --string $PHYSDEV` || echo Failed&lt;br /&gt;
 # hal-get-property --udi $UDI --key block.device&lt;br /&gt;
 /dev/sdb&lt;br /&gt;
 # hal-get-property --udi $UDI --key storage.hotpluggable&lt;br /&gt;
 true&lt;br /&gt;
&lt;br /&gt;
The string &amp;quot;8086_2653&amp;quot; gives the PCI ID of the [[Intel 82801FBM]] southbridge. If your model has a different southbridge, or the UltraBay is attached to a different port, then you can find the appropriate &amp;lt;tt&amp;gt;storage.physical_device&amp;lt;/tt&amp;gt; value by finding out the block device of the currently running UltraBay device (&amp;lt;tt&amp;gt;/dev/sdb&amp;lt;/tt&amp;gt; in the following example) and then running:&lt;br /&gt;
&lt;br /&gt;
 # DEVICE=/dev/sdb&lt;br /&gt;
 # UDI=`hal-find-by-property --key block.device --string $DEVICE` || echo Failed&lt;br /&gt;
 # hal-get-property --udi $UDI --key storage.physical_device&lt;br /&gt;
 /org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_scsi_device_lun0&lt;br /&gt;
&lt;br /&gt;
If you have a different &amp;lt;tt&amp;gt;storage.physical_device&amp;lt;/tt&amp;gt; value, please report your findings.&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
|+ Known South Bridge PCI IDs&lt;br /&gt;
! ID !! ThinkPad model !! South Bridge chip&lt;br /&gt;
|-&lt;br /&gt;
| 8086_248a || 2366-83U (T30) || Intel 82801CAM IDE U100 (rev 2)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2653 || 2525FAG (X41) || Intel 82801FBM&lt;br /&gt;
|-&lt;br /&gt;
| 8086_24ca || 237358U (T40) || Intel 82801DBM (ICH4-M)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27c4 || X60           || Intel 82801GBM (ICH7 Family)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Other comments==&lt;br /&gt;
&lt;br /&gt;
If you are hot-swapping a hard disk on a disk tray, make sure the disk does not have a password set, otherwise it will not be recognized on reinsertion.&lt;br /&gt;
&lt;br /&gt;
[[Category:Scripts]]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Template_talk:Switch&amp;diff=29819</id>
		<title>Template talk:Switch</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Template_talk:Switch&amp;diff=29819"/>
		<updated>2007-05-16T09:45:04Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I won't pretend I understood what this template is for, but right after it got enabled, I get errors on the &amp;quot;Recent changes&amp;quot; page rendering, it looks like this now:&lt;br /&gt;
&lt;br /&gt;
      09:38:47 MediaWiki:Sidebar (diff; hist) . .  (+&amp;amp;amp;lt;rc-change-size&amp;amp;amp;gt;) . . Akw (Talk | contribs)&lt;br /&gt;
 N    07:44:22 Template:Switch (diff; hist) . . Akw (Talk | contribs)&lt;br /&gt;
&lt;br /&gt;
Notice the breakage: '''(+&amp;amp;amp;lt;rc-change-size&amp;amp;amp;gt;)'''. All newer changelog entries are also corrupted like that.&lt;br /&gt;
&lt;br /&gt;
The browser is IceWeasel (firefox) 2, under Debian GNU/Linux.&lt;br /&gt;
&lt;br /&gt;
--[[User:Hmh|hmh]] 02:45, 10 May 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
It seems that this only happens when not logged in.&lt;br /&gt;
&lt;br /&gt;
--[[User:Whoopie|Whoopie]] 11:44, 16 May 2007 (CEST)&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Template_talk:Switch&amp;diff=29818</id>
		<title>Template talk:Switch</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Template_talk:Switch&amp;diff=29818"/>
		<updated>2007-05-16T09:44:36Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I won't pretend I understood what this template is for, but right after it got enabled, I get errors on the &amp;quot;Recent changes&amp;quot; page rendering, it looks like this now:&lt;br /&gt;
&lt;br /&gt;
      09:38:47 MediaWiki:Sidebar (diff; hist) . .  (+&amp;amp;amp;lt;rc-change-size&amp;amp;amp;gt;) . . Akw (Talk | contribs)&lt;br /&gt;
 N    07:44:22 Template:Switch (diff; hist) . . Akw (Talk | contribs)&lt;br /&gt;
&lt;br /&gt;
Notice the breakage: '''(+&amp;amp;amp;lt;rc-change-size&amp;amp;amp;gt;)'''. All newer changelog entries are also corrupted like that.&lt;br /&gt;
&lt;br /&gt;
The browser is IceWeasel (firefox) 2, under Debian GNU/Linux.&lt;br /&gt;
&lt;br /&gt;
--[[User:Hmh|hmh]] 02:45, 10 May 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
It seems that this only happens when not logged in.&lt;br /&gt;
--[[User:Whoopie|Whoopie]] 11:44, 16 May 2007 (CEST)&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=HDAPS&amp;diff=29549</id>
		<title>HDAPS</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=HDAPS&amp;diff=29549"/>
		<updated>2007-04-29T10:09:06Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: /* Disk head parking */&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;
=== HDAPS - IBM Active Protection System Linux Driver ===&lt;br /&gt;
This is the Linux driver for monitoring the accelerometer known as [[Active Protection System|IBM Active Protection System]].&lt;br /&gt;
&lt;br /&gt;
The driver only enables reading of the acceleration data. It does '''not''' perform [[#Harddisk Protection|automatic disk head parking]]. But there are already some other useful [[#Applications|applications]] for HDAPS, using the {{path|/sys}} interface it provides.&lt;br /&gt;
&lt;br /&gt;
{{WARN|There are two versions of the hdaps driver, one in the Linux kernel mainline, and another provided by [[tp_smapi]].  '''Use of the tp_smapi version of hdaps is strongly recommended by the current hdaps developers.'''}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Features ===&lt;br /&gt;
*provides accelerometer values via sysfs&lt;br /&gt;
*provides a joystick type input device&lt;br /&gt;
&lt;br /&gt;
=== Project Homepage / Availability ===&lt;br /&gt;
*[http://hdaps.sourceforge.net/ Project Homepage]&lt;br /&gt;
*The driver is included in the 2.6-mm series of kernels since August, 26th 2005.&lt;br /&gt;
*The driver is now in the mainline (2.6.14).&lt;br /&gt;
*The [[tp_smapi]] package contains some patches to this driver. These are necessary for some recent models, and recommended for all.&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
A driver is included in recent Linux kernels and is actively maintained, but it is very inferior to the driver in tp_smapi.&lt;br /&gt;
&lt;br /&gt;
=== How to install the driver ===&lt;br /&gt;
If you are using a version of the Linux kernel &amp;lt; 2.6.14, please upgrade. I struggled long and hard to get the driver working with an old version of the kernel, and it was a mess. I gave up, upgraded my kernel, and one recompile later, HDAPS was working. &lt;br /&gt;
&lt;br /&gt;
For 2.6.18 kernel, T60 users have to edit hdaps_init() in drivers/hwmon/hdaps.c to include a HDAPS_DMI_MATCH_LENOVO(&amp;quot;ThinkPad T60&amp;quot;) line.&lt;br /&gt;
&lt;br /&gt;
Install the tp_smapi module if you experience problems with hdaps always reading out constant values of (0,0) [http://sourceforge.net/mailarchive/message.php?msg_id=15350314 refer]&lt;br /&gt;
&lt;br /&gt;
=== Harddisk Protection ===&lt;br /&gt;
As mentioned above, the hdaps kernel driver is only responsible for reading the accelerometer data and exporting it through the sysfs interface. In order to use this information to protect the disk, some additional steps are required.&lt;br /&gt;
&lt;br /&gt;
See [[How to protect the harddisk through APS]].&lt;br /&gt;
&lt;br /&gt;
=== Input device support ===&lt;br /&gt;
The hdaps driver in the lastest kernels (2.6.14 and later?) also exports a joystick type input device, which can be used by games.&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
====Disk head parking====&lt;br /&gt;
You will need the kernel patch and userspace daemon. The GUI monitoring is optional.&lt;br /&gt;
* Kernel patch (apply using 'patch -p1 -l &amp;lt; hdaps_xx.patch')&lt;br /&gt;
**[http://lwn.net/Articles/154923/ disk park patch] &amp;lt;tt&amp;gt;an experimental patch for parking the disk (Linux 2.6.14 for 2.6.15 see below)&amp;lt;/tt&amp;gt;&lt;br /&gt;
**[http://jenster.dyndns.org/files/blk_freeze-01-nodetection-for-2.6.14.patch disk park patch adapted for the t41p model] &amp;lt;tt&amp;gt; kernel 2.6.14 *([http://sourceforge.net/mailarchive/message.php?msg_id=13214288 capability detection disabled], no libata support)&amp;lt;/tt&amp;gt;&lt;br /&gt;
**[http://jenster.dyndns.org/files/blk_freeze-01-nodetection-for-2.6.15.patch disk park patch adapted for the t41p model] &amp;lt;tt&amp;gt; kernel 2.6.15 *([http://sourceforge.net/mailarchive/message.php?msg_id=13214288 capability detection disabled], no libata support)&amp;lt;/tt&amp;gt;&lt;br /&gt;
**[http://www.dresco.co.uk/hdaps/hdaps_protect.20060118.patch sata/ide disk protection patch for 2.6.15]&lt;br /&gt;
**[http://www.dresco.co.uk/hdaps/hdaps_protect.20060430.patch Latest sata/ide disk protection patch for 2.6.16]&lt;br /&gt;
**[http://whoopie.gmxhome.de/linux/patches/2.6.16-tj/05-hdaps_protect-20060430-for-2.6.16-tj.patch Latest sata/ide disk protection patch for use with the libata hotplug 2.6.16.16 patches] - See [[How_to_hotswap_UltraBay_devices]]&lt;br /&gt;
**[http://whoopie.gmxhome.de/linux/patches/2.6.17.14-tj/03-hdaps_protect-20060430-for-2.6.17-tj.patch Latest sata/ide disk protection patch for use with the libata hotplug 2.6.17.4 patches] - See [[How_to_hotswap_UltraBay_devices]]&lt;br /&gt;
**[http://exitzero.de/t41p-configs/hdaps_protect-2.6.17.1-20060625.patch Untested patch for 2.6.17.1]: see [http://thread.gmane.org/gmane.linux.drivers.hdaps.devel/708/focus=708]&lt;br /&gt;
**[http://www.dresco.co.uk/hdaps/hdaps_protect-2.6.18.3-2.patch Latest sata/ide disk protection patch for 2.6.18.3]&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.kernel/470413 Latest sata/ide disk protection patch for 2.6.19-rc6]&lt;br /&gt;
**[http://article.gmane.org/gmane.linux.drivers.hdaps.devel/993 Latest sata/ide disk protection patch for 2.6.20.x and 2.6.21]&lt;br /&gt;
*Userspace daemon&lt;br /&gt;
**[http://www.dresco.co.uk/hdaps/hdapsd-20070415.c  userspace parking daemon] (recommended version)&lt;br /&gt;
**[ftp://rohrmoser-engineering.de/pub/  hdapsd-&amp;lt;date&amp;gt;.c  is an improved version of the daemon, which computes an adaptive sensivity threshold] (fork of the &amp;quot;upstream&amp;quot; daemon)&lt;br /&gt;
*GUI monitoring&lt;br /&gt;
**[http://roy.marples.name/node/269 khdapmonitor] KDE System Tray Monitor&lt;br /&gt;
**[http://www.dresco.co.uk/hdaps/gnome-hdaps-applet-20060120.tar.gz gnome-hdaps-applet] visual display of disk protection status in gnome panel&lt;br /&gt;
See [[How to protect the harddisk through APS]] for more information.&lt;br /&gt;
&lt;br /&gt;
====Security &amp;amp; safety====&lt;br /&gt;
*[[Script for theft alarm using HDAPS]]&lt;br /&gt;
&lt;br /&gt;
====Tilt monitoring====&lt;br /&gt;
*[http://www.mulliner.org/collin/gkibm-acpi.php gkhdaps] &amp;lt;tt&amp;gt;a GKrellM applet displaying tilt data&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[http://rlove.org/log/2005082203.html gnome-tilt] &amp;lt;tt&amp;gt;a gnome applet showing tilt data&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Visualisation (of ThinkPad orientation)====&lt;br /&gt;
*[http://rlove.org/log/2005082401.html hdaps-gl] &amp;lt;tt&amp;gt;a little app animating a 3D-ThinkPad&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[https://sourceforge.net/project/showfiles.php?group_id=138242 hdapsgl-applet] &amp;lt;tt&amp;gt; a GNOME applet animating a 3D-ThinkPad&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[https://sourceforge.net/project/showfiles.php?group_id=138242 wmadhps] &amp;lt;tt&amp;gt;a WindowMaker DockApp animating a 3D-ThinkPad&amp;lt;/tt&amp;gt;&lt;br /&gt;
*[http://www.cs.cmu.edu/~ecc/gyro.tar.gz OpenGL gyroscope hack] &amp;lt;tt&amp;gt;keeps your display levelled when tilting the ThinkPad&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====Games====&lt;br /&gt;
*[http://icculus.org/neverball/ Neverball] is quite fun with HDAPS. (You'll need to have the HDAPS joystick device)&lt;br /&gt;
*Turn your ThinkPad into a Jedi Weapon (hey, it [http://isnoop.net/blog/2006/05/20/macsaber-turn-your-mac-into-a-jedi-weapon works for Mac laptops])&lt;br /&gt;
&lt;br /&gt;
====Other====&lt;br /&gt;
&lt;br /&gt;
*[http://blog.micampe.it/articles/2006/06/04/here-comes-the-smackpad smack.py] - switch workspace by smacking your laptop, inspired by the [http://blog.medallia.com/2006/05/smacbook_pro.html SmackBook] (uses EWMH)&lt;br /&gt;
**an [http://weblogs.mozillazine.org/gerv/archives/2006/09/stablilised_smackpad.html improved version] adds stabilization (by comparing smacks to previous ones, uses EWMH)&lt;br /&gt;
**another [http://pberndt.com/Programme/Linux/pyhdaps/index.html approach] adds stabilization (by requiring a certain type of value deflection, uses xmacroplay)&lt;br /&gt;
**[http://www.gnome.org/~fherrera/gtollina.c GTollina] is another smack program for use with compiz (video [http://www.gnome.org/~fherrera/blog/gtollina.html here]).&lt;br /&gt;
*[http://blog.odonnell.nu/61.html xmms-smack.py] - move through your xmms playlist by smacking, based on the two smack scripts above.&lt;br /&gt;
*[http://www-128.ibm.com/developerworks/linux/library/l-knockage.html?ca=dgr-lnxw02aKnockBasedCommands KnockBasedCommands] - Execute commands by tapping your laptop.&lt;br /&gt;
&lt;br /&gt;
=== Interesting links related to this project ===&lt;br /&gt;
* [https://lists.sourceforge.net/lists/listinfo/hdaps-devel HDAPS mailinglist and its archive]&lt;br /&gt;
* #hdaps channel on irc.freenode.org&lt;br /&gt;
* [https://sourceforge.net/projects/hdaps/ hdaps projects] overview of userspace programs using hdaps&lt;br /&gt;
* [http://www-307.ibm.com/pc/support/site.wss/document.do?lndocid=TPAD-HDFIRM IBM ThinkPads hardware drive firmware site]&lt;br /&gt;
* [http://www.paul.sladen.org/thinkpad-r31/accelerometer.html http://www.paul.sladen.org/thinkpad-r31/accelerometer/]&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=119845 Gentoo ebuild for hdaps driver and daemon including a initscript*&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137345 Gentoo ebuild for gkhdaps gkrell plugin&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137350 Gentoo ebuild for hdaps-gl application&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137351 Gentoo ebuild for gnome hdapsgl-applet&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137352 Gentoo ebuild for gnome tilt application&lt;br /&gt;
* http://bugs.gentoo.org/show_bug.cgi?id=137353 Gentoo ebuild for wmhdaps&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:R50]] [[Category:R50p]] [[Category:R51]] [[Category:R52]] [[Category:R60]] [[Category:T41]] [[Category:T41p]] [[Category:T42]] [[Category:T42p]] [[Category:T43]] [[Category:T43p]] [[Category:T60]] [[Category:T60p]] [[Category:X40]] [[Category:X41]] [[Category:X41 Tablet]] [[Category:X60]] [[Category:X60s]] [[Category:Z60m]] [[Category:Z60t]] [[Category:Drivers]] [[Category:Z61m]]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=1829-3HU&amp;diff=29303</id>
		<title>1829-3HU</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=1829-3HU&amp;diff=29303"/>
		<updated>2007-04-13T12:15:04Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: Undo corruption&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= IBM ThinkPad {{R50}} 1829-3HU Specifications (Configured to Order) =&lt;br /&gt;
&lt;br /&gt;
== CPU and Memory ==&lt;br /&gt;
{|&lt;br /&gt;
|[[Processors|Processor]] Manufacturer || Intel&lt;br /&gt;
|-&lt;br /&gt;
|Processor Class || [[Intel_Pentium_M_%28Banias%29|Pentium M (Banias)]]&lt;br /&gt;
|-&lt;br /&gt;
|Processor Speed || 1.7 Ghz &lt;br /&gt;
|-&lt;br /&gt;
|Cache Size || 1 MB L2&lt;br /&gt;
|-&lt;br /&gt;
|Installed Memory || 2 GB &lt;br /&gt;
|-&lt;br /&gt;
|Maximum Memory || 2 GB&lt;br /&gt;
|- &lt;br /&gt;
|[[Memory|Memory Technology]] || [[PC2700]] DDR SDRAM (333Mhz)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Storage ==&lt;br /&gt;
{|&lt;br /&gt;
|[[Harddisk_Drives|Hard Disk Model]] || [[Harddisk_Drives#2.5.22_9.5mm_PATA|Hitachi Travelstar HTE726060M9AT00/08K0889]]&lt;br /&gt;
|-&lt;br /&gt;
|Hard Disk Capacity || 60 GB&lt;br /&gt;
|-&lt;br /&gt;
|Hard Disk Speed || 7200 rpm&lt;br /&gt;
|-&lt;br /&gt;
|Included Drives || Matsushita DVD-RAM UJ-811 ([[UltraBay|UltraBay Enhanced]] [[UltraBay Enhanced DVD Multi-Burner| DVD Multi-Burner]]) &lt;br /&gt;
|-&lt;br /&gt;
|Reads || CD-ROM (24x), CD-R (24x), CD-RW (12x), DVD-ROM SL (8x), DVD-ROM DL (6x), DVD-R (8x), DVD+R (?x), DVD-RW (4x), DVD+RW (?x), DVD-RAM 2.6G (1x), DVD-RAM 4.7G/9.4G (2x)&lt;br /&gt;
|-&lt;br /&gt;
|Writes || CD-R (16x), CD-RW (4x/8x), DVD-R (2x), DVD-RW (1x), DVD-RAM (2x)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Display and Graphics ==&lt;br /&gt;
{|&lt;br /&gt;
|Display Size || 15 in&lt;br /&gt;
|-&lt;br /&gt;
|[[Displays|Display Type]] || [[TFT_display|FlexView IPS LCD (Samsung LTN150P1-L02)]]&lt;br /&gt;
|-&lt;br /&gt;
|Display Resolution || 1400 Ã— 1050 pixels (SXGA+)&lt;br /&gt;
|-&lt;br /&gt;
|[[Video Controllers|Graphics Processor]] || [[ATI Mobility Radeon 9000]]&lt;br /&gt;
|-&lt;br /&gt;
|Graphics Memory || 32 MB DDR SDRAM&lt;br /&gt;
|-&lt;br /&gt;
|Max. External Resolution || 1600 Ã— 1200 pixels&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Battery ==&lt;br /&gt;
{|&lt;br /&gt;
|Battery Life || up to 6.9 hours &lt;br /&gt;
|-&lt;br /&gt;
|[[Batteries|Battery Type]] || 9 cell Extended [[Batteries#LiIon_Battery|Li-Ion battery]]&lt;br /&gt;
|-&lt;br /&gt;
|Battery Capacity || 4.4 Ah&lt;br /&gt;
|-&lt;br /&gt;
|Charging Time || Power Off - 4.3 hours, Power On - 5.0 hours&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Communications and Networking ==&lt;br /&gt;
{|&lt;br /&gt;
|[[Bluetooth_Adapters|Bluetooth]] || [[IBM_Integrated_Bluetooth_II_with_56K_Modem_%28BMDC%29|Actiontec Bluetooth II Adapter]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Modem_Devices|Modem]] Speed || [[IBM_Integrated_Bluetooth_II_with_56K_Modem_%28BMDC%29|56Kbps V.92 Software Modem(CDC)]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Ethernet_Controllers|Network Support]] || [[Ethernet_Controllers#Intel_Gigabit_.2810.2F100.2F1000.29|Intel Pro/1000 10/100/1000 MBit Ethernet]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Wireless Network Adapters|Wireless Network Support]] || [[IBM_11a/b/g_Wireless_LAN_Mini_PCI_Adapter|IBM a/b/g MiniPC Wireless Adapter (IEEE 802.11b/g)]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
{|&lt;br /&gt;
|Shipped Operating System || Microsoft Windows XP Professional&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== [[Ports,_Connectors &amp;amp; Slots|Connectors]] ==&lt;br /&gt;
{|&lt;br /&gt;
|[[Audio_Jacks|Audio]] || 1 x microphone - input - mini-phone mono 3.5 mm , 1 x audio - line-out/headphones - mini-phone stereo 3.5 mm&lt;br /&gt;
|-&lt;br /&gt;
|[[Firewire_Port|FireWire]] || 1 x IEEE 1394a (FireWire 400) - 4 pin FireWire plug&lt;br /&gt;
|-&lt;br /&gt;
|[[Modem_Port|Modem]] || 1 x modem - phone line - RJ-11&lt;br /&gt;
|-&lt;br /&gt;
|[[Ethernet Port|Network]] || 1 x network - Ethernet 10Base-T/100Base-TX/1000Base-T - RJ-45&lt;br /&gt;
|-&lt;br /&gt;
|[[Parallel Port|Parallel Port]] || 1 x parallel - IEEE 1284 (EPP/ECP) - 25 pin D-Sub (DB-25)&lt;br /&gt;
|-&lt;br /&gt;
|[[PC Card]] || 1 x [[CardBus slot]] Type I/II/III, 16/32 Bit&lt;br /&gt;
|-&lt;br /&gt;
|[[USB Port|USB]] || 2 x Hi-Speed USB - 4 pin USB Type A&lt;br /&gt;
|-&lt;br /&gt;
|Video || 1 x [[VGA Port|VGA]] - 15 pin HD D-Sub (HD-15), 1 x [[TV-Out Port|S-Video]] - 4 pin mini Din&lt;br /&gt;
|-&lt;br /&gt;
|[[Docking Port]] || Yes&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== General Product Info ==&lt;br /&gt;
{|&lt;br /&gt;
|[[Input_Devices|Input Devices]] || 86 key keyboard w/ [[TrackPoint|TrackPoint]] and [[UltraNav|UltraNav Touchpad]], and [[ThinkPad_Button|Access IBM]], volume control, power and Fn keys/buttons&lt;br /&gt;
|-&lt;br /&gt;
|Infrared Transceiver || [[IrDA|IrDA]] Compatible&lt;br /&gt;
|-&lt;br /&gt;
|[[Audio|Sound Card]] || [[AD1981B|Analog Devices AD1981B AC97 Soft Audio]]&lt;br /&gt;
|-&lt;br /&gt;
|Security Chip || [[Embedded_Security_Subsystem|Internal IBM Security Chip (TCPA compliant)]]&lt;br /&gt;
|-&lt;br /&gt;
|Weight || ??&lt;br /&gt;
|-&lt;br /&gt;
|Dimensions || 332 mm Ã— 269 mm Ã— 37 - 40 mm (13.1 in Ã— 10.6 in Ã— 1.47 - 1.58 in) (WÃ—DÃ—H)&lt;br /&gt;
|-&lt;br /&gt;
|Manufacturer Part No. || ??&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=2668-A1U&amp;diff=29302</id>
		<title>2668-A1U</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=2668-A1U&amp;diff=29302"/>
		<updated>2007-04-13T12:14:35Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: Undo corruption&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= IBM ThinkPad T43 2668 - A1U Specifications =&lt;br /&gt;
&lt;br /&gt;
== CPU and Memory ==&lt;br /&gt;
{|&lt;br /&gt;
|Processor Manufacturer || Intel&lt;br /&gt;
|-&lt;br /&gt;
|Processor Class || (Pentium M Dothan)&lt;br /&gt;
|-&lt;br /&gt;
|Processor Name || Intel Pentium M 750&lt;br /&gt;
|-&lt;br /&gt;
|Processor Speed || 1.86 GHz&lt;br /&gt;
|-&lt;br /&gt;
|Installed Memory || 768 MB&lt;br /&gt;
|-&lt;br /&gt;
|Maximum Memory || 2 GB&lt;br /&gt;
|- &lt;br /&gt;
|Memory Technology || DDR2 SDRAM - 533MHz&lt;br /&gt;
|-&lt;br /&gt;
|Cache Size || 2 MB&lt;br /&gt;
|}&lt;br /&gt;
== Storage ==&lt;br /&gt;
{|&lt;br /&gt;
|Hard Drive Model || Hitachi HTS541060G9AT00&lt;br /&gt;
|-&lt;br /&gt;
|Hard Drive Capacity || 60 GB&lt;br /&gt;
|-&lt;br /&gt;
|Included Drives || DVD Drive&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Display and Graphics ==&lt;br /&gt;
{|&lt;br /&gt;
|Display Size || 14.1 in&lt;br /&gt;
|-&lt;br /&gt;
|Display Type || SXGA+&lt;br /&gt;
|-&lt;br /&gt;
|Graphics Processor || ATI Mobility Radeon X300&lt;br /&gt;
|-&lt;br /&gt;
|Graphics Memory || 64 MB&lt;br /&gt;
|-&lt;br /&gt;
|Included Video Card || Graphics card - PCI Express x16&lt;br /&gt;
|-&lt;br /&gt;
|Resolution || 1400 x 1050 pixels&lt;br /&gt;
|-&lt;br /&gt;
|Max. External Resolution || 2048 x 1536 pixels&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Battery ==&lt;br /&gt;
{|&lt;br /&gt;
|Battery Model || 6 cell&lt;br /&gt;
|-&lt;br /&gt;
|Battery Life || 3.0 hour(s)&lt;br /&gt;
|-&lt;br /&gt;
|Battery Type || Lithium ion&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Communications and Networking ==&lt;br /&gt;
{|&lt;br /&gt;
|Bluetooth || Yes&lt;br /&gt;
|-&lt;br /&gt;
|Modem Speed || 56 Kbps&lt;br /&gt;
|-&lt;br /&gt;
|Network LAN || Broadcom BCM5751M Gigabit Ethernet&lt;br /&gt;
|-&lt;br /&gt;
|Network WLAN || Intel PRO/Wireless 2200BG MiniPCI card&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Software ==&lt;br /&gt;
{|&lt;br /&gt;
|Shipped Operating System || Microsoft Windows XP Home&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Connectors ==&lt;br /&gt;
{|&lt;br /&gt;
|Interface Provided ||Parallel Port, S-Video, VGA, Phone line, Headphone, Ethernet 10Base-T/100Base-TX/1000Base-T&lt;br /&gt;
|-&lt;br /&gt;
|Connectors ||2 x Hi-Speed USB - 4 pin USB Type A, 1 x parallel - IEEE 1284 (EPP/ECP) - 25 pin D-Sub (DB-25), 1 x display / video - VGA - 15 pin HD D-Sub (HD-15), 1 x infrared - IrDA, 1 x modem - phone line - RJ-11, 1 x network - Ethernet 10Base-T/100Base-TX/1000Base-T - RJ-45, 1 x display / video - S-video output - 4 pin mini-DIN, 1 x docking / port replicator, 1 x microphone - input - mini-phone mono 3.5 mm , 1 x audio - line-out/headphones - mini-phone stereo 3.5 mm&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== General Product Info ==&lt;br /&gt;
{|&lt;br /&gt;
|Input Devices || Keyboard, Touchpad, TrackPoint&lt;br /&gt;
|-&lt;br /&gt;
|Included Sound Card || SoundMAX Integrated Audio&lt;br /&gt;
|-&lt;br /&gt;
|Weight || 5.4 lbs&lt;br /&gt;
|-&lt;br /&gt;
|Also known as || ...&lt;br /&gt;
|-&lt;br /&gt;
|Manufacturer Part No. || 2668A1U&lt;br /&gt;
|-&lt;br /&gt;
|Dimension || 1.2 in x 12.2 in x 10 in (HxWxD)  &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:T43]]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Category:I1250&amp;diff=29299</id>
		<title>Category:I1250</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Category:I1250&amp;diff=29299"/>
		<updated>2007-04-13T09:09:56Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: Undo corruption&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
[[image:ThinkPadi1200.jpg|ThinkPad i1250]]&lt;br /&gt;
|style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 0; margin-right:10px; border: 1px solid #dfdfdf; padding: 0em 1em 1em 1em; background-color:#F8F8FF; align:right;&amp;quot;&amp;gt;&lt;br /&gt;
=== ThinkPad i Series 1250 ===&lt;br /&gt;
This page gives an overview of all ThinkPad i Series 1250 related topics&lt;br /&gt;
&lt;br /&gt;
==== Features ====&lt;br /&gt;
* [[Intel Mobile Celeron (2)|Intel Mobile Celeron]] 500 MHz CPU&lt;br /&gt;
* [[SMI LynxEM|SMI LynxEM4+]] with 4MB&lt;br /&gt;
** 12.1&amp;quot; TFT display with 800x600 resolution&lt;br /&gt;
* 64MB [[PC-100]] memory standard&lt;br /&gt;
* 6GB HDD&lt;br /&gt;
* [[CS4299]] AC'97 Audio controller&lt;br /&gt;
* CD-ROM (non-removable)&lt;br /&gt;
* CDC slot with Lucent 56K AC'97 Modem&lt;br /&gt;
* [[CardBus slot]] (Type 3)&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
* [ftp://ftp.software.ibm.com/pc/pccbbs/mobiles_pdf/23p0894.pdf ThinkPad 130, 1200, 1300 Hardware Maintenance Manual (October 2001)] (8,380,483 Bytes)&lt;br /&gt;
* [ftp://ftp.software.ibm.com/pc/pccbbs/mobiles/04p4963_.pdf ThinkPad 130, 1200, 1300 Setup Guide] (479,231 Bytes)&lt;br /&gt;
* [ftp://ftp.software.ibm.com/pc/pccbbs/mobiles/atl-ur.pdf ThinkPad 130, 1200, 1300 User's Reference] (1,524,656 Bytes)&lt;br /&gt;
&lt;br /&gt;
[[Category:I Series]]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Installing_openSUSE_10.2_on_a_ThinkPad_X60&amp;diff=29293</id>
		<title>Installing openSUSE 10.2 on a ThinkPad X60</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Installing_openSUSE_10.2_on_a_ThinkPad_X60&amp;diff=29293"/>
		<updated>2007-04-13T05:48:32Z</updated>

		<summary type="html">&lt;p&gt;Whoopie: Undo corruption&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Lenovo ThinkPad {{X60}} (model 1707-CTO / model 1706-8GG) =&lt;br /&gt;
== Hardware Details ==&lt;br /&gt;
* Intel Core Duo T2400 (1.83GHz, 2MB L2, 667MHz FSB)&lt;br /&gt;
* 2GB RAM (2 NonParity DDR2 SDRAM SoDIMM PC2-5300)&lt;br /&gt;
* Intel Graphics Media Accelerator 950&lt;br /&gt;
* 12.1 inch XGA (1024x768) (Lenovo LTN121XJ-L07)&lt;br /&gt;
* 80GB, 5400rpm Serial ATA (Hitachi HTS541080G9SA00) / 100GB Serial ATA on 1706GG (Toshiba MK1034GSX)&lt;br /&gt;
* Intel PRO/1000 Gigabit Ethernet&lt;br /&gt;
* Intel PRO/Wireless 3945ABG&lt;br /&gt;
* Bluetooth&lt;br /&gt;
* Firewire&lt;br /&gt;
* SD Card Reader&lt;br /&gt;
* 56K V.92 Modem&lt;br /&gt;
&lt;br /&gt;
== Software Details ==&lt;br /&gt;
* [http://en.opensuse.org/Released_Version openSUSE 10.2] retail DVD9 iso&lt;br /&gt;
&lt;br /&gt;
== Installation procedure ==&lt;br /&gt;
=== Setup ===&lt;br /&gt;
Since I didn't get a dock or usb CDROM with this machine, I started the installation procedure using a USB Stick.  I followed these  [http://en.opensuse.org/Installation_without_CD#Creating_a_bootable_USB_Stick_from_Linux instructions to set up a boot USB key].  This contains GRUB and the loader for the installer.  The actual installation media was on an NFS share.  To set this up, copy the contents of the CDS/DVD into a directory (or mount the DVD iso image loopback) then share the directory containing CD1 via NFS, is the simplest way.  Sharing the DVD as a SMB share works from windows, too.&lt;br /&gt;
&lt;br /&gt;
Using the ultra-bay DVD-drive is straightforward as it is detected at startup and can be booted from. Nothing special about this.&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
Press F12 during POST to get the boot selector menu up, choose the USB Key.  This boots into GRUB.  Press F4 here to set the installation source to NFS or SMB as needed, and enter the server details.  For example, with SMB, enter the server name, the name of the share, and the directory where the first CD's contents are, eg 'CD1'.  Now the installer is loaded from the share and proceeds as a usual SUSE install.  No special steps are required during the install, but read the documentation about [[ Pre-Installation_steps | preserving or moving the ThinkVantage rescue partition ]] before you commit to the installation.&lt;br /&gt;
&lt;br /&gt;
{{NOTE|After installing the software, the installer reboots into the installed system to configure it, as usual.  Note that because it was booted from a USB key, GRUB has been installed onto the key instead of the hard disk.  You can correct this after the configuration is completed, but for now, keep the USB key inserted, boot from that again.  The GRUB menu boots the installed system from the hard disk, just like the old days with LILO and a boot floppy.  Once the installation and you're logged in, start YaST2, go to System, Bootloader, and change the boot loader location to its proper location (I recommend the boot or root partition with the Generic MBR option).  Now the laptop can boot on its own. }}&lt;br /&gt;
&lt;br /&gt;
== What works out of the box ==&lt;br /&gt;
=== Hardware ===&lt;br /&gt;
* Ethernet adaptor&lt;br /&gt;
* Intel 3945ABG Wireless ethernet adapter&lt;br /&gt;
* GMA950 graphics with 3D acceleration with integral monitor&lt;br /&gt;
* Sound playback&lt;br /&gt;
* USB&lt;br /&gt;
* Bluetooth (with kbluetoothd, gets about 55kB/s with OBEXFTP)&lt;br /&gt;
* Trackpoint&lt;br /&gt;
* SD card reader &lt;br /&gt;
&lt;br /&gt;
=== Power management etc ===&lt;br /&gt;
* Suspend to disk (Fn+F12)&lt;br /&gt;
* Suspend to RAM (Fn+F4)&lt;br /&gt;
* Turn display dark (Fn+F3)&lt;br /&gt;
* CPU speed stepping (required BIOS update to 2.05 though)&lt;br /&gt;
* LCD Brightness depending on current power scheme, via KPowersave and HAL&lt;br /&gt;
&lt;br /&gt;
=== Extra keys ===&lt;br /&gt;
* Volume control, keyboard light and screen brightness control&lt;br /&gt;
* Lid switch (LCD off when lid closed, resume from suspend to RAM when opened)&lt;br /&gt;
* Multimedia keys with KMix and Amarok&lt;br /&gt;
* Browser back/forward keys with Konqueror&lt;br /&gt;
&lt;br /&gt;
== What had to be configured by hand ==&lt;br /&gt;
* Mouse wheel emulation, set &amp;quot;Emulate Mouse wheel with button 2&amp;quot; in SaX2 mouse settings&lt;br /&gt;
* Keyboard dead keys for international characters, set &amp;quot;Right Alt is Compose&amp;quot; in SaX2 keyboard settings, then ralt-shift-2, a =&amp;gt; Ã¤&lt;br /&gt;
* Sound recording, using KMix or other mixer, set the mic as capture source, turn it up, enable and turn up 'Capture' channel.&lt;br /&gt;
* FN-F2 initially does nothing. This requires extra tweaking.&lt;br /&gt;
* FN-F7 doesn't work either. Even though ibm-acpi module may be loaded, the video-switch facility does not work.&lt;br /&gt;
* The finger print reader, a working driver is existing.&lt;br /&gt;
* By default the fan runs all the time.  If power management on the ipw3945 is enabled, it only runs about 1/3 of the time.  Use 'iwpriv eth1 set_power 7' to enable power management - this comes at the cost of increasing latency when using wireless.  See [http://ipw3945.sourceforge.net/README.ipw3945 the ipw3495 README] for details. A description how to do this automatically can be found below.&lt;br /&gt;
&lt;br /&gt;
=== Accessing the nvram - device ===&lt;br /&gt;
The default permissions of the nvram device prevent the screen sliders for brightness / volume etc. from being displayed for non root users. To circumvent this problem, a modification of an entry should be made within /etc/udev.d/hooks/50-udev-default.rules:&lt;br /&gt;
&lt;br /&gt;
replace&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 KERNEL==&amp;quot;nvram&amp;quot;,               GROUP=&amp;quot;kmem&amp;quot;, MODE=&amp;quot;600&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
by&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 KERNEL==&amp;quot;nvram&amp;quot;,               GROUP=&amp;quot;users&amp;quot;, MODE=&amp;quot;640&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and every user is able to read from nvram. This ensures that the sliders are displayed when modifying the brightness or the volume.&lt;br /&gt;
&lt;br /&gt;
=== Automatic power switching for ipw3495 ===&lt;br /&gt;
This procedure can be automatized:&lt;br /&gt;
&lt;br /&gt;
Create a script switch_wireless_mode in /usr/lib/powersave/scripts and make it executeable:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 ###########################################################################&lt;br /&gt;
 #                                                                         #&lt;br /&gt;
 #                         Powersave Daemon                                #&lt;br /&gt;
 #                                                                         #&lt;br /&gt;
 #          Copyright (C) 2004,2005 SUSE Linux Products GmbH               #&lt;br /&gt;
 #                                                                         #&lt;br /&gt;
 # This program is free software; you can redistribute it and/or modify it #&lt;br /&gt;
 # under the terms of the GNU General Public License as published by the   #&lt;br /&gt;
 # Free Software Foundation; either version 2 of the License, or (at you   #&lt;br /&gt;
 # option) any later version.                                              #&lt;br /&gt;
 #                                                                         #&lt;br /&gt;
 # This program is distributed in the hope that it will be useful, but     #&lt;br /&gt;
 # WITHOUT ANY WARRANTY; without even the implied warranty of              #&lt;br /&gt;
 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU       #&lt;br /&gt;
 # General Public License for more details.                                #&lt;br /&gt;
 #                                                                         #&lt;br /&gt;
 # You should have received a copy of the GNU General Public License along #&lt;br /&gt;
 # with this program; if not, write to the Free Software Foundation, Inc., #&lt;br /&gt;
 # 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA                  #&lt;br /&gt;
 #                                                                         #&lt;br /&gt;
 ###########################################################################&lt;br /&gt;
 #&lt;br /&gt;
 # change mode for the wireless network card on X60 lenovo laptop&lt;br /&gt;
 # currently the interface name needs to be set manually.&lt;br /&gt;
 #&lt;br /&gt;
 #&lt;br /&gt;
 &lt;br /&gt;
 IWPRIV=&amp;quot;/usr/sbin/iwpriv&amp;quot;&lt;br /&gt;
 MODEPARAM=&amp;quot;set_power&amp;quot;&lt;br /&gt;
 POWERSCHEME=&amp;quot;6&amp;quot;&lt;br /&gt;
 BATTERYSCHEME=&amp;quot;7&amp;quot;&lt;br /&gt;
 IF=&amp;quot;eth1&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 . ${0%/*}/helper_functions&lt;br /&gt;
 &lt;br /&gt;
 if [ $EVENT_TYPE != ACADAPTER ]; then&lt;br /&gt;
     DEBUG &amp;quot;switch_wireless_mode only makes sense for acadapter events ;-)&amp;quot; WARN&lt;br /&gt;
 else&lt;br /&gt;
     if [ &amp;quot;$1&amp;quot; = &amp;quot;acadapter.online&amp;quot; ]; then&lt;br /&gt;
         ${IWPRIV} ${IF} ${MODEPARAM} ${POWERSCHEME}&lt;br /&gt;
     fi&lt;br /&gt;
     if [ &amp;quot;$1&amp;quot; = &amp;quot;acadapter.offline&amp;quot; ]; then&lt;br /&gt;
         ${IWPRIV} ${IF} ${MODEPARAM} ${BATTERYSCHEME}&lt;br /&gt;
     fi&lt;br /&gt;
 fi&lt;br /&gt;
 $SCRIPT_RETURN $EV_ID 0 &amp;quot;switch_wireless_mode finished&amp;quot;&lt;br /&gt;
 EXIT 0&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Finally only two lines have to be modified &amp;quot;on top&amp;quot; of this to make powersaved aware of this script. This ought to happen in /etc/sysconfig/powersave/events:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 ## Path:                System/Powermanagement/Powersave/Events&lt;br /&gt;
 ## Type:                string&lt;br /&gt;
 EVENT_ACADAPTER_ONLINE=&amp;quot;reread_cpu_capabilities switch_wireless_mode&amp;quot;&lt;br /&gt;
 EVENT_ACADAPTER_OFFLINE=&amp;quot;reread_cpu_capabilities switch_wireless_mode&amp;quot;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;switch_wireless_mode&amp;quot; should be added to the EVENT_ACADAPTER_ONLINE and EVENT_ACADAPTER_OFFLINE as shown above. Given this, the x60 will switch to low power mode when running on battery and back to high power mode when running on mains automatically.&lt;br /&gt;
&lt;br /&gt;
But be warned: if for any reason the device ID of the wireless adapter should differ from eth1 you will have to edit the file switch_wireless_mode accordingly.&lt;br /&gt;
&lt;br /&gt;
Doing a test&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 iwpriv eth1 get_power&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
should make it clear whether everything works as expected, the return values should differ between mains plugged and mains unplugged.&lt;br /&gt;
&lt;br /&gt;
=== Activating FN-F2 and FN-F7 ===&lt;br /&gt;
Both keys FN-F2 and FN-F7 create acpi events. This can be seen easily by&lt;br /&gt;
performing a &amp;quot;tail -f /var/log/acpid&amp;quot; and pressing one of those combinations,&lt;br /&gt;
however, in the initial state of the installation nothing happens&lt;br /&gt;
afterwards. The following description shows how to make both keys do what you&lt;br /&gt;
would expect them to.&lt;br /&gt;
&lt;br /&gt;
==== FN-F2: blocking the screen as soon as FN-F2 is pressed ====&lt;br /&gt;
Firstly I have to point out that this description is referring to kde - users,&lt;br /&gt;
I am highly convinced that there exists a similar program on gnome for locking&lt;br /&gt;
the screen but I simply do not know (and did not test). Therefore your mileage&lt;br /&gt;
may vary.&lt;br /&gt;
&lt;br /&gt;
Locking the screen may be realized by calling:&lt;br /&gt;
/opt/kde3/bin/kdesktop_lock --forcelock&lt;br /&gt;
This works from within a kdesktop, however, if you perform this call from a&lt;br /&gt;
deamon you do not have access to a X11-screen / a kde session. To circumvent&lt;br /&gt;
this, the call is executed as the user that is currently owning the screen&lt;br /&gt;
&amp;quot;:0&amp;quot; through sudo. See the patch for &amp;quot;dockhandler&amp;quot; below.&lt;br /&gt;
&lt;br /&gt;
==== FN-F7: switching video outputs ====&lt;br /&gt;
Every attempt to make&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 echo &amp;quot;video_switch&amp;quot; &amp;gt; /proc/acpi/ibm/video&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
work failed. Luckily there is a tool available from Ken Mano at&lt;br /&gt;
http://www16.plala.or.jp/mano-a-mano/i810switch.html that can be patched to&lt;br /&gt;
make video switching work on x60.&lt;br /&gt;
&lt;br /&gt;
The chip i945 on the x60 should be treated like a i855, so the patch that&lt;br /&gt;
needs to be applied is:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 --- i810switch-0.6.5/i810switch.c.original	2005-06-12 06:36:36.000000000 +0200&lt;br /&gt;
 +++ i810switch-0.6.5/i810switch.c	2007-02-28 15:05:49.000000000 +0100&lt;br /&gt;
 @@ -60,6 +60,7 @@&lt;br /&gt;
  #define I855STR			&amp;quot;8086:3582&amp;quot;&lt;br /&gt;
  //#define I865STR			&amp;quot;8086:2572&amp;quot;&lt;br /&gt;
  #define I915STR			&amp;quot;8086:2592&amp;quot;&lt;br /&gt;
 +#define I945STR			&amp;quot;8086:27a2&amp;quot;&lt;br /&gt;
  #define MEMSTR			&amp;quot;Memory at&amp;quot;&lt;br /&gt;
  #define NONPRSTR		&amp;quot;32-bit, non-prefetchable&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
 @@ -272,7 +273,8 @@&lt;br /&gt;
  			return p;&lt;br /&gt;
  		}&lt;br /&gt;
  &lt;br /&gt;
 -		i = (p = strstr(*buff_ptr, I855STR)) != NULL;&lt;br /&gt;
 +		i = (p = strstr(*buff_ptr, I855STR)) != NULL ||&lt;br /&gt;
 +		    (p = strstr(*buff_ptr, I945STR)) != NULL;&lt;br /&gt;
  		if (i)&lt;br /&gt;
  		{&lt;br /&gt;
  			*chiptype = I855;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After this, the tool should be compiled and installed. I can provide RPM's for&lt;br /&gt;
openSUSE 10.2 on request.&lt;br /&gt;
&lt;br /&gt;
What is missing now is the interfacing between FN-F7 and i810switch and&lt;br /&gt;
i810rotate. The latter should be used as it rotates from LCD-Only - LCD+CRT -&lt;br /&gt;
CRT-Only with every new call.&lt;br /&gt;
&lt;br /&gt;
==== Patching dockhandler ====&lt;br /&gt;
I included this in dockutils (/usr/lib/dockutils from dockutils-01), however, there are several optional ways how to&lt;br /&gt;
do this. The patch in use is depicted below:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 --- dockhandler 2006-11-06 18:22:37.000000000 +0100&lt;br /&gt;
 +++ dockhandler 2007-03-02 12:44:53.000000000 +0100&lt;br /&gt;
 @@ -70,6 +70,12 @@&lt;br /&gt;
         elif [ &amp;quot;$SER&amp;quot; -eq 4107 ]; then # Fn+F9&lt;br /&gt;
             ACTION=dock&lt;br /&gt;
         fi&lt;br /&gt;
 +       if [ &amp;quot;$SER&amp;quot; -eq 4098 ]; then # Fn+F2&lt;br /&gt;
 +           ACTION=lockscreen&lt;br /&gt;
 +       fi&lt;br /&gt;
 +       if [ &amp;quot;$SER&amp;quot; -eq 4103 ]; then # Fn+F7&lt;br /&gt;
 +           ACTION=videotoggle&lt;br /&gt;
 +       fi&lt;br /&gt;
      elif [ &amp;quot;$EVENT&amp;quot; = &amp;quot;ibm/dock&amp;quot; ]; then&lt;br /&gt;
         case $VAL in&lt;br /&gt;
             0)  # X32 has strange dock code&lt;br /&gt;
 @@ -81,7 +87,7 @@&lt;br /&gt;
      fi&lt;br /&gt;
  fi&lt;br /&gt;
 &lt;br /&gt;
 -export MODEL=`hal-get-property --udi /org/freedesktop/Hal/devices/computer --key smbios.system.version`&lt;br /&gt;
 +export MODEL=`hal-get-property --udi /org/freedesktop/Hal/devices/computer --key smbios.system.version | sed &amp;quot;y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/&amp;quot;`&lt;br /&gt;
 &lt;br /&gt;
  if [ -n &amp;quot;`echo $MODEL | grep -i thinkpad`&amp;quot; ]; then&lt;br /&gt;
      HOOKDIR=thinkpad&lt;br /&gt;
 --- hooks/thinkpad/60x60        2006-11-05 02:35:17.000000000 +0100&lt;br /&gt;
 +++ hooks/thinkpad/60x60        2007-03-02 12:18:37.000000000 +0100&lt;br /&gt;
 @@ -6,10 +6,25 @@&lt;br /&gt;
  #&lt;br /&gt;
  # This file is released under the GPLv2.&lt;br /&gt;
  #&lt;br /&gt;
 +# Modifications by Dr. Ing. Dieter Jurzitza / enhanced features&lt;br /&gt;
 +#&lt;br /&gt;
 &lt;br /&gt;
  . common_functions&lt;br /&gt;
 &lt;br /&gt;
 -[ &amp;quot;$MODEL&amp;quot; == &amp;quot;Thinkpad X60&amp;quot; ] &amp;amp;&amp;amp; exit 0;&lt;br /&gt;
 +[ &amp;quot;$MODEL&amp;quot; = &amp;quot;THINKPAD X60&amp;quot; ] || exit 0;&lt;br /&gt;
 +&lt;br /&gt;
 +video_toggle(){&lt;br /&gt;
 +    echo x60 video_toggle&lt;br /&gt;
 +    /usr/sbin/i810rotate&lt;br /&gt;
 +}&lt;br /&gt;
 +&lt;br /&gt;
 +lock_screen(){&lt;br /&gt;
 +    echo x60 lock_screen&lt;br /&gt;
 +    APPLICATION=&amp;quot;/opt/kde3/bin/kdesktop_lock&amp;quot;&lt;br /&gt;
 +    [ -f ${APPLICATION} ] || exit 0&lt;br /&gt;
 +    USER=`/usr/bin/who -u | /bin/awk '{if(match($2, &amp;quot;:0&amp;quot;)){print $1}}'`&lt;br /&gt;
 +    sudo -u ${USER} /bin/bash -l -c &amp;quot;export DISPLAY=:0.0; ${APPLICATION} --forcelock &amp;amp;&amp;quot;&lt;br /&gt;
 +}&lt;br /&gt;
 &lt;br /&gt;
  if [ &amp;quot;$1&amp;quot; = &amp;quot;dock&amp;quot; ]; then&lt;br /&gt;
      echo x60 dock&lt;br /&gt;
 @@ -18,4 +33,12 @@&lt;br /&gt;
  elif [ &amp;quot;$1&amp;quot; = &amp;quot;undock&amp;quot; ]; then&lt;br /&gt;
      echo x60 undock&lt;br /&gt;
      unregister_cdroms&lt;br /&gt;
 +&lt;br /&gt;
 +elif [ &amp;quot;$1&amp;quot; = &amp;quot;videotoggle&amp;quot; ]; then&lt;br /&gt;
 +    echo x60 video toggle&lt;br /&gt;
 +    video_toggle&lt;br /&gt;
 +&lt;br /&gt;
 +elif [ &amp;quot;$1&amp;quot; = &amp;quot;lockscreen&amp;quot; ]; then&lt;br /&gt;
 +    echo x60 lock screen&lt;br /&gt;
 +    lock_screen&lt;br /&gt;
 fi&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This patch does two things: firstly it repairs a bug in dockutils. The&lt;br /&gt;
comparison [ &amp;quot;MODEL&amp;quot; == &amp;quot;Thinkpad X60&amp;quot; ] &amp;amp;&amp;amp; exit 0; ensures that the file&lt;br /&gt;
60x60 is processed for each notebook not named &amp;quot;Thinkpad X60&amp;quot; what is not what&lt;br /&gt;
was meant here.&lt;br /&gt;
&lt;br /&gt;
Functionally both the FN-F2 and FN-F7 keys are tested in dockhandler. Events&lt;br /&gt;
are assigned that are called &amp;quot;lockscreen&amp;quot; for FN-F2 and &amp;quot;videotoggle&amp;quot; for&lt;br /&gt;
FN-F7, correspondingly. The event &amp;quot;lockscreen&amp;quot; in turn triggers the function&lt;br /&gt;
call &amp;quot;lock_screen()&amp;quot; from within 60x60, the same holds true for the event&lt;br /&gt;
&amp;quot;videotoggle&amp;quot; and the function call to &amp;quot;video_toggle&amp;quot;.&lt;br /&gt;
Please make sure that the path to i810rotate in &amp;quot;video_toggle()&amp;quot; fits to your&lt;br /&gt;
system environment.&lt;br /&gt;
&lt;br /&gt;
After this, both keys FN-F2 and FN-F7 should do what you expect them to&lt;br /&gt;
do. FN-F2 is adapted for the usage of kde, so your mileage may vary if you&lt;br /&gt;
want to adapt it to gnome or other window managers.&lt;br /&gt;
&lt;br /&gt;
=== Activating the internal modem ===&lt;br /&gt;
==== Choosing the right modem driver ====&lt;br /&gt;
The internal modem can only be used with the hsfmodem-package that is available from http://www.linuxant.com. The current version is hsfmodem-7.60. I recommend *not* to use the &amp;quot;openSUSE&amp;quot; package but to switch to the &amp;quot;generic&amp;quot; package as the latter one rebuilds the module if the kernel version does not match. My experiments with the slmodem package have failed.&lt;br /&gt;
&lt;br /&gt;
==== Suspend2ram / Suspend2disk issues with the modem driver ====&lt;br /&gt;
Installing this module encorporates issues with suspend2disk / suspend2ram. These are twofold. On one hand you have to make sure that the modules are being unloaded before performing a suspend2ram / suspend2disk process. Otherwise you will observe crashed. On the other hand the unloading of the intel sound module that is replaced by the hsf-package does not work as expected if i. e. kmix is running.&lt;br /&gt;
&lt;br /&gt;
But step by step. First of all it must be ensured that the module is unloaded for sure if a susped2disk / suspend2 ram action should be performed. This can be achieved as follows:&lt;br /&gt;
&lt;br /&gt;
This is done by placing a script in /etc/pm/hooks, I have chosen the name &amp;quot;08softmodem&amp;quot; and made it executable:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 . /etc/pm/functions&lt;br /&gt;
 &lt;br /&gt;
 case &amp;quot;$1&amp;quot; in&lt;br /&gt;
         hibernate|suspend)&lt;br /&gt;
                 /etc/init.d/hsf stop&lt;br /&gt;
                 ;;&lt;br /&gt;
         thaw|resume)&lt;br /&gt;
                 /etc/init.d/hsf start&lt;br /&gt;
                 ;;&lt;br /&gt;
         *)&lt;br /&gt;
                 ;;  &lt;br /&gt;
 esac&lt;br /&gt;
 &lt;br /&gt;
 exit $?&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Secondly, given you want to unload this you have to make sure that the soundmodule is not bound to kmix any more. Therefore I created a second script called 06kmix located in the same directory to make sure that it is processed before the unloading of the modules is actually being processed:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 &lt;br /&gt;
 . /etc/pm/functions&lt;br /&gt;
 &lt;br /&gt;
 KMIXPID=`ps ax | awk '{if (match($5, &amp;quot;kmix&amp;quot;)){print $1}}'`&lt;br /&gt;
 &lt;br /&gt;
 case &amp;quot;$1&amp;quot; in&lt;br /&gt;
         hibernate|suspend)&lt;br /&gt;
                 kill -SIGHUP $KMIXPID&lt;br /&gt;
                 ;;&lt;br /&gt;
         thaw|resume)&lt;br /&gt;
                 ;;&lt;br /&gt;
         *)&lt;br /&gt;
                 ;;&lt;br /&gt;
 esac&lt;br /&gt;
 &lt;br /&gt;
 exit $?&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If both scripts are in place, suspending and resuming should work, however, kmix will be halted when you get out of the suspend and it will not restart automatically. I had received a suggestion to restard it using an event of kpowersaved did not work for me. But  I realized it using a different technique.&lt;br /&gt;
I created a script called /home/&amp;lt;username&amp;gt;/.kde/Autostart/restartkmix with the following contents. It should be executeable as well:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 SLEEP=10&lt;br /&gt;
 while [ 1 ]; do&lt;br /&gt;
         PROCNUM=`ps ax | awk '{if(match($0,&amp;quot; kmix&amp;quot;)&amp;amp;&amp;amp;(!match($0,&amp;quot;awk&amp;quot;))){print $1}}'`&lt;br /&gt;
         if [ &amp;quot;${PROCNUM}&amp;quot; = &amp;quot;&amp;quot; ]; then&lt;br /&gt;
                 kmix -autostart&lt;br /&gt;
         fi&lt;br /&gt;
         sleep $SLEEP&lt;br /&gt;
 done&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
This generates a small amount of system load every 10 seconds but I think this is neglible. If kmix is not running it is restarted. This works for perfectly for me.&lt;br /&gt;
&lt;br /&gt;
=== Activating the fingerprint reader ===&lt;br /&gt;
There is a description of the fingerprint reader project at another location in this wiki (http://www.thinkwiki.org/wiki/Integrated_Fingerprint_Reader). The package (currently thinkfinger-0.2.2.tar.gz) should be downloaded, untared, built and installed. After that, you will have to do three things in addition:&lt;br /&gt;
&lt;br /&gt;
1.) you need to modify /etc/pam.d/common-auth:&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 #%PAM-1.0&lt;br /&gt;
 #&lt;br /&gt;
 # This file is autogenerated by pam-config. All changes&lt;br /&gt;
 # will be overwritten.&lt;br /&gt;
 #&lt;br /&gt;
 # Authentication-related modules common to all services&lt;br /&gt;
 #&lt;br /&gt;
 # This file is included from other service-specific PAM config files,&lt;br /&gt;
 # and should contain a list of the authentication modules that define&lt;br /&gt;
 # the central authentication scheme for use on the system&lt;br /&gt;
 # (e.g., /etc/shadow, LDAP, Kerberos, etc.). The default is to use the&lt;br /&gt;
 # traditional Unix authentication mechanisms.&lt;br /&gt;
 #&lt;br /&gt;
 auth    required        pam_env.so&lt;br /&gt;
 auth    sufficient      pam_thinkfinger.so&lt;br /&gt;
 auth    required        pam_unix2.so&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
the line containing pam_thinkfinger.so needs to be added.&lt;br /&gt;
&lt;br /&gt;
2.) you have to add a fingerprint from you. This is precisely described in the documentation of the thinkfinger package.&lt;br /&gt;
&lt;br /&gt;
3.) you should change your default displaymanager to gdm, otherwise you will be able to use the fingerprint-reader only in console applications. This can be achieved by setting&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 DISPLAYMANAGER=gdm&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
in /etc/sysconfig/displaymanager.&lt;br /&gt;
&lt;br /&gt;
=== openSUSE bug - make irqbalancer work ===&lt;br /&gt;
If you installed the &amp;quot;irqbalancer&amp;quot; package you probably realized that it is not running. Calling &amp;quot;/etc/init.d/irq_balancer status&amp;quot; will return &amp;quot;unused&amp;quot;. Doing a &amp;quot;cat /proc/interrupts&amp;quot; will show all interrupts on CPU 0, CPU 1 will not process any interrupt. To solve this problem you should edit /etc/init.d/irq_balancer manually. Change the line&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 start)&lt;br /&gt;
         echo -n &amp;quot;Starting irqbalance &amp;quot;&lt;br /&gt;
         if [ $PHYS -gt 1 ] || [ $PROC -gt 1 -a $PHYS -eq 0 ] ; then&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
into &lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
 start)&lt;br /&gt;
         echo -n &amp;quot;Starting irqbalance &amp;quot;&lt;br /&gt;
         if [ $PHYS -gt 1 ] || [ $PROC -gt 1 -a $PHYS -eq 1 ] ; then&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$PHYS should be compared to 1, not to 0. After restarting irq_balancer, the interrupts should be shared between cpu 0 and cpu 1 now. The important point is the change from $PHYS -eq 0 to $PHYS -eq 1.&lt;br /&gt;
&lt;br /&gt;
=== PCMCIA - slot ===&lt;br /&gt;
There is nothing special to say about the PCMCIA-slot. It just works (for me).&lt;br /&gt;
&lt;br /&gt;
== What doesn't work yet ==&lt;br /&gt;
* Xinerama with external LCD &lt;br /&gt;
* Dual head with external LCD&lt;br /&gt;
&lt;br /&gt;
== What I haven't tested yet ==&lt;br /&gt;
* Firewire&lt;br /&gt;
* Embedded Security Subsystem (TCPA)&lt;br /&gt;
* Active Protection System (HDAPS)&lt;br /&gt;
* Maximum battery life&lt;br /&gt;
&lt;br /&gt;
== lscpi ==&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;amp;gt; lspci&lt;br /&gt;
00:00.0 Host bridge: Intel Corporation Mobile 945GM/PM/GMS/940GML and 945GT Express Memory Controller Hub (rev 03)&lt;br /&gt;
00:02.0 VGA compatible controller: Intel Corporation Mobile 945GM/GMS/940GML Express Integrated Graphics Controller (rev 03)&lt;br /&gt;
00:02.1 Display controller: Intel Corporation Mobile 945GM/GMS/940GML Express Integrated Graphics Controller (rev 03)&lt;br /&gt;
00:1b.0 Audio device: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller (rev 02)&lt;br /&gt;
00:1c.0 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 1 (rev 02)&lt;br /&gt;
00:1c.1 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 2 (rev 02)&lt;br /&gt;
00:1c.2 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 3 (rev 02)&lt;br /&gt;
00:1c.3 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 4 (rev 02)&lt;br /&gt;
00:1d.0 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #1 (rev 02)&lt;br /&gt;
00:1d.1 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #2 (rev 02)&lt;br /&gt;
00:1d.2 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #3 (rev 02)&lt;br /&gt;
00:1d.3 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #4 (rev 02)&lt;br /&gt;
00:1d.7 USB Controller: Intel Corporation 82801G (ICH7 Family) USB2 EHCI Controller (rev 02)&lt;br /&gt;
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev e2)&lt;br /&gt;
00:1f.0 ISA bridge: Intel Corporation 82801GBM (ICH7-M) LPC Interface Bridge (rev 02)&lt;br /&gt;
00:1f.1 IDE interface: Intel Corporation 82801G (ICH7 Family) IDE Controller (rev 02)&lt;br /&gt;
00:1f.2 SATA controller: Intel Corporation 82801GBM/GHM (ICH7 Family) Serial ATA Storage Controller AHCI (rev 02)&lt;br /&gt;
00:1f.3 SMBus: Intel Corporation 82801G (ICH7 Family) SMBus Controller (rev 02)&lt;br /&gt;
02:00.0 Ethernet controller: Intel Corporation 82573L Gigabit Ethernet Controller&lt;br /&gt;
03:00.0 Network controller: Intel Corporation PRO/Wireless 3945ABG Network Connection (rev 02)&lt;br /&gt;
15:00.0 CardBus bridge: Ricoh Co Ltd RL5c476 II (rev b4)&lt;br /&gt;
15:00.1 FireWire (IEEE 1394): Ricoh Co Ltd R5C552 IEEE 1394 Controller (rev 09)&lt;br /&gt;
15:00.2 Generic system peripheral [Class 0805]: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev 18)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[Category: x60]][[Category: openSUSE]]&lt;/div&gt;</summary>
		<author><name>Whoopie</name></author>
		
	</entry>
</feed>