<?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=Vegar</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=Vegar"/>
	<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/wiki/Special:Contributions/Vegar"/>
	<updated>2026-06-16T01:10:31Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.12</generator>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=How_to_enable_the_integrated_fingerprint_reader_with_ThinkFinger&amp;diff=50304</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=50304"/>
		<updated>2011-01-17T21:29:29Z</updated>

		<summary type="html">&lt;p&gt;Vegar: /* Fix for the fingerprint reader getting too hot */ Cleanup of the fix-section&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/documentation/Fingerabdruck_Hack/fingerabdruck.mpg Video tutorial for forging fingerprints]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NB:''' Thinkfinger is dead since two years. It was [http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=546005 removed from debian] because of this.&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;
&lt;br /&gt;
{{cmdroot|aptitude update}}&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|aptitude install libthinkfinger0 libpam-thinkfinger thinkfinger-tools}}&lt;br /&gt;
&lt;br /&gt;
should then get you up and running.&lt;br /&gt;
&lt;br /&gt;
To make everything work you'll have to have permission to work the device ({{cmduser|sudo adduser myself plugdev}} worked for me), and you'll also have to follow instructions below about adding the device to your PAM methods.&lt;br /&gt;
&lt;br /&gt;
==== Ubuntu ====&lt;br /&gt;
&lt;br /&gt;
===== Gutsy =====&lt;br /&gt;
&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;
&lt;br /&gt;
{{cmduser|sudo apt-get install thinkfinger-tools  libpam-thinkfinger}}&lt;br /&gt;
&lt;br /&gt;
===== Hardy =====&lt;br /&gt;
&lt;br /&gt;
Hardy includes the latest thinkfinger and it is up to date with subversion.  Install packages:&lt;br /&gt;
&lt;br /&gt;
{{cmduser|sudo apt-get install thinkfinger-tools libpam-thinkfinger}}&lt;br /&gt;
&lt;br /&gt;
Update the pam configuration files:&lt;br /&gt;
&lt;br /&gt;
{{cmduser|sudo /usr/lib/pam-thinkfinger/pam-thinkfinger-enable}}&lt;br /&gt;
&lt;br /&gt;
Enroll your fingerprint (creates $HOME/.thinkfinger.bir).  If this gives an error about claiming the USB device then a reboot was claimed to work, but in fact it may just be a permissions problem.  {{NOTE|Do not try to enroll using 'sudo' - it will cause hidden permission problems}}&lt;br /&gt;
&lt;br /&gt;
{{cmduser|tf-tool --acquire}}&lt;br /&gt;
&lt;br /&gt;
Check fingerprint enrollment&lt;br /&gt;
&lt;br /&gt;
{{cmduser|tf-tool --verify}}&lt;br /&gt;
&lt;br /&gt;
You can expect everything to work correctly.  Note that you still have to enter your username if prompted but will be able&lt;br /&gt;
to swipe your finger instead of the password.  The prompt will usually be &amp;quot;Password or swipe finger&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Graphical login&lt;br /&gt;
* Text console login&lt;br /&gt;
* sudo&lt;br /&gt;
* screen lock/screen saver&lt;br /&gt;
* Administrative password prompt (eg for update or package managers).  (Note no &amp;quot;or swipe finger&amp;quot; in prompt).&lt;br /&gt;
&lt;br /&gt;
===== Intrepid =====&lt;br /&gt;
After installing from the normal repositories coming with Ubuntu 8.10, you would have to press enter after sweeping finger. (This bug: [https://bugs.launchpad.net/ubuntu/+source/thinkfinger/+bug/256429 https://bugs.launchpad.net/ubuntu/+source/thinkfinger/+bug/256429])&lt;br /&gt;
Therefore Jon Oberheide made an update that can be found here: &lt;br /&gt;
[https://launchpad.net/~jon-oberheide/+archive https://launchpad.net/~jon-oberheide/+archive]&lt;br /&gt;
(As of 2/3/09, this no longer seems to be the case. Just proceed to the install step.)&lt;br /&gt;
&lt;br /&gt;
Add the PPA repositories to your source.list (/etc/apt/source.list):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
deb http://ppa.launchpad.net/jon-oberheide/ubuntu intrepid main&lt;br /&gt;
deb-src http://ppa.launchpad.net/jon-oberheide/ubuntu intrepid main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Update installer:&lt;br /&gt;
&lt;br /&gt;
{{cmduser|sudo apt-get update}}&lt;br /&gt;
&lt;br /&gt;
And install:&lt;br /&gt;
&lt;br /&gt;
{{cmduser|sudo apt-get install thinkfinger-tools}}&lt;br /&gt;
&lt;br /&gt;
===== Jaunty =====&lt;br /&gt;
&lt;br /&gt;
The same package by Jon Oberheide is necessary, as with Intrepid, though the package thinkfinger-tools is installed by default.&lt;br /&gt;
&lt;br /&gt;
Add key:&lt;br /&gt;
&lt;br /&gt;
{{cmduser|sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com F2A12FABE936A7BBDC4EA33351DB180D1323E149}}&lt;br /&gt;
&lt;br /&gt;
Add the PPA repositories to your source.list (/etc/apt/source.list):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
deb http://ppa.launchpad.net/jon-oberheide/ppa/ubuntu jaunty main&lt;br /&gt;
deb-src http://ppa.launchpad.net/jon-oberheide/ppa/ubuntu jaunty main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Update installer:&lt;br /&gt;
&lt;br /&gt;
{{cmduser|sudo apt-get update}}&lt;br /&gt;
&lt;br /&gt;
And install:&lt;br /&gt;
&lt;br /&gt;
{{cmduser|sudo apt-get install thinkfinger-tools libpam-thinkfinger}}&lt;br /&gt;
&lt;br /&gt;
===== Karmic =====&lt;br /&gt;
&lt;br /&gt;
The syntax of udev rules is changed due to Karmic's new udev package. The correct rules should be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# SGS Thomson Microelectronics Fingerprint Reader&lt;br /&gt;
ENV{ID_VENDOR_ID}==&amp;quot;0483&amp;quot;, ENV{ID_MODEL_ID}==&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;, ENV{GENERATED}=&amp;quot;1&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;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otherwise udev would accidentally change the ownership of /dev/null so that gdm would fail to start.&lt;br /&gt;
&lt;br /&gt;
===== Lucid =====&lt;br /&gt;
&lt;br /&gt;
From a working Karmic, upgrade to Lucid gave me a somewhat broken thinkfinger.&lt;br /&gt;
&lt;br /&gt;
The scanner still works, but (in X windows) you need to hit &amp;quot;Enter&amp;quot; after doing a scan.&lt;br /&gt;
The scanner works fine while in terminal mode.&lt;br /&gt;
&lt;br /&gt;
This is almost definitely because of the xorg version, see this message with no response for more info:&lt;br /&gt;
http://article.gmane.org/gmane.linux.drivers.thinkfinger/567&lt;br /&gt;
&lt;br /&gt;
{{HINT|There is a PPA with working ThinkFinger for Lucid. At least it works fine on my Z61m. [http://www.thinkwiki.org/wiki/Installing_Ubuntu_10.04_(Lucid_Lynx)_on_a_ThinkPad_Z61m#Setup_Fingerprint_Reader See here] }}&lt;br /&gt;
&lt;br /&gt;
{{HINT|ThinkFinger can be installed through Ubuntu Software Centre/Synaptic Package Manager/Terminal without special repositories enabled in Lucid. Search &amp;quot;ThinkFinger and install thinkfinger-tools (Synaptic/Software Centre), or type &amp;quot;sudo apt-get install thinkfinger-tools&amp;quot; (Terminal). }}&lt;br /&gt;
&lt;br /&gt;
==== Fedora/Fedora Core ====&lt;br /&gt;
{{cmdroot|yum install thinkfinger}}&lt;br /&gt;
&lt;br /&gt;
==== Gentoo ====&lt;br /&gt;
{{cmdroot|emerge sys-auth/thinkfinger}}&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;
On Ubuntu 8.10 - Intrepid Ibex you should just add the following line the the /etc/pam.d/common-auth file so it looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
....&lt;br /&gt;
# here are the per-package modules (the &amp;quot;Primary&amp;quot; block)&lt;br /&gt;
auth	sufficient	pam_thinkfinger.so&lt;br /&gt;
auth	[success=1 default=ignore]	pam_unix.so try_first_pass nullok_secure&lt;br /&gt;
# here's the fallback if no module succeeds&lt;br /&gt;
....&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 9.04, you don't need to edit manually, just type:&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|sudo /usr/lib/pam-thinkfinger/pam-thinkfinger-enable}}&lt;br /&gt;
&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 --acquire $USERNAME}}&lt;br /&gt;
&lt;br /&gt;
{{NOTE|This may not work for you. Please read the Intrepid Ibex point in the discussion to this page.}}&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 --acquire 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}} and run {{cmdroot|sudo /sbin/udevtrigger}}. If you are using a Debian-based distribution, it is likely you are affected by the following [http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=489831 bug] where you need to replace {{path|udevtrigger}} with {{path|udevadm trigger}} (with the space!) in order for the following to work. 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, add the following lines at the end of {{path|/etc/pam.d/gnome-screensaver}}:&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;
{{NOTE|The following steps do not need to be done in Ubuntu Intrepid as the bir files are handled differently.}}&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 and in Kubuntu 8.10 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;br /&gt;
&lt;br /&gt;
== Fix for the fingerprint reader getting too hot ==&lt;br /&gt;
&lt;br /&gt;
If you notice that your fingerprint reader occasionally gets very hot then you might be interested in this section. Thanks to Tino Keitelon the linux-thinkpad mailing list for the solution.&lt;br /&gt;
&lt;br /&gt;
=== Collect info ===&lt;br /&gt;
First we need to determine if the reader is not on autosuspend mode.&lt;br /&gt;
Open a terminal and run:&lt;br /&gt;
&lt;br /&gt;
 for i in `find /sys/devices/*/*/usb* -name level` ; do echo -n &amp;quot;$i: &amp;quot; ; cat $i ; done&lt;br /&gt;
&lt;br /&gt;
We care about the devices that are with &amp;quot;on&amp;quot; state and we need to determine if one of those is the reader. So for each of those run something like:&lt;br /&gt;
&lt;br /&gt;
 cat /sys/devices/pci0000\:00/0000\:00\:1a.0/usb1/1-2/idVendor &lt;br /&gt;
 0483&lt;br /&gt;
 &lt;br /&gt;
 cat /sys/devices/pci0000\:00/0000\:00\:1a.0/usb1/1-2/idProduct &lt;br /&gt;
 2016&lt;br /&gt;
&lt;br /&gt;
Use the corresponding path of the devices that you got with &amp;quot;on&amp;quot; state and then compare the output with the output of the lsusb command. An example:&lt;br /&gt;
&lt;br /&gt;
 lsusb output: Bus 001 Device 004: ID 0483:2016 SGS Thomson Microelectronics Fingerprint Reader&lt;br /&gt;
&lt;br /&gt;
Which matches the output above (0483:2016).&lt;br /&gt;
&lt;br /&gt;
=== Enable autosuspend ===&lt;br /&gt;
Once you have determined the path of your reader then become root with su - and:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;auto&amp;quot; &amp;gt; /sys/&amp;lt;path-to-device&amp;gt;/power/level&lt;br /&gt;
&lt;br /&gt;
Alternatively, if you're using Ubuntu:&lt;br /&gt;
&lt;br /&gt;
 echo auto | sudo tee /sys/&amp;lt;path-to-device&amp;gt;/power/level&lt;br /&gt;
&lt;br /&gt;
After this, the fingerprint reader should be in &amp;quot;autosuspend&amp;quot; and will not get hot anymore. And it will still work as normal.&lt;br /&gt;
&lt;br /&gt;
=== Making the changes permanent ===&lt;br /&gt;
The above will only work for the current session (until the next reboot). If you want to make the change persistent, do one of the following:&lt;br /&gt;
==== Using udev (recommended) ====&lt;br /&gt;
The simplest way to do this is to create a udev rule (requires no additional tools):&lt;br /&gt;
&lt;br /&gt;
Put the following in {{path|/etc/udev/rules.d/69-fingerprint-sleep.rules}}&lt;br /&gt;
&lt;br /&gt;
 ATTR{idVendor}==&amp;quot;0483&amp;quot;, ATTR{idProduct}==&amp;quot;2016&amp;quot;, SUBSYSTEMS==&amp;quot;usb&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTR{power/level}=&amp;quot;auto&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(exchange 0483 and 2016 with what you found above if the numbers are different)&lt;br /&gt;
==== Using sysfsutils ====&lt;br /&gt;
Alternatively, if you have [http://linux-diag.sourceforge.net/Sysfsutils.html sysfsutils] installed, edit the file {{path|/etc/sysfs.conf}} and add the line&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;path-to-device&amp;gt;/power/level = auto&lt;br /&gt;
&lt;br /&gt;
Following the above example, that would be &lt;br /&gt;
&lt;br /&gt;
 devices/pci0000\:00/0000\:00\:1a.0/usb1/1-2/power/level = auto&lt;br /&gt;
&lt;br /&gt;
==== Using init scripts ====&lt;br /&gt;
If, for some reason, neither of the two above methods don't work, you can install an init script:&lt;br /&gt;
&lt;br /&gt;
 sudo gedit /etc/init.d/ReaderNoMoreHot&lt;br /&gt;
&lt;br /&gt;
Paste the following into it:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #&lt;br /&gt;
 echo &amp;quot;auto&amp;quot; &amp;gt; /sys/&amp;lt;path-to-device&amp;gt;/power/level&lt;br /&gt;
&lt;br /&gt;
Save and close. Then:&lt;br /&gt;
&lt;br /&gt;
 sudo chmod 755 /etc/init.d/ReaderNoMoreHot&lt;br /&gt;
 sudo update-rc.d ReaderNoMoreHot defaults 90&lt;br /&gt;
&lt;br /&gt;
--[[User:Lunatico|Lunatico]] 19:19, 1 August 2008 (CEST), extended by --[[User:Michaelthomas h|Michaelthomas h]] 23:36, 9 August 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
For the init script above, you can use the following more elaborate script, which does all the work for you of identifying the &amp;lt;path-to-device&amp;gt;. This can be useful since the USB device id can change under various circumstances (kernel upgrade etc).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# find the fingerprint reader and change its power level to autosuspend&lt;br /&gt;
&lt;br /&gt;
usbname=&amp;quot;SGS Thomson Microelectronics Fingerprint Reader&amp;quot;&lt;br /&gt;
usbid=$(lsusb |grep &amp;quot;$usbname&amp;quot; |cut -d' ' -f6);&lt;br /&gt;
[[ -z $usbid ]] &amp;amp;&amp;amp; echo &amp;quot;USB Device \&amp;quot;$usbname\&amp;quot; not found&amp;quot; &amp;amp;&amp;amp; exit 1&lt;br /&gt;
&lt;br /&gt;
unset failed_bool&lt;br /&gt;
find /sys/devices/*/*/usb* -name idVendor -print | (&lt;br /&gt;
  while read vfile; do&lt;br /&gt;
    dir=$(dirname $vfile);&lt;br /&gt;
    vendor=$(&amp;lt;$vfile);&lt;br /&gt;
    product=$(&amp;lt;$dir/idProduct);&lt;br /&gt;
    if [[ $vendor:$product = $usbid ]]; then&lt;br /&gt;
      plevel_file=$dir/power/level&lt;br /&gt;
      old_level=$(&amp;lt;$plevel_file);&lt;br /&gt;
      [[ $old_level = auto ]] || echo auto &amp;gt;$plevel_file || failed_bool=1&lt;br /&gt;
      break;&lt;br /&gt;
    fi;&lt;br /&gt;
  done&lt;br /&gt;
  if [[ $failed_bool ]]; then&lt;br /&gt;
    echo &amp;quot;Failed to set the fingerprint reader's power level to 'auto'.&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
  fi&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is an alternate script. The code is cleaner and it's about 20x faster (updated for jaunty):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# find the fingerprint reader and change its power level to autosuspend&lt;br /&gt;
&lt;br /&gt;
find_manuf=STMicroelectronics&lt;br /&gt;
find_prod=&amp;quot;Biometric Coprocessor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
for devdir in /sys/class/usb_*/*/device; do&lt;br /&gt;
  [[ -r $devdir/manufacturer ]] || continue&lt;br /&gt;
  manuf=$(&amp;lt;$devdir/manufacturer)&lt;br /&gt;
  [[ $manuf = $find_manuf ]] || continue;&lt;br /&gt;
  prod=$(&amp;lt;$devdir/product)&lt;br /&gt;
  [[ $prod = $find_prod ]] || continue;&lt;br /&gt;
  # if we get here then we have the right device!&lt;br /&gt;
  plevel_file=$devdir/power/level&lt;br /&gt;
  old_level=$(&amp;lt;$plevel_file);&lt;br /&gt;
  # if it is already set properly then exit silently:&lt;br /&gt;
  [[ $old_level = auto ]] &amp;amp;&amp;amp; exit 0&lt;br /&gt;
  # if we successfully change it then exit silently:&lt;br /&gt;
  echo auto &amp;gt;$plevel_file &amp;amp;&amp;amp; exit 0&lt;br /&gt;
  echo &amp;quot;Failed to set the fingerprint reader's power level to 'auto'.&amp;quot;&lt;br /&gt;
  exit 1&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
# if we make it through the for loop without exiting, the search failed&lt;br /&gt;
echo &amp;quot;Could not find the $find_manuf $find_prod (fingerprint reader)&amp;quot;&lt;br /&gt;
exit 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vegar</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=How_to_enable_the_integrated_fingerprint_reader_with_ThinkFinger&amp;diff=49828</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=49828"/>
		<updated>2010-10-20T19:08:54Z</updated>

		<summary type="html">&lt;p&gt;Vegar: /* Fix for the fingerprint reader getting too hot */&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/documentation/Fingerabdruck_Hack/fingerabdruck.mpg Video tutorial for forging fingerprints]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''NB:''' Thinkfinger is dead since two years. It was [http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=546005 removed from debian] because of this.&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;
&lt;br /&gt;
{{cmdroot|aptitude update}}&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|aptitude install libthinkfinger0 libpam-thinkfinger thinkfinger-tools}}&lt;br /&gt;
&lt;br /&gt;
should then get you up and running.&lt;br /&gt;
&lt;br /&gt;
To make everything work you'll have to have permission to work the device ({{cmduser|sudo adduser myself plugdev}} worked for me), and you'll also have to follow instructions below about adding the device to your PAM methods.&lt;br /&gt;
&lt;br /&gt;
==== Ubuntu ====&lt;br /&gt;
&lt;br /&gt;
===== Gutsy =====&lt;br /&gt;
&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;
&lt;br /&gt;
{{cmduser|sudo apt-get install thinkfinger-tools  libpam-thinkfinger}}&lt;br /&gt;
&lt;br /&gt;
===== Hardy =====&lt;br /&gt;
&lt;br /&gt;
Hardy includes the latest thinkfinger and it is up to date with subversion.  Install packages:&lt;br /&gt;
&lt;br /&gt;
{{cmduser|sudo apt-get install thinkfinger-tools libpam-thinkfinger}}&lt;br /&gt;
&lt;br /&gt;
Update the pam configuration files:&lt;br /&gt;
&lt;br /&gt;
{{cmduser|sudo /usr/lib/pam-thinkfinger/pam-thinkfinger-enable}}&lt;br /&gt;
&lt;br /&gt;
Enroll your fingerprint (creates $HOME/.thinkfinger.bir).  If this gives an error about claiming the USB device then a reboot was claimed to work, but in fact it may just be a permissions problem.  {{NOTE|Do not try to enroll using 'sudo' - it will cause hidden permission problems}}&lt;br /&gt;
&lt;br /&gt;
{{cmduser|tf-tool --acquire}}&lt;br /&gt;
&lt;br /&gt;
Check fingerprint enrollment&lt;br /&gt;
&lt;br /&gt;
{{cmduser|tf-tool --verify}}&lt;br /&gt;
&lt;br /&gt;
You can expect everything to work correctly.  Note that you still have to enter your username if prompted but will be able&lt;br /&gt;
to swipe your finger instead of the password.  The prompt will usually be &amp;quot;Password or swipe finger&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Graphical login&lt;br /&gt;
* Text console login&lt;br /&gt;
* sudo&lt;br /&gt;
* screen lock/screen saver&lt;br /&gt;
* Administrative password prompt (eg for update or package managers).  (Note no &amp;quot;or swipe finger&amp;quot; in prompt).&lt;br /&gt;
&lt;br /&gt;
===== Intrepid =====&lt;br /&gt;
After installing from the normal repositories coming with Ubuntu 8.10, you would have to press enter after sweeping finger. (This bug: [https://bugs.launchpad.net/ubuntu/+source/thinkfinger/+bug/256429 https://bugs.launchpad.net/ubuntu/+source/thinkfinger/+bug/256429])&lt;br /&gt;
Therefore Jon Oberheide made an update that can be found here: &lt;br /&gt;
[https://launchpad.net/~jon-oberheide/+archive https://launchpad.net/~jon-oberheide/+archive]&lt;br /&gt;
(As of 2/3/09, this no longer seems to be the case. Just proceed to the install step.)&lt;br /&gt;
&lt;br /&gt;
Add the PPA repositories to your source.list (/etc/apt/source.list):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
deb http://ppa.launchpad.net/jon-oberheide/ubuntu intrepid main&lt;br /&gt;
deb-src http://ppa.launchpad.net/jon-oberheide/ubuntu intrepid main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Update installer:&lt;br /&gt;
&lt;br /&gt;
{{cmduser|sudo apt-get update}}&lt;br /&gt;
&lt;br /&gt;
And install:&lt;br /&gt;
&lt;br /&gt;
{{cmduser|sudo apt-get install thinkfinger-tools}}&lt;br /&gt;
&lt;br /&gt;
===== Jaunty =====&lt;br /&gt;
&lt;br /&gt;
The same package by Jon Oberheide is necessary, as with Intrepid, though the package thinkfinger-tools is installed by default.&lt;br /&gt;
&lt;br /&gt;
Add key:&lt;br /&gt;
&lt;br /&gt;
{{cmduser|sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com F2A12FABE936A7BBDC4EA33351DB180D1323E149}}&lt;br /&gt;
&lt;br /&gt;
Add the PPA repositories to your source.list (/etc/apt/source.list):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
deb http://ppa.launchpad.net/jon-oberheide/ppa/ubuntu jaunty main&lt;br /&gt;
deb-src http://ppa.launchpad.net/jon-oberheide/ppa/ubuntu jaunty main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Update installer:&lt;br /&gt;
&lt;br /&gt;
{{cmduser|sudo apt-get update}}&lt;br /&gt;
&lt;br /&gt;
And install:&lt;br /&gt;
&lt;br /&gt;
{{cmduser|sudo apt-get install thinkfinger-tools libpam-thinkfinger}}&lt;br /&gt;
&lt;br /&gt;
===== Karmic =====&lt;br /&gt;
&lt;br /&gt;
The syntax of udev rules is changed due to Karmic's new udev package. The correct rules should be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# SGS Thomson Microelectronics Fingerprint Reader&lt;br /&gt;
ENV{ID_VENDOR_ID}==&amp;quot;0483&amp;quot;, ENV{ID_MODEL_ID}==&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;, ENV{GENERATED}=&amp;quot;1&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;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otherwise udev would accidentally change the ownership of /dev/null so that gdm would fail to start.&lt;br /&gt;
&lt;br /&gt;
===== Lucid =====&lt;br /&gt;
&lt;br /&gt;
From a working Karmic, upgrade to Lucid gave me a somewhat broken thinkfinger.&lt;br /&gt;
&lt;br /&gt;
The scanner still works, but (in X windows) you need to hit &amp;quot;Enter&amp;quot; after doing a scan.&lt;br /&gt;
The scanner works fine while in terminal mode.&lt;br /&gt;
&lt;br /&gt;
This is almost definitely because of the xorg version, see this message with no response for more info:&lt;br /&gt;
http://article.gmane.org/gmane.linux.drivers.thinkfinger/567&lt;br /&gt;
&lt;br /&gt;
{{HINT|There is a PPA with working ThinkFinger for Lucid. At least it works fine on my Z61m. [http://www.thinkwiki.org/wiki/Installing_Ubuntu_10.04_(Lucid_Lynx)_on_a_ThinkPad_Z61m#Setup_Fingerprint_Reader See here] }}&lt;br /&gt;
&lt;br /&gt;
{{HINT|ThinkFinger can be installed through Ubuntu Software Centre/Synaptic Package Manager/Terminal without special repositories enabled in Lucid. Search &amp;quot;ThinkFinger and install thinkfinger-tools (Synaptic/Software Centre), or type &amp;quot;sudo apt-get install thinkfinger-tools&amp;quot; (Terminal). }}&lt;br /&gt;
&lt;br /&gt;
==== Fedora/Fedora Core ====&lt;br /&gt;
{{cmdroot|yum install thinkfinger}}&lt;br /&gt;
&lt;br /&gt;
==== Gentoo ====&lt;br /&gt;
{{cmdroot|emerge sys-auth/thinkfinger}}&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;
On Ubuntu 8.10 - Intrepid Ibex you should just add the following line the the /etc/pam.d/common-auth file so it looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
....&lt;br /&gt;
# here are the per-package modules (the &amp;quot;Primary&amp;quot; block)&lt;br /&gt;
auth	sufficient	pam_thinkfinger.so&lt;br /&gt;
auth	[success=1 default=ignore]	pam_unix.so try_first_pass nullok_secure&lt;br /&gt;
# here's the fallback if no module succeeds&lt;br /&gt;
....&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 9.04, you don't need to edit manually, just type:&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|sudo /usr/lib/pam-thinkfinger/pam-thinkfinger-enable}}&lt;br /&gt;
&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 --acquire $USERNAME}}&lt;br /&gt;
&lt;br /&gt;
{{NOTE|This may not work for you. Please read the Intrepid Ibex point in the discussion to this page.}}&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 --acquire 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}} and run {{cmdroot|sudo /sbin/udevtrigger}}. If you are using a Debian-based distribution, it is likely you are affected by the following [http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=489831 bug] where you need to replace {{path|udevtrigger}} with {{path|udevadm trigger}} (with the space!) in order for the following to work. 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, add the following lines at the end of {{path|/etc/pam.d/gnome-screensaver}}:&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;
{{NOTE|The following steps do not need to be done in Ubuntu Intrepid as the bir files are handled differently.}}&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 and in Kubuntu 8.10 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;br /&gt;
&lt;br /&gt;
== Fix for the fingerprint reader getting too hot ==&lt;br /&gt;
&lt;br /&gt;
If you notice that your fingerprint reader occasionally gets very hot then you might be interested in this section. Thanks to Tino Keitel, he actually gave me this solution through the linux-thinkpad mailing list.&lt;br /&gt;
&lt;br /&gt;
First we need to determine if the reader is not on autosuspend mode.&lt;br /&gt;
Open a terminal and run:&lt;br /&gt;
&lt;br /&gt;
 for i in `find /sys/devices/*/*/usb* -name level` ; do echo -n &amp;quot;$i: &amp;quot; ; cat $i ; done&lt;br /&gt;
&lt;br /&gt;
We care about the devices that are with &amp;quot;on&amp;quot; state and we need to determine if one of those is the reader. So for each of those run something like:&lt;br /&gt;
&lt;br /&gt;
 cat /sys/devices/pci0000\:00/0000\:00\:1a.0/usb1/1-2/idVendor &lt;br /&gt;
 0483&lt;br /&gt;
 &lt;br /&gt;
 cat /sys/devices/pci0000\:00/0000\:00\:1a.0/usb1/1-2/idProduct &lt;br /&gt;
 2016&lt;br /&gt;
&lt;br /&gt;
Use the corresponding path of the devices that you got with &amp;quot;on&amp;quot; state and then compare the output with the output of the lsusb command. An example:&lt;br /&gt;
&lt;br /&gt;
 lsusb output: Bus 001 Device 004: ID 0483:2016 SGS Thomson Microelectronics Fingerprint Reader&lt;br /&gt;
&lt;br /&gt;
Which matches the output above (0483:2016). Once you have determined the path of your reader then become root with su - and:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;auto&amp;quot; &amp;gt; /sys/&amp;lt;path-to-device&amp;gt;/power/level&lt;br /&gt;
&lt;br /&gt;
After this, the fingerprint reader should be in &amp;quot;autosuspend&amp;quot; and will not get hot anymore. And it will still work as normal.&lt;br /&gt;
&lt;br /&gt;
This will only work for the current session. If you want to make this change persistent and have [http://linux-diag.sourceforge.net/Sysfsutils.html sysfsutils] installed, edit the file {{path|/etc/sysfs.conf}} and add the line&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;path-to-device&amp;gt;/power/level = auto&lt;br /&gt;
&lt;br /&gt;
Following the above example, that would be &lt;br /&gt;
&lt;br /&gt;
 devices/pci0000\:00/0000\:00\:1a.0/usb1/1-2/power/level = auto&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can install an init script:&lt;br /&gt;
&lt;br /&gt;
 sudo gedit /etc/init.d/ReaderNoMoreHot&lt;br /&gt;
&lt;br /&gt;
Paste the following into it:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #&lt;br /&gt;
 echo &amp;quot;auto&amp;quot; &amp;gt; /sys/&amp;lt;path-to-device&amp;gt;/power/level&lt;br /&gt;
&lt;br /&gt;
Save and close. Then:&lt;br /&gt;
&lt;br /&gt;
 sudo chmod 755 /etc/init.d/ReaderNoMoreHot&lt;br /&gt;
 sudo update-rc.d ReaderNoMoreHot defaults 90&lt;br /&gt;
&lt;br /&gt;
--[[User:Lunatico|Lunatico]] 19:19, 1 August 2008 (CEST), extended by --[[User:Michaelthomas h|Michaelthomas h]] 23:36, 9 August 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
For the init script above, you can use the following more elaborate script, which does all the work for you of identifying the &amp;lt;path-to-device&amp;gt;. This can be useful since the USB device id can change under various circumstances (kernel upgrade etc).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# find the fingerprint reader and change its power level to autosuspend&lt;br /&gt;
&lt;br /&gt;
usbname=&amp;quot;SGS Thomson Microelectronics Fingerprint Reader&amp;quot;&lt;br /&gt;
usbid=$(lsusb |grep &amp;quot;$usbname&amp;quot; |cut -d' ' -f6);&lt;br /&gt;
[[ -z $usbid ]] &amp;amp;&amp;amp; echo &amp;quot;USB Device \&amp;quot;$usbname\&amp;quot; not found&amp;quot; &amp;amp;&amp;amp; exit 1&lt;br /&gt;
&lt;br /&gt;
unset failed_bool&lt;br /&gt;
find /sys/devices/*/*/usb* -name idVendor -print | (&lt;br /&gt;
  while read vfile; do&lt;br /&gt;
    dir=$(dirname $vfile);&lt;br /&gt;
    vendor=$(&amp;lt;$vfile);&lt;br /&gt;
    product=$(&amp;lt;$dir/idProduct);&lt;br /&gt;
    if [[ $vendor:$product = $usbid ]]; then&lt;br /&gt;
      plevel_file=$dir/power/level&lt;br /&gt;
      old_level=$(&amp;lt;$plevel_file);&lt;br /&gt;
      [[ $old_level = auto ]] || echo auto &amp;gt;$plevel_file || failed_bool=1&lt;br /&gt;
      break;&lt;br /&gt;
    fi;&lt;br /&gt;
  done&lt;br /&gt;
  if [[ $failed_bool ]]; then&lt;br /&gt;
    echo &amp;quot;Failed to set the fingerprint reader's power level to 'auto'.&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
  fi&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is an alternate script. The code is cleaner and it's about 20x faster (updated for jaunty):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# find the fingerprint reader and change its power level to autosuspend&lt;br /&gt;
&lt;br /&gt;
find_manuf=STMicroelectronics&lt;br /&gt;
find_prod=&amp;quot;Biometric Coprocessor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
for devdir in /sys/class/usb_*/*/device; do&lt;br /&gt;
  [[ -r $devdir/manufacturer ]] || continue&lt;br /&gt;
  manuf=$(&amp;lt;$devdir/manufacturer)&lt;br /&gt;
  [[ $manuf = $find_manuf ]] || continue;&lt;br /&gt;
  prod=$(&amp;lt;$devdir/product)&lt;br /&gt;
  [[ $prod = $find_prod ]] || continue;&lt;br /&gt;
  # if we get here then we have the right device!&lt;br /&gt;
  plevel_file=$devdir/power/level&lt;br /&gt;
  old_level=$(&amp;lt;$plevel_file);&lt;br /&gt;
  # if it is already set properly then exit silently:&lt;br /&gt;
  [[ $old_level = auto ]] &amp;amp;&amp;amp; exit 0&lt;br /&gt;
  # if we successfully change it then exit silently:&lt;br /&gt;
  echo auto &amp;gt;$plevel_file &amp;amp;&amp;amp; exit 0&lt;br /&gt;
  echo &amp;quot;Failed to set the fingerprint reader's power level to 'auto'.&amp;quot;&lt;br /&gt;
  exit 1&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
# if we make it through the for loop without exiting, the search failed&lt;br /&gt;
echo &amp;quot;Could not find the $find_manuf $find_prod (fingerprint reader)&amp;quot;&lt;br /&gt;
exit 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
So, I decided to see if udev (on Ubuntu hardy) could do the job in this regard.  I put the following in {{path|/etc/udev/rules.d/99-fingerprint-reader.rules}} and IWFM:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ACTION!=&amp;quot;add&amp;quot;, GOTO=&amp;quot;fingerprint_end&amp;quot;&lt;br /&gt;
&lt;br /&gt;
SUBSYSTEM==&amp;quot;usb&amp;quot; ATTR{idVendor}==&amp;quot;0483&amp;quot;, ATTR{idProduct}==&amp;quot;2016&amp;quot;, RUN+=&amp;quot;/bin/sh -c 'echo auto &amp;gt; /sys/$devpath/power/level'&amp;quot;&lt;br /&gt;
&lt;br /&gt;
LABEL=&amp;quot;fingerprint_end&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[User:Bkuhn|Bkuhn]] 01:39, 12 August 2009 (UTC) (updated by [[User:liucougar|liucougar]] May 22, 2010 16:40 PST)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
A shorter, more compact, less error-prone udev-only alternative:&lt;br /&gt;
Put the following in {{path|/etc/udev/rules.d/fingerprint-reader.rules}}&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SYSFS{idVendor}==&amp;quot;0483&amp;quot;, SYSFS{idProduct}==&amp;quot;2016&amp;quot;, SUBSYSTEMS==&amp;quot;usb&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTR{power/level}=&amp;quot;auto&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Works on Ubuntu 10.10, should work on earlier versions as well.&lt;/div&gt;</summary>
		<author><name>Vegar</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=How_to_hotswap_Ultrabay_devices&amp;diff=39571</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=39571"/>
		<updated>2008-11-07T01:56:06Z</updated>

		<summary type="html">&lt;p&gt;Vegar: /* HAL support */ add PCI ID for T61&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 {{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 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;
&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;
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;
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;
&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), 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>Vegar</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=How_to_configure_the_TrackPoint&amp;diff=39502</id>
		<title>How to configure the TrackPoint</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=How_to_configure_the_TrackPoint&amp;diff=39502"/>
		<updated>2008-11-04T21:39:51Z</updated>

		<summary type="html">&lt;p&gt;Vegar: /* TrackPoint under Ubuntu 8.10 using HAL */ Remove duplicate line&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; |The [[Patch to enable advanced trackpoint configuration|kernel trackpoint driver]] is controlled by echoing values to special files. Common configuration options are outlined below.&lt;br /&gt;
{{NOTE|&lt;br /&gt;
*With kernels 2.6.19 and above config files for this driver are located in &amp;lt;tt&amp;gt;/sys/devices/platform/i8042/serio1&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*With kernels 2.6.13 (inclusive) to 2.6.19 (exclusive) config files for this driver are located in &amp;lt;tt&amp;gt;/sys/devices/platform/i8042/serio0/serio2&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*With kernels 2.6.11 (inclusive) to 2.6.13 (exclusive) config files for this driver are located in &amp;lt;tt&amp;gt;/sys/devices/platform/i8042/serio0&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*With kernels 2.6.9 (inclusive) to 2.6.11 (exclusive) config files for this driver are located in &amp;lt;tt&amp;gt;/proc/trackpoint&amp;lt;/tt&amp;gt;.&lt;br /&gt;
*Prior to kernel 2.6.9, configuration was not done through files but through command-line options to the psmouse module.  (Note this means you must compile psmouse as a module!)  See http://stephen.evanchik.com/node/16.&lt;br /&gt;
}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==General Configuration==&lt;br /&gt;
The configuration options are reflected by the files you can find in {{path|/sys/devices/platform/i8042/serio0/serio2}}. See the [[Patch to enable advanced trackpoint configuration|TrackPoint driver page]] for a complete list.&lt;br /&gt;
Configuration is done by echoing the appropriate values into these special files.&lt;br /&gt;
&lt;br /&gt;
If you want to set the sysfs parameters at boot, you can use the [http://linux-diag.sourceforge.net/Sysfsutils.html sysfsutils] and put the preferred value in /etc/sysfs.conf.&lt;br /&gt;
&lt;br /&gt;
==Most common Features==&lt;br /&gt;
The most common settings are '''Press to Select''', '''sensitivity''', '''speed''' and '''scrolling'''.&lt;br /&gt;
&lt;br /&gt;
===Press to Select===&lt;br /&gt;
Press to Select allows you to tap the control stick which will simulate a left click. You can enable this feature by typing the following in to a terminal (you may need to be root):&lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|echo -n 1 &amp;gt; /sys/devices/platform/i8042/serio0/serio2/press_to_select}}&lt;br /&gt;
&lt;br /&gt;
Press to Select should now be enabled. You can disable it in a similar manner:&lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|echo -n 0 &amp;gt; /sys/devices/platform/i8042/serio0/serio2/press_to_select}}&lt;br /&gt;
&lt;br /&gt;
You can use this script to automate the operation&lt;br /&gt;
&lt;br /&gt;
        #!/bin/bash&lt;br /&gt;
        if [ &amp;quot;$1&amp;quot; = &amp;quot;1&amp;quot; ]; then&lt;br /&gt;
                echo &amp;quot;Turning on tap on TrackPoint&amp;quot;&lt;br /&gt;
                echo -n 1 &amp;gt; /sys/devices/platform/i8042/serio0/serio2/press_to_select&lt;br /&gt;
                exit 0&lt;br /&gt;
        fi&lt;br /&gt;
        if [ &amp;quot;$1&amp;quot; = &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
                echo &amp;quot;Turning off tap on TrackPoint&amp;quot;&lt;br /&gt;
                echo -n 0 &amp;gt; /sys/devices/platform/i8042/serio0/serio2/press_to_select&lt;br /&gt;
                exit 0&lt;br /&gt;
        fi&lt;br /&gt;
        echo -n &amp;quot;Tap status: &amp;quot;&lt;br /&gt;
        cat /sys/devices/platform/i8042/serio0/serio2/press_to_select&lt;br /&gt;
&lt;br /&gt;
===Sensitivity &amp;amp; Speed===&lt;br /&gt;
Adjusting the speed and sensitivity of the TrackPoint requires echoing a value between 0 and 255 into the appropriate file. For example, for a speed of 120 and a sensitivity of 250, type the following into a terminal:&lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|echo -n 120 &amp;gt; /sys/devices/platform/i8042/serio0/serio2/speed}}&lt;br /&gt;
:{{cmdroot|echo -n 250 &amp;gt; /sys/devices/platform/i8042/serio0/serio2/sensitivity}}&lt;br /&gt;
&lt;br /&gt;
Feel free to experiment with your settings until you find a combination that is comfortable.&lt;br /&gt;
&lt;br /&gt;
When you satisfy your setting , add the two lines into /etc/rc.d/rc.local in order to avoid restoring the default setting every time the system reboots.&lt;br /&gt;
&lt;br /&gt;
===Scrolling===&lt;br /&gt;
====Using a kernel prior to 2.6.11====&lt;br /&gt;
The scrolling action is essentially the same as is used in the TrackPoint Windows drivers. To enable this feature, type the following in to a terminal (you may need to be root): &lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|echo -n 1 &amp;gt; /proc/trackpoint/scroll}}&lt;br /&gt;
&lt;br /&gt;
Then press the middle button and push the stick up and down to scroll. Similarly, to disable scrolling:&lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|echo -n 0 &amp;gt; /proc/trackpoint/scroll}}&lt;br /&gt;
&lt;br /&gt;
====Using the X server (kernel 2.6.11+)====&lt;br /&gt;
The scroll setting has been removed from the trackpoint driver in kernel versions 2.6.11 and above. Scroll emulation should now be handled in the X server.&lt;br /&gt;
&lt;br /&gt;
A nice side effect of that is, that middle button scrolling applies to any mouse and not just the TrackPoint interface, which can be a quite handy feature for desktop computers or people who prefer to use an external mouse, especially when scrolling through long lists or needing to use horizontal scrolling with a mouse which has only a vertical scroll wheel.&lt;br /&gt;
&lt;br /&gt;
The necessary functionality, known  as &amp;quot;EmulateWheelTimeout&amp;quot; allowing to use button 2 for a middle click, wasn't implemented in Xorg prior to 6.9/7.0. However, there was a patch included in most distributions packages of Xorg, which was announced [http://www.mail-archive.com/devel@xfree86.org/msg03333.html here]. You can find an updated version of the package in the experimental branch of {{Debian}} or try to build the mouse driver yourself with the information in the announcement. This has successfully been tried with FC3's 6.8.2 packages.&lt;br /&gt;
&lt;br /&gt;
Once this functionality is in the X.org, add these lines to your TrackPoint configuration section in {{path|/etc/X11/xorg.conf}}:&lt;br /&gt;
&lt;br /&gt;
        Option          &amp;quot;EmulateWheel&amp;quot;          &amp;quot;on&amp;quot;&lt;br /&gt;
        Option          &amp;quot;EmulateWheelButton&amp;quot;    &amp;quot;2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
It may also be necessary to add these lines:&lt;br /&gt;
&lt;br /&gt;
        Option &amp;quot;YAxisMapping&amp;quot; &amp;quot;4 5&amp;quot;&lt;br /&gt;
        Option &amp;quot;XAxisMapping&amp;quot; &amp;quot;6 7&amp;quot;&lt;br /&gt;
&lt;br /&gt;
which specify which buttons are mapped to motion in the vertical (Y) and horizontal (X) directions, respectively, in wheel emulation mode (see http://www.xfree86.org/current/mouse.4.html).&lt;br /&gt;
&lt;br /&gt;
{{HINT| Use the program &amp;quot;xev&amp;quot; to see, what mouse button identifiers are sent by your mouse/touchpad/trackpoint.&amp;lt;br /&amp;gt;You might want to try: &amp;quot;xev &amp;amp;#124; grep button&amp;quot;}}&lt;br /&gt;
{{HINT| If it does not work see if evdev is installed and remove it. On gentoo do the following:&amp;lt;br /&amp;gt;&lt;br /&gt;
eix xf86-input-evdev&amp;lt;br /&amp;gt;&lt;br /&gt;
emerge -C xf86-input-evdev&amp;lt;br /&amp;gt;&lt;br /&gt;
and then remove the evdev flag in make.conf INPUT_DEVICES}}&lt;br /&gt;
&lt;br /&gt;
So, a complete mouse section, that implements this nicely and works very well on my R51, even with a simultaneously connected USB mouse, looks like that (tried out today, 20th of September, 2006 on Dapper):&lt;br /&gt;
&lt;br /&gt;
  Section &amp;quot;InputDevice&amp;quot;&lt;br /&gt;
        Identifier  &amp;quot;Configured Mouse&amp;quot;&lt;br /&gt;
        Driver      &amp;quot;mouse&amp;quot;&lt;br /&gt;
        Option      &amp;quot;CorePointer&amp;quot;&lt;br /&gt;
        Option      &amp;quot;Device&amp;quot;              &amp;quot;/dev/input/mice&amp;quot;&lt;br /&gt;
        Option      &amp;quot;Protocol&amp;quot;            &amp;quot;ExplorerPS/2&amp;quot;&lt;br /&gt;
        Option      &amp;quot;Emulate3Buttons&amp;quot;     &amp;quot;on&amp;quot;&lt;br /&gt;
        Option      &amp;quot;Emulate3TimeOut&amp;quot;     &amp;quot;50&amp;quot;&lt;br /&gt;
        Option      &amp;quot;EmulateWheel&amp;quot;        &amp;quot;on&amp;quot;&lt;br /&gt;
        Option      &amp;quot;EmulateWheelTimeOut&amp;quot; &amp;quot;200&amp;quot;&lt;br /&gt;
        Option      &amp;quot;EmulateWheelButton&amp;quot;  &amp;quot;2&amp;quot;&lt;br /&gt;
        Option      &amp;quot;YAxisMapping&amp;quot;        &amp;quot;4 5&amp;quot;&lt;br /&gt;
        Option      &amp;quot;XAxisMapping&amp;quot;        &amp;quot;6 7&amp;quot;&lt;br /&gt;
        Option      &amp;quot;ZAxisMapping&amp;quot;        &amp;quot;4 5&amp;quot;&lt;br /&gt;
  EndSection&lt;br /&gt;
&lt;br /&gt;
The mappings for Y and Z are the same, since the &amp;quot;Z-Axis&amp;quot; refers to actual hardware scrolling wheels which usually scroll the screen along the Y-Axis. If there is no hardware scrolling wheel present, horizontal and vertical scrolling using the TrackPoint work fine without the Z-Axis line.&lt;br /&gt;
&lt;br /&gt;
Now restart X and hold down button 2 and move the mouse to scroll, or just press and release button 2 for a middle click.&lt;br /&gt;
&lt;br /&gt;
To make this work with the synaptics driver for the touchpad, you can add&lt;br /&gt;
        Option      &amp;quot;GuestMouseOff&amp;quot; &amp;quot;1&amp;quot;&lt;br /&gt;
to the synaptics device section. This will make the synaptics driver ignore the Trackpoint, so it will be handled by the mouse driver. This allowed me to disable the touchpad while making the TrackPoint work like it should.&lt;br /&gt;
&lt;br /&gt;
{{NOTE| With the above mouse section in my xorg.conf all this works like a charm: &lt;br /&gt;
*I can press the wheel on my external USB mouse and move the mouse up and down for scrolling&lt;br /&gt;
*or I can just use the wheel on the external mouse for scrolling&lt;br /&gt;
*or pressing the MMB button of the trackpoint and use the trackpoint for scrolling.&lt;br /&gt;
*Even horizontal scrolling works automagically in Konqueror, for Firefox/Opera see below.&lt;br /&gt;
&lt;br /&gt;
Simultaneously I can use &lt;br /&gt;
*a press on the external mouse's wheel &lt;br /&gt;
*or the MMB of the trackpoint&lt;br /&gt;
&lt;br /&gt;
for pasting the buffer. Lovely! :) }}&lt;br /&gt;
&lt;br /&gt;
{{HINT| If you don't use the middle-mouse-button for pasting and sometimes pasting things by mistake while scrolling (witch is really odd) simply set the &amp;quot;EmulateWheelTimeOut&amp;quot; to &amp;quot;1&amp;quot; as a (bloody) workaround. Middle click will only possible with pressing left and right button simultaneously!}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===== EmulateWheelTimeout temporarily broken (-&amp;gt; fix for Ubuntu Dapper) ===== &lt;br /&gt;
&lt;br /&gt;
Unfortunately, there was a regression so that EmulateWheelTimeout was broken in X.org 6.9.0, and fixed&lt;br /&gt;
on March 20th, 2006. &lt;br /&gt;
You can see the [https://bugs.freedesktop.org/show_bug.cgi?id=5071 primary bug report] here, and also reports on the [http://qa.mandriva.com/show_bug.cgi?id=21196 Mandriva] and [http://lists.debian.org/debian-x/2006/01/msg00249.html Debian] ([http://bugs.debian.org/346098 #346098], [http://bugs.debian.org/320136 #320136]) packages.&lt;br /&gt;
&lt;br /&gt;
Unfortunately, this bug is still present in Ubuntu Dapper Drake's xserver-xorg-input-mouse package (version 1.0.3.1+cvs.20060109-0ubuntu1)!&lt;br /&gt;
&lt;br /&gt;
{{HINT|xserver-xorg-input-mouse (version 1.0.3.1+cvs.20060109-0ubuntu1.1) is in dapper-updates since July 3rd, 2006. You don't need to patch it anymore.}}&lt;br /&gt;
&lt;br /&gt;
Use the following procedure to make it (middle button scrolling &amp;amp; middle button pasting) work:&lt;br /&gt;
&lt;br /&gt;
:{{cmduser|cd /desired/path &amp;amp;&amp;amp; mkdir tmp &amp;amp;&amp;amp; cd tmp}} (create temporary directory somewhere)&lt;br /&gt;
:{{cmduser|sudo nano /etc/apt/sources.list}} (insert/uncomment the deb-src lines, save and exit)&lt;br /&gt;
:{{cmduser|sudo apt-get update}}&lt;br /&gt;
:{{cmduser|apt-get source xserver-xorg-input-mice}} (in order to get the source code)&lt;br /&gt;
:{{cmduser|sudo aptitude install xserver-xorg-dev}} (this package and the packages it depends on are needed in order to compile the source code, use aptitude for easy removal later on)&lt;br /&gt;
:{{cmduser|cd xserver-xorg-input-mouse-1.0.3.1+cvs.20060109/}}&lt;br /&gt;
:{{cmduser|wget http://librarian.launchpad.net/2639933/xserver-xorg-input-mouse_1.0.3.1+cvs.20060109-0ubuntu2.debdiff}} (downloads the patch that fixes the bug)&lt;br /&gt;
:{{cmduser|patch -p1 &amp;lt; xserver-xorg-input-mouse_1.0.3.1+cvs.20060109-0ubuntu2.debdiff}} (applies the bug fix)&lt;br /&gt;
:{{cmduser|fakeroot dpkg-buildpackage}} (rebuilds the package... watch out for errors and install other missing packages)&lt;br /&gt;
:{{cmduser|sudo dpkg -i ../xserver-xorg-input-mouse_1.0.3.1+cvs.20060109-0ubuntu2_i386.deb}} (installs the rebuilt built package)&lt;br /&gt;
:{{cmduser|sudo aptitude remove xserver-xorg-dev}} (removes the packages needed to rebuild the package)&lt;br /&gt;
&lt;br /&gt;
Hope it works for you, it did work for me!&lt;br /&gt;
CrypTom&lt;br /&gt;
&lt;br /&gt;
===== Older versions of X.org =====&lt;br /&gt;
&lt;br /&gt;
For older versions of Xorg or for Xfree86 ({{path|/etc/X11/XF86Config}}) try this:&lt;br /&gt;
&lt;br /&gt;
       Option          &amp;quot;Emulate3Buttons&amp;quot;       &amp;quot;true&amp;quot;&lt;br /&gt;
       Option          &amp;quot;EmulateWheel&amp;quot;          &amp;quot;true&amp;quot;&lt;br /&gt;
       Option          &amp;quot;EmulateWheelButton&amp;quot;    &amp;quot;2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Now restart X and hold down button two and move the mouse for scrolling. To get a middle click, press buttons 1 and 3 simultaneously.&lt;br /&gt;
&lt;br /&gt;
==Soft Transparent Mode==&lt;br /&gt;
If you wish to connect a special device to the external PS/2 port, you should consider using &amp;quot;Soft Transparent Mode&amp;quot; so that the TrackPoint controller does not interpret any commands sent to the external PS/2 port. You can enable soft transparent mode by typing the following in to a terminal:&lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|echo -n 1 &amp;gt; /sys/devices/platform/i8042/serio0/serio2/transparent}}&lt;br /&gt;
&lt;br /&gt;
Disabling soft transparent mode is similar:&lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|echo -n 0 &amp;gt; /sys/devices/platform/i8042/serio0/serio2/transparent}}&lt;br /&gt;
&lt;br /&gt;
==Modify trackpoint parameter permanently in trackpoint.h==&lt;br /&gt;
If you do not want to run a script to reconfigure the trackpoint&lt;br /&gt;
you can change the default settings in the trackpoint header file that is located in&lt;br /&gt;
 /usr/src/&amp;lt;KERNEL_VERSION&amp;gt;/drivers/input/mouse/trackpoint.h.&lt;br /&gt;
&lt;br /&gt;
First you must convert the values (decimal numbers) you normaly echo to /sys/[...] to hex:&lt;br /&gt;
&lt;br /&gt;
'''echo -e 'obase=16;&amp;lt;DECIMAL_NUMBER&amp;gt;' | bc'''&lt;br /&gt;
&lt;br /&gt;
Then simply replace the default hex values in trackpoint.h, run 'make &amp;amp;&amp;amp; make modules_install' to recompile and install psmouse.ko (should be compiled as module)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example patch (speed=100, sensitivity=190, press_to_select=1):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 --- trackpoint.h.orig   2006-01-17 16:18:30.000000000 +0100&lt;br /&gt;
+++ trackpoint.h        2006-01-17 16:25:47.000000000 +0100&lt;br /&gt;
@@ -108,9 +108,9 @@&lt;br /&gt;
 /*&lt;br /&gt;
  * Default power on values&lt;br /&gt;
  */&lt;br /&gt;
-#define TP_DEF_SENS            0x80&lt;br /&gt;
+#define TP_DEF_SENS            0xBE&lt;br /&gt;
 #define TP_DEF_INERTIA         0x06&lt;br /&gt;
-#define TP_DEF_SPEED           0x61&lt;br /&gt;
+#define TP_DEF_SPEED           0x64&lt;br /&gt;
 #define TP_DEF_REACH           0x0A&lt;br /&gt;
&lt;br /&gt;
 #define TP_DEF_DRAGHYS         0xFF&lt;br /&gt;
@@ -123,7 +123,7 @@&lt;br /&gt;
&lt;br /&gt;
 /* Toggles */&lt;br /&gt;
 #define TP_DEF_MB              0x00&lt;br /&gt;
-#define TP_DEF_PTSON           0x00&lt;br /&gt;
+#define TP_DEF_PTSON           0x01&lt;br /&gt;
 #define TP_DEF_SKIPBACK                0x00&lt;br /&gt;
 #define TP_DEF_EXT_DEV         0x01&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Configure firefox for using trackpoint horizontal scrolling==&lt;br /&gt;
Vertical Scrolling seems to work out of the box in firefox if you followed the steps above.&lt;br /&gt;
Anyway, there is a problem when you don't scroll exactly vertical, because horizontal scrolling turns into&lt;br /&gt;
browser BACK/FORWARD commands. &lt;br /&gt;
You can avoid this by typing about:config + ENTER in the address bar of firefox.&lt;br /&gt;
You have to adjust the following options:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mousewheel.horizscroll.withcontrolkey.action = 3;&lt;br /&gt;
mousewheel.horizscroll.withcontrolkey.numlines = 1; &lt;br /&gt;
mousewheel.horizscroll.withcontrolkey.sysnumlines = true;&lt;br /&gt;
&lt;br /&gt;
mousewheel.horizscroll.withnokey.action = 0;&lt;br /&gt;
mousewheel.horizscroll.withnokey.numlines = 1;&lt;br /&gt;
mousewheel.horizscroll.withnokey.sysnumlines = true;&lt;br /&gt;
&lt;br /&gt;
mousewheel.horizscroll.withshiftkey.action = 1;&lt;br /&gt;
mousewheel.horizscroll.withshiftkey.numlines = 1;&lt;br /&gt;
mousewheel.horizscroll.withshiftkey.sysnumlines = true;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
FWIW, you can change only the following value to remove the browser BACK/FORWARD commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mousewheel.horizscroll.withnokey.action = 0;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
With that, you can still go BACK/FORWARD by pressing together the shift or the alt key, while with the control key you increase or decrease the font size.&lt;br /&gt;
&lt;br /&gt;
==Configure Opera for using trackpoint horizontal scrolling==&lt;br /&gt;
You'll experience the same annoying problem with the popular browser Opera. To fix this you need to edit the configfile &amp;lt;tt&amp;gt;standard_mouse.ini&amp;lt;/tt&amp;gt; in e.g. /usr/share/opera/ini/ (Debian) or /opt/opera/share/opera/ini/ (Gentoo) and comment out the following lines&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Button6                                                        = Back&lt;br /&gt;
Button7                                                        = Forward&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
so they look like that&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
;Button6                                                        = Back&lt;br /&gt;
;Button7                                                        = Forward&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Remember, Button6 and Button7 do not so coincidental correspond with our X configuration we know from above:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Option &amp;quot;YAxisMapping&amp;quot; &amp;quot;6 7&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After this change you will be able to scroll vertically and horizontally with your middle button.&lt;br /&gt;
&lt;br /&gt;
==Fixing trackpoint under Ubuntu 7.10 Gutsy Gibbon==&lt;br /&gt;
===Using trackpoint deamon===&lt;br /&gt;
My default Ubuntu Gutsy (running on an X61s) would give the following error messages when running the trackpoint daemon. Running&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     /etc/init.d/trackpoint restart&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
caused a bunch of error messages, as the wrong device was in&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        /etc/trackpoint/trackpoint.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I fixed this by changing:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        echo -n  &amp;gt; /sys/devices/platform/i8042/serio0/serio2/sensitivity&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
        echo -n  &amp;gt; /sys/devices/platform/i8042/serio1/sensitivity&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
in /etc/trackpoint/trackpoint.conf.&lt;br /&gt;
&lt;br /&gt;
In addition, Ubuntu ran the appropriate /etc/init.d/trackpoint script on booting, but would give a bunch of errors (which, oddly, I could never find in any of the log files).&lt;br /&gt;
&lt;br /&gt;
It seems that it was running the scripts too early in the boot sequence. The Gutsy package provided&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    /etc/rc2.d/S20trackpoint&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
so I renamed this to S99trackpoint (and in all the other rc.? directories) and it now works on boot.&lt;br /&gt;
&lt;br /&gt;
===Editing the kernel config files===&lt;br /&gt;
Another way of configuring the trackpoint without using the trackpoint daemon is to edit the values of the trackpoint files which, BTW, are located in&lt;br /&gt;
 /sys/devices/platform/i8042/serio1/serio2.&lt;br /&gt;
&lt;br /&gt;
The script should be executed during boot. This can be done in an init script (e.g. /etc/bootmisc.sh in some distros)&lt;br /&gt;
&lt;br /&gt;
Script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#! /bin/sh&lt;br /&gt;
&lt;br /&gt;
#&lt;br /&gt;
# configuration du trackpoint&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# vitesse&lt;br /&gt;
echo -n 120 &amp;gt; /sys/devices/platform/i8042/serio1/serio2/speed&lt;br /&gt;
&lt;br /&gt;
# sensibilité&lt;br /&gt;
echo -n 250 &amp;gt; /sys/devices/platform/i8042/serio1/serio2/sensitivity &lt;br /&gt;
&lt;br /&gt;
# press to select&lt;br /&gt;
echo -n 1 &amp;gt; /sys/devices/platform/i8042/serio1/serio2/press_to_select&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
===An Ubuntu/Fedora example===&lt;br /&gt;
Another script that I've created seems to work with all versions of Ubuntu/Fedora that I've been able to try (comment out and uncomment the appropriate lines for fedora/ubuntu as necessary)&lt;br /&gt;
Place in /etc/rc.local or equivalent for your distro:&lt;br /&gt;
&lt;br /&gt;
Script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#*************************&lt;br /&gt;
## START TRACKPOINT CONFIG&lt;br /&gt;
#*************************&lt;br /&gt;
&lt;br /&gt;
# For fedora (the slash after &amp;quot;speed&amp;quot; is returned)&lt;br /&gt;
# TRACKPATH=$(find /sys -print0 | grep -FzZ &amp;quot;/serio2/speed&amp;quot; | sed s^speed/^^)&lt;br /&gt;
&lt;br /&gt;
# For ubuntu (the slash after &amp;quot;speed&amp;quot; is not returned)&lt;br /&gt;
TRACKPATH=$(find /sys -print0 | grep -FzZ &amp;quot;/serio2/speed&amp;quot; | sed s/speed//)&lt;br /&gt;
&lt;br /&gt;
## Select &amp;quot;press_to_select&amp;quot; on the trackpoint input device&lt;br /&gt;
## We need to specify the TRACKPATH above because the device under &amp;quot;serio#&amp;quot;&lt;br /&gt;
## changes between system boots. (We first test to see if the file we want&lt;br /&gt;
## to modify exists, if it does, we make the change&lt;br /&gt;
#[ -f $TRACKPATH/press_to_select ] &amp;amp;&amp;amp; echo -n 1 &amp;gt; $TRACKPATH/press_to_select&lt;br /&gt;
&lt;br /&gt;
## Adjust the speed setting of the trackpoint input device&lt;br /&gt;
[ -f $TRACKPATH/speed ] &amp;amp;&amp;amp; echo -n 120 &amp;gt; $TRACKPATH/speed &lt;br /&gt;
## Adjust the sensitivity setting of the trackpoint input device&lt;br /&gt;
[ -f $TRACKPATH/sensitivity ] &amp;amp;&amp;amp; echo -n 200 &amp;gt; $TRACKPATH/sensitivity&lt;br /&gt;
&lt;br /&gt;
#***********************&lt;br /&gt;
## END TRACKPOINT CONFIG&lt;br /&gt;
#***********************&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==TrackPoint under Ubuntu 8.10 using HAL==&lt;br /&gt;
&lt;br /&gt;
Because Ubuntu 8.10 uses HAL you must do the following to get the scrolling working:&lt;br /&gt;
(see: http://forum.ubuntuusers.de/topic/mouse-wheel-emulation-in-xorg.conf/?highlight=hal+trackpoint#post-1558282 )&lt;br /&gt;
&lt;br /&gt;
Create the file '''/etc/hal/fdi/policy/mouse-wheel.fdi''' as root with the following content:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;match key=&amp;quot;info.product&amp;quot; string=&amp;quot;TPPS/2 IBM TrackPoint&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;merge key=&amp;quot;input.x11_options.EmulateWheel&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;true&amp;lt;/merge&amp;gt;&lt;br /&gt;
 &amp;lt;merge key=&amp;quot;input.x11_options.EmulateWheelButton&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;2&amp;lt;/merge&amp;gt;&lt;br /&gt;
 &amp;lt;merge key=&amp;quot;input.x11_options.YAxisMapping&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;4 5&amp;lt;/merge&amp;gt;&lt;br /&gt;
 &amp;lt;merge key=&amp;quot;input.x11_options.XAxisMapping&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;6 7&amp;lt;/merge&amp;gt;&lt;br /&gt;
 &amp;lt;merge key=&amp;quot;input.x11_options.Emulate3Buttons&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;true&amp;lt;/merge&amp;gt;&lt;br /&gt;
 &amp;lt;merge key=&amp;quot;input.x11_options.EmulateWheelTimeout&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;200&amp;lt;/merge&amp;gt;&lt;br /&gt;
&amp;lt;/match&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note : I needed to reboot my TP for the changes to take effect.&lt;br /&gt;
&lt;br /&gt;
https://wiki.ubuntu.com/X/Config&lt;/div&gt;</summary>
		<author><name>Vegar</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Installing_Ubuntu_7.04_(Feisty_Fawn)_on_a_ThinkPad_T61&amp;diff=33194</id>
		<title>Installing Ubuntu 7.04 (Feisty Fawn) on a ThinkPad T61</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Installing_Ubuntu_7.04_(Feisty_Fawn)_on_a_ThinkPad_T61&amp;diff=33194"/>
		<updated>2007-09-17T14:40:25Z</updated>

		<summary type="html">&lt;p&gt;Vegar: /* HDAPS */ add comment about the hdaps inverted parameter&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;On the T61, [[Installing_Ubuntu_7.10_(Gutsy_Gibbon)_Tribe_5_on_a_ThinkPad_T61|Ubuntu 7.10 (Gutsy Gibbon)]] is recommended instead of 7.04 because video drivers and wifi, among other issues, work by default.&lt;br /&gt;
recomended&lt;br /&gt;
&lt;br /&gt;
===My DVD drive/CD burner/DVD burner doesn't work (Solved)===&lt;br /&gt;
&lt;br /&gt;
Follow these instructions to enable your [http://en.wikipedia.org/wiki/Optical_drive optical drive]:&amp;lt;br&amp;gt;&lt;br /&gt;
1) Reboot your T61. Press the ThinkVantage button quickly when you see the ThinkPad screen and then press F1 enter [http://en.wikipedia.org/wiki/BIOS BIOS].&amp;lt;br&amp;gt;&lt;br /&gt;
2) In BIOS, select Configure -&amp;gt; Serial ATA.&amp;lt;br&amp;gt;&lt;br /&gt;
3) Now, select Compatibility instead of AHCI.&amp;lt;br&amp;gt;&lt;br /&gt;
4) Exit BIOS and start your computer normally.&amp;lt;br&amp;gt;&lt;br /&gt;
5) Go to Places -&amp;gt; Computer, right-click your CD-ROM/DVD/etc. drive, and select Properties. Then, go to Drive -&amp;gt; Settings. Set the mount point to ''cdrom'' (regardless of whether it's a CD-ROM drive, DVD drive, etc.).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
At first, the Ubuntu Live CD would not start at all, this seems to be a problem with the SATA AHCI driver.  I had to go into the BIOS and change the SATA driver from ACHI to compatibility (What is the difference? Am I loosing performance?).&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
After you've installed and booted, try the advice from [[Problems_with_SATA_and_Linux]]. Do this:&lt;br /&gt;
 '''# echo options libata atapi_enabled=1&amp;gt;/etc/modprobe.d/atapienable &amp;amp;&amp;amp; update-initramfs -u'''&lt;br /&gt;
Then try turning AHCI back on in the BIOS. On a custom-built 2.6.21.5 kernel, my DVD drive appears as /dev/hda and DMA works.&lt;br /&gt;
--[[User:Kc8tbe|Kc8tbe]] 12:45, 1 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
If your DVD drive does not appear, modprobe pata-jmicron and ide-generic.&lt;br /&gt;
--[[User:Antikristian|Antikristian]] 01:23, 30 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
===NVIDIA Quadro NVS 140M (Solved)===&lt;br /&gt;
After initial issues like those explained above in the SATA Issues, I received the xorg error 'fatal error: no screens found'.  I was able to boot into Safe Graphics Mode and run the installer, though I had to move both window manager bars to see enough of the install window to use it.&lt;br /&gt;
&lt;br /&gt;
Alternatively, you can download the drivers via wget in a console. Take care to follow the instructions in &lt;br /&gt;
[http://www.nvnews.net/vbulletin/showthread.php?t=72490 the NVidia Forum] and uninstall all the packages wit apt-get remove, as described.&lt;br /&gt;
Then run the nvidia installer.&lt;br /&gt;
&lt;br /&gt;
Remember that, after you upgrade the kernel, you also have to re-install the drivers.&lt;br /&gt;
&lt;br /&gt;
After installing the NVIDIA drivers, your laptop may not wake after suspend or hibernation.  I followed these instructions to fix it [https://help.ubuntu.com/community/NvidiaLaptopBinaryDriverSuspend Ubuntu Community Help].&lt;br /&gt;
&lt;br /&gt;
====Alternative NVIDIA driver installation====&lt;br /&gt;
Instead of installing the NVIDIA drivers manually as described above, you can try using [http://www.albertomilone.com/nvidia_scripts1.html Envy]. It automatically installs the latest NVIDIA drivers, and cleans up any previous installations.&lt;br /&gt;
&lt;br /&gt;
=== Intel Graphics Media Accelerator X3100 (Chipset GM965) (Solved)===&lt;br /&gt;
After that the CD seemed to boot but the screen was just garbage [http://shadowarts.nonlogic.org/projects/thinkpad/screen_garbage.jpg Picture].  In order to get around that issue I had to go back and download the Alternate CD, which allows you to install in text only mode. From here, the text-only install went okay. Changing the VGA settings on the regular CD worked for me. &lt;br /&gt;
&lt;br /&gt;
When I booted up after the installation, I was still getting the same garbage on the screen.  To resolve this I edited my [http://shadowarts.nonlogic.org/projects/thinkpad/xorg.conf xorg.conf] file as shown.  I also had to install the latest kernel for Feisty, as the one off of the install disk did have have /dev/agpgart.  And I could then use X11.  There were still some issues however.  The screen seemed somewhat fuzzy.  This was a little more challenging of a fix...  I found [http://www.spinics.net/lists/xorg/msg25099.html this] mailing list posting, according to it, there was a small glitch in the driver.  To fix it:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
apt-get source xserver-xorg-video-intel&lt;br /&gt;
cd xserver-xorg-video-intel-1.9.94/&lt;br /&gt;
vim src/i830_lvds.c&lt;br /&gt;
Goto line 230 and delete (PFIT_ENABLE | VERT_AUTSCALE ....);, replacing it with 0;  then quit vim&lt;br /&gt;
dpkg-buildpackage -rfakeroot -uc -b&lt;br /&gt;
cd ..&lt;br /&gt;
dpkg -i xserver-xorg-video-intel_1.9.94-lubuntu3_amd64.deb (wont be amd64 with a 32-bit install)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now reboot your computer, and it should work.  **NOTE: For some reason just restarting X didn't fix it, seems like you must reboot.**  At this point you should have a nice, crisp display.&lt;br /&gt;
&lt;br /&gt;
I am still working on aiglx and compiz (switching desktops on a cube doesnt seem to work, though I have some ideas...).  There are some issues with OpenGL apps freezing Xorg as well, but the standard 2D desktop works flawlessly.&lt;br /&gt;
----&lt;br /&gt;
It doesn't seem to be necessary to modify the soruce of xserver-xorg-video-intel anymore, but 3D-acceleration doesn't seem to be stable yet and kdm occasionally needs to be restarted after a login attempt.--[[User:Kc8tbe|Kc8tbe]] 12:49, 1 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
I was able to use the normal feisty install disk by changing the SATA setting in BIOS, then change the resolution to 800x600 prior to install, then sudo apt-get update and upgrade, and then sudo apt-get install xserver-xorg-video-intel, then change xorg.conf to match link above and 2D graphics work fine.  Jul 18, 2008 - John E&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
It seems that everything works fine when using &amp;quot;apt pinning&amp;quot; and updating the xserver-xorg-video-intel, mesa and other packages to the versions provided by Gutsy. I did the following and the resolution and Compiz Fusion are working fine at the moment. The original source of the steps described below can be found here: [http://techreport.com/forums/viewtopic.php?p=714998#714998]&lt;br /&gt;
&lt;br /&gt;
'''Instructions:'''&lt;br /&gt;
* Make a new file /etc/apt/preferences&lt;br /&gt;
* In the preferences file, put: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Package: *&lt;br /&gt;
Pin: release a=feisty&lt;br /&gt;
Pin-Priority: 700&lt;br /&gt;
&lt;br /&gt;
Package: *&lt;br /&gt;
Pin: release a=gutsy&lt;br /&gt;
Pin-Priority: 200&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Now, edit your sources.list and copy the main and restricted (and others if you want) repo lines replacing feisty with gutsy: &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# original&lt;br /&gt;
deb http://archive.ubuntu.com/ubuntu feisty main restricted universe multiverse&lt;br /&gt;
deb-src http://security.ubuntu.com/ubuntu feisty main restricted universe multiverse&lt;br /&gt;
&lt;br /&gt;
# your addition&lt;br /&gt;
deb http://archive.ubuntu.com/ubuntu gutsy main restricted universe multiverse&lt;br /&gt;
deb-src http://security.ubuntu.com/ubuntu gutsy main restricted universe multiverse&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Now run:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get update&lt;br /&gt;
sudo apt-get -t gutsy install xserver-xorg-video-intel&lt;br /&gt;
sudo apt-get -t gutsy install linux&lt;br /&gt;
sudo apt-get -t gutsy install libgl1-mesa-dri&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Now reboot.&lt;br /&gt;
&lt;br /&gt;
Probably now you have the weird effect that your GUI is scaled wrong and doesn't fill the full width of the monitor. To fix that, open your xorg.conf and make the following changes:&lt;br /&gt;
* Add the following section to your xorg.conf&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Section &amp;quot;Monitor&amp;quot;&lt;br /&gt;
    Identifier &amp;quot;TVOutput&amp;quot;&lt;br /&gt;
    Option &amp;quot;Disable&amp;quot; &amp;quot;true&amp;quot;&lt;br /&gt;
EndSection&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Then in the &amp;quot;Device&amp;quot; section add the following line:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Option &amp;quot;monitor-TV&amp;quot; &amp;quot;TVOutput&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should fix the scaling problem and now everything should work fine.&lt;br /&gt;
--[[User:Shuk|Shuk]] 02:26, 10 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
===ThinkFinger===&lt;br /&gt;
Ubuntu does not come with a package for thinkfinger.  Downloading the most recent source and building it was simple enough: Download most recent version (0.3 at time of writing)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo apt-get install libpam0g-dev libusb-dev&lt;br /&gt;
tar xvzf thinkfinger-0.3.tar.gz&lt;br /&gt;
cd thinkfinger-0.3/&lt;br /&gt;
./configure --with-securedir=/lib/security --with-birdir=/etc/pam_thinkfinger&lt;br /&gt;
make -j5             (hey its dual core!)&lt;br /&gt;
sudo make install&lt;br /&gt;
sudo ldconfig&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Configuring it is easy as well, open /etc/pam.d/common-auth:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auth sufficient pam_thinkfinger.so&lt;br /&gt;
auth required pam_unix.so try_first_pass nullok_secure&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Create the data directory and set your fingerprint:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
subo mkdir /etc/pam_thinkfinger&lt;br /&gt;
sudo tf-tool --add-user &amp;lt;username&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
It will all be setup.  (I found this somewhere on the web, I wish I could give a source but I'm afraid I cant find it, thank you Anonymous!).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*I am having trouble. I get this error with the last command on the above instructions &amp;quot;tf-tool: error while loading shared libraries: libthinkfinger.so.0: cannot open shared object file: No such file or directory&amp;quot;&lt;br /&gt;
*type &amp;quot;ldconfig&amp;quot; as root after make insall. Then the it will work! (pls somebody refresh this article, im not familiar with wiki, sorry)&lt;br /&gt;
&lt;br /&gt;
===HDAPS===&lt;br /&gt;
This seems to be working fine now, I just follow the step on [[How_to_protect_the_harddisk_through_APS]].  Using hdaps-gl does the inverse of the accelerometer, though it's not really a big deal, the harddrive protection should still work.&lt;br /&gt;
&lt;br /&gt;
Assuming that the (improved) hdaps code bundled with tp_smapi is being used, editing the transform_axis function in tp_smapi-0.32/hdaps.c will allow for the proper operation of the accelerometer. Assuming that the accelerometer is rotated 90 degrees from its proper orientation (as it is with the X61), the following code will suffice:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
static void transform_axes(int *x, int *y)&lt;br /&gt;
{&lt;br /&gt;
	int temp = *x;&lt;br /&gt;
	*x = -*y;&lt;br /&gt;
	*y = temp;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For those paying attention in linear algebra, this corresponds to a linear transformation that rotates a 2D coordinate system 90 degrees.&lt;br /&gt;
--[[User:Mbsullivan|Mbsullivan]] 04:21, 27 August 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
Instead of editing the code, you can just pass the inverted=1 parameter when loading the module; modprobe hdaps inverted=1&lt;br /&gt;
--[[User:Vegar|Vegar]] 14:40, 17 September 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
===WiFi===&lt;br /&gt;
If you have Intel 4965AGN WiFi card, you have to use ndiswrapper OR use backported kernel from Ubuntu Gutsy (Anybody have howto?) and use following: &lt;br /&gt;
http://kuscsik.blogspot.com/2007/06/how-to-install-intel-4965-wireless.html&lt;br /&gt;
&lt;br /&gt;
'''Note:'''&lt;br /&gt;
Do not use the latest versions of iwlwifi and mac80211. For me with Gutsy mac80211-8.0.2 and iwlwifi-0.0.42 work with the latest firmware. No further modification needed.&lt;br /&gt;
&lt;br /&gt;
If you have the Atheros card, Ubuntu should automatically install madwifi, which works out of the box&lt;br /&gt;
----&lt;br /&gt;
Works for me with iwlwifi-4965-ucode-4.44.15, iwlwifi-0.0.34, and mac80211-8.0.1. The catch is, you need to patch your kernel with mac80211, which will fail at compile time with the stock Ubuntu sources. Worked for me with vanilla 2.6.21.5 sources patched for tp_smapi and hdaps protect. Make sure to disable CONFIG_NET_WIRELESS_RTNETLINK in your kernel config.&lt;br /&gt;
&lt;br /&gt;
You can download what you need for for iwlwifi and mac80211 from &lt;br /&gt;
http://intellinuxwireless.org .--[[User:Kc8tbe|Kc8tbe]] 13:00, 1 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
Works for me with vanilla kernel v2.6.22.1, ucode 4.44.17, iwlwifi 0.1.2 and mac80211 9.0.2. --[[User:Mbsullivan|Mbsullivan]] 13:40, 24 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
You can also use Kernel 2.6.22.9 and Ubuntu Modules 2.6.22.9 from Gutsy and you will not need to compile anything! Works very well.&lt;br /&gt;
&lt;br /&gt;
===Keyboard/Apostrophe issues (Solved)===&lt;br /&gt;
When installing with the alternate CD, Ubuntu asks you if your keyboard as a character that appears to be a quotation mark (this character: &amp;quot;). If you're using a US English keyboard, say no; the character is actually an umlaut. [[User:SteveSims|SteveSims]] 02:15, 19 August 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
My apostrophe key outputs ´ instead of '. I went to System -&amp;gt; Preferences -&amp;gt; Keyboard and could not figure out how to fix it. [[User:SteveSims|SteveSims]] 21:50, 11 August 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Try switching your keyboard layout to US-Classic, and putting it on the top of the list.  After you do that, it works perfectly. --[[User:Adamacious|Adamacious]] 04:29, 13 August 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
::There is no &amp;quot;US Classic&amp;quot; option. Here's what I have:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Image:Keyboard_options.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
[[User:SteveSims|SteveSims]] 02:17, 15 August 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::It started working, even though I changed nothing. I'm running it as a Macintosh US English keyboard. [[User:SteveSims|SteveSims]] 17:20, 15 August 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
::::Sorry Steve, what you had to do (and what you did) is select US English, as in the header in the list.  It doesn't look selectable, but it is.--[[User:Adamacious|Adamacious]] 20:02, 22 August 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
===Audio===&lt;br /&gt;
====Fixed in Gutsy====&lt;br /&gt;
As of 29 August 2007 and [https://bugs.launchpad.net/bugs/122560 this issue], the 2.6.22-10 kernel in Gutsy Gibbon supports audio out-of-the-box (as well as WiFi and other things).  Installing the Gutsy kernel via apt and rebooting fixed audio for me, both speakers and headphones.  Remaining issues:&lt;br /&gt;
&lt;br /&gt;
* The mute button mutes audio, but doesn't unmute.  Pressing volume up or down does unmute it, but has no effect on volume.&lt;br /&gt;
* KMix's system tray volume control has no effect because it thinks it's setting the headphones while both outputs are using the speaker settings, but opening KMix and setting the PCM volume works.  --lgarfiel&lt;br /&gt;
&lt;br /&gt;
====Python script fix (slightly easier fix)====&lt;br /&gt;
First, you have to download the source for the [http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.22.5.tar.gz latest Linux kernel] (2.6.22-5 as of August 26th, 2007) and compile it, something most users cannot do. However, you won't have to compile ALSA and its modules from source if you do it this way.&lt;br /&gt;
&lt;br /&gt;
1) Download the [http://launchpadlibrarian.net/8899521/t61_audio_hack.py T61 audio hack] from [[Launchpad]]. Move it to a convenient folder (e.g., not your desktop).&amp;lt;br&amp;gt;&lt;br /&gt;
2) Go to System -&amp;gt; Preferences -&amp;gt; Sessions -&amp;gt; Startup Programs -&amp;gt; Add.&amp;lt;br&amp;gt;&lt;br /&gt;
3) Name it whatever you want. Choose something simple like &amp;quot;Python audio fix.&amp;quot;&amp;lt;br&amp;gt;&lt;br /&gt;
4) Go to Command, and enter the following (with quotation marks):&lt;br /&gt;
&amp;lt;pre&amp;gt;gksudo &amp;lt;nowiki&amp;gt;&amp;quot;[THE FOLDER THAT T61_AUDIO_HACK.PY IS IN]&amp;lt;/nowiki&amp;gt;/t61_audio_hack.py&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
For example, on my computer, I put t61_audio_hack.py into the /fixes folder in my home folder, so I entered:&lt;br /&gt;
&amp;lt;pre&amp;gt;sksudo &amp;quot;/home/sims/fixes/t61_audio_hack.py&amp;quot;&amp;lt;/pre&amp;gt; into the Command textbox.&amp;lt;br&amp;gt;&lt;br /&gt;
5) Log out, log back in, and type your password quickly when prompted the second time.&lt;br /&gt;
&lt;br /&gt;
References:&lt;br /&gt;
[https://bugs.launchpad.net/ubuntu/+source/linux-source-2.6.20/+bug/122560 Launchpad Bug #122560]&lt;br /&gt;
[https://bugs.launchpad.net/ubuntu/+source/linux-source-2.6.20/+bug/133105 Launchpad Bug #133105]&lt;br /&gt;
&lt;br /&gt;
====ALSA driver update (hard fix, recommended for advanced users)====&lt;br /&gt;
&lt;br /&gt;
:'''''Note: This section assumes a high level of technical proficiency. Please fix it.'''''&lt;br /&gt;
::*&amp;lt;s&amp;gt;At [http://www.alsa-project.org www.asla-project.org], did you download only alsa-driver-1.0.14? That and alsa-lib-1.0.14a?&amp;lt;/s&amp;gt;&lt;br /&gt;
:::Download alsa-driver, alsa-kernel, alsa-lib, and alsa-utils, according to [http://alsa.opensrc.org/index.php/AlsaCVS http://alsa.opensrc.org/index.php/AlsaCVS]. Other sources, however, say only the driver is necessary. Perhaps alsa-project.org simply recommends the other two?&lt;br /&gt;
::*''How'' did you compile it from source? ''How'' did you add the patch?&lt;br /&gt;
::*In short, please explain ''how'' you did these things in addition to just telling us ''what'' you did. I´m not trying to be rude but seriously, not all Linux users are programmers ;). Thanks. [[User:SteveSims|SteveSims]] 22:19, 11 August 2007 (UTC)&lt;br /&gt;
After upgrading to 1.0.14 I still had no sound, and this took about a week to solved (though it was so sadly obvious though).  Just upgrading to alsa 1.0.14 will not be enough, there were a few patches released right after the release that fix the Thinkpad's.  The reason I missed this was because it was the same day so the release of 1.0.14!&lt;br /&gt;
&lt;br /&gt;
---------------------------------------------------------------------------&lt;br /&gt;
VERY SIMPLE METHOD OF MAKING SOUND WORK &lt;br /&gt;
http://forums.fedoraforum.org/showthread.php?t=159516&amp;amp;page=1&amp;amp;pp=15&lt;br /&gt;
Just follow the instructions step by step, except for two small things:&lt;br /&gt;
When doing &amp;quot;cp ../patch_analog.c alsa-driver-1.0.14/alsa-kernel/pci/hda/&amp;quot; use &amp;quot;cp ../patch_analog.c alsa-kernel/pci/hda/&amp;quot; instead&lt;br /&gt;
Also, when you get to the part about modifying the modprobe.conf file, it doesn't exist in ubuntu. Adding &amp;quot;options snd-hda-intel index=0 model=thinkpad&amp;quot; to any file (even one you make yourself) inside etc/modprobe.d should work. I personally added it to the options file, and it works fine. &lt;br /&gt;
&lt;br /&gt;
-credit for the guide goes to ciphermonk, and credit to the small changes needed to make this work on ubuntu go to my friend John. &lt;br /&gt;
&lt;br /&gt;
-hotkeys control mic volume, not speaker volume for some reason. I do not know how to fix this&lt;br /&gt;
&lt;br /&gt;
-this fix should provide sound for both headphones and speakers. &lt;br /&gt;
&lt;br /&gt;
-this edit by fatalchaos &lt;br /&gt;
---------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
First make sure these packages are installed (System -&amp;gt; Administration -&amp;gt; Synaptic Package Manager) : automake, autoconfig, cvs, libtool, python-dev, build-essential&lt;br /&gt;
&lt;br /&gt;
Then download the source code to the alsa-driver and apply these patches: (links to the revisions)&lt;br /&gt;
 &lt;br /&gt;
* [http://hg.alsa-project.org/alsa-kernel/rev/958b39f3e8dd Fix Oops with AD1984 thinkpad model]&lt;br /&gt;
* [http://hg.alsa-project.org/alsa-kernel/rev/47ca87407c84 Fix AD1984 basic model]&lt;br /&gt;
* [http://hg.alsa-project.org/alsa-kernel/rev/ca37aeeeb0ea Fix Thinkpad X61/T61 outputs]&lt;br /&gt;
&lt;br /&gt;
'''Please use CVS version of ALSA instead. All of these patches are committed'''. The link to the CVS version of ALSA is dead[http://alsa.opensrc.org/index.php/AlsaCVS].&lt;br /&gt;
&lt;br /&gt;
After doing a make and make install reboot your computer (or rrmmod snd-hda-intel &amp;amp;&amp;amp; modprobe snd-hda-intel).  And run alsamixer (for me it only works as root atm).  If you can´t find alsamixer, you can run it in the terminal (Applications -&amp;gt; Accessories -&amp;gt; Terminal) by entering ''alsamixer''. You will have to play with the settings a bit.  Make sure the speaker option is not muted and leave the Internal Mic Boost at 0, other wise you will have a really loud microphone feedback sort of sound constantly.&lt;br /&gt;
&lt;br /&gt;
I had to chmod -R 777 /dev/snd/ to get everything work for now. (THIS IS NOT THE CORRECT WAY TO DO IT, IT WILL NOT STAY BETWEEN REBOOTS!).&lt;br /&gt;
&lt;br /&gt;
Audio playback should then work, audio capture (microphone) doesn't seem to work, but I am probably not going to try and fix it, I don't use the capture so I am not concerned with that at the moment.&lt;br /&gt;
'''Update:''' With ALSA CVS, microphone seems to work&lt;br /&gt;
&lt;br /&gt;
If you can't hear the mic boost mic settings.  Here are my settings at KMix&lt;br /&gt;
Output&lt;br /&gt;
   Mic - low&lt;br /&gt;
   Mic Boost - full&lt;br /&gt;
Input &lt;br /&gt;
   Mic boost [enable] - medium&lt;br /&gt;
   capture [enable] - medium&lt;br /&gt;
&lt;br /&gt;
works great with Skype.  Also you can use the 'mic level meter' on KRecord to check the mic&lt;br /&gt;
&lt;br /&gt;
In Gnome, default channel mapped to thinkpad volume buttons is MIC, which is bad. Go to ''System-&amp;gt;Preferences-&amp;gt;Sound-&amp;gt;Default mixer tracks'' to change it&lt;br /&gt;
&lt;br /&gt;
'''Please note''' that internal speakers doesn't work with ALSA CVS. Use the headphone jack. Solution?&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
When starting alsamixer over the terminal I couldn't activate the speakers and only had sound over the headphone. However, I figured out how to easily activate the speakers:&lt;br /&gt;
* Right-click on your microphone icon in the top panel.&lt;br /&gt;
* (If &amp;quot;Mute&amp;quot; is activated, deactivate it. I had that at the beginning and was confused since in alsa you don't really realize it.)&lt;br /&gt;
* Click on &amp;quot;Open Volume Control&amp;quot;&lt;br /&gt;
* Change to the tab &amp;quot;Switches&amp;quot; and activate the option for speaker. &lt;br /&gt;
That should be enough to make it work.&lt;br /&gt;
--[[User:Shuk|Shuk]] 02:51, 11 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
I tried those patches, it didnt work for me. But this python script did: http://www.klabs.be/~fpiat/linux/debian/Etch_on_Thinkpad_T61.html#Sound  .. apparently if you make the PC speaker play constantly, you cant hear it but you can then hear sound. Hopefully gutsy will fix this :/ --[[User:Rubin|Rubin]] 07:18, 14 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Suspend==&lt;br /&gt;
Suspending doesn't work by default. It succesfully suspends, but after resuming, Kernel panic occurs. I didn't test hibernate.&lt;br /&gt;
I managed to get suspend to ram to work by using this script:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 &lt;br /&gt;
 # if launched through a lid event and lid is open, do nothing&lt;br /&gt;
 echo &amp;quot;$1&amp;quot; | grep &amp;quot;button/lid&amp;quot; &amp;amp;&amp;amp; grep -q open /proc/acpi/button/lid/LID/state &amp;amp;&amp;amp; exit 0&lt;br /&gt;
 &lt;br /&gt;
 # remove USB 1.1 driver&lt;br /&gt;
 rmmod uhci_hcd&lt;br /&gt;
 rmmod ehci_hcd&lt;br /&gt;
 &lt;br /&gt;
 # sync filesystem and clock&lt;br /&gt;
 sync&lt;br /&gt;
 /sbin/hwclock --systohc&lt;br /&gt;
 &lt;br /&gt;
 # switch to console&lt;br /&gt;
 FGCONSOLE=`fgconsole`&lt;br /&gt;
 chvt 6&lt;br /&gt;
 &lt;br /&gt;
 # go to sleep&lt;br /&gt;
 sleep 5 &amp;amp;&amp;amp; echo -n &amp;quot;mem&amp;quot; &amp;gt; /sys/power/state&lt;br /&gt;
 &lt;br /&gt;
 # readjust the clock (it might be off a bit after suspend)&lt;br /&gt;
 /sbin/hwclock --adjust&lt;br /&gt;
 /sbin/hwclock --hctosys&lt;br /&gt;
 &lt;br /&gt;
 # reload USB 1.1 driver&lt;br /&gt;
 modprobe uhci_hcd&lt;br /&gt;
 modprobe ehci_hcd&lt;br /&gt;
 &lt;br /&gt;
 # turn on the backlight and switch back to X&lt;br /&gt;
 chvt $FGCONSOLE&lt;br /&gt;
&lt;br /&gt;
It's very similar to script posted on thinkwiki, but I had to add ehci_hcd to removed modules and remove some radeon stuff (when using Nvidia)&lt;br /&gt;
&lt;br /&gt;
'''Problems''' the problem with this suspend script is, that after resuming, the laptop is incredibly slow. Applications start about 20 seconds, Firefox is lagging. But processor doesn't run at highest frequency, nothing seems unusual. '''Suggestions?'''&lt;br /&gt;
&lt;br /&gt;
This X-slow-after-resume is still here (T61p, nVidia Quadro FX 570 M, bleeding edge Gutsy 2.6.22-10-generic kernel). However, I found an official OpenSuSE 10.3 for this problem:&lt;br /&gt;
[https://bugzilla.novell.com/show_bug.cgi?id=290385]&lt;br /&gt;
--[[User:Lech|Lech]] 21:20, 2 September 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
When using this script, my USB ports are 'dead' after resume (i.e.  nothing connected to it gets any power).  I have commented out 'rmmod ehci_hcd' and 'modprobe ehci_hcd' lines, to make the USB ports active after a suspend/resume cycle.  (this is using nvidia card)&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
Suspend and hibernate work out-of-the-box for me with the 2.6.21.5 kernel, except that you need to put acpi_sleep=s3_bios in the kernel command line (i.e. at the end of each kernel line in /boot/grub/menu.lst).&lt;br /&gt;
--[[User:Kc8tbe|Kc8tbe]] 13:03, 1 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
Hmm, with 2.6.21.5 + acpi_sleep=s3_bios,  laptop suspends, but resume fails - machine locks up.  This is with nvidia 140.  Same result when doing it at console.  When I resume, I hear a beep and the machine hangs.  Have to hard-reset.  Suggestions?&lt;br /&gt;
&lt;br /&gt;
Some things seem to break after suspend for me, like network connections time out randomly, cdrom stops working etc. Running 'sudo /etc/init.d/dbus restart' seems to solve it for the most part.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
We are having similar discussions in Ubunutu's Launchpad, and we found kind of a solution which rules out any 2D/3D graphics acceleration but allows to suspend/resume, at least on my 3 weeks old T61p and some other recent T6x/R6x models:&lt;br /&gt;
&lt;br /&gt;
With thinkpad_acpi 0.16 (!) patches applied to 2.6.22 kernel, and with VESA driver only, it works perfectly so far for us.&lt;br /&gt;
&lt;br /&gt;
The discussion and some links can be found at:&lt;br /&gt;
https://bugs.launchpad.net/ubuntu/+bug/139089&lt;br /&gt;
https://bugs.launchpad.net/ubuntu/+source/linux-source-2.6.22/+bug/129125&lt;br /&gt;
&lt;br /&gt;
I know it's not eye candy not to have satisfying GLX etc., but I consider working suspend/resume much more important than say playing with GoogleEarth.&lt;br /&gt;
&lt;br /&gt;
--[[User:Lech|Lech]] 14:48, 16 September 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
==Brightness==&lt;br /&gt;
Changing brightness doesn't work at all. There are many issues. I tried Gutsy and still the same (even worse)&lt;br /&gt;
&lt;br /&gt;
Not a real solution, but if using the vesa driver, brightness control works. ''--Daniel06'' 11:58, 4 July 2007&lt;br /&gt;
&lt;br /&gt;
doesnt work for me with vesa or intel --[[User:Rubin|Rubin]] 06:19, 14 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
It works fine on mine and I have built-in graphics on my motherboard. [[User:SteveSims|SteveSims]] 02:19, 15 August 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== one idea ===&lt;br /&gt;
  echo &amp;quot;up&amp;quot; &amp;gt;/proc/acpi/ibm/brightness   &lt;br /&gt;
...works. as does 'down' and 'level x' where x is 1-7.  But how to tie that into the buttons? Seems they are currently using something else in /proc that doesnt exist for us.  --[[User:Rubin|Rubin]] 06:19, 14 July 2007 (UTC)&lt;br /&gt;
&lt;br /&gt;
=== yet another idea ===&lt;br /&gt;
&lt;br /&gt;
You can add the Gnome power manager brightness applet to the gnome panel, which gives you a GUI tool to do the job, rather than hardware buttons.  I don't know about KDE or other window managers.  --[[User:Atoponce|Atoponce]] 13:07 22, Aug 2007&lt;br /&gt;
&lt;br /&gt;
=== Another solution for Brightness, using xbacklight and laptop-mode ===&lt;br /&gt;
&lt;br /&gt;
While the hardware buttons still don't work, I have a solution that will automatically raise and lower the backlight when plugged in or on battery.  &lt;br /&gt;
&lt;br /&gt;
First, make sure Gnome isn't trying to set the brightness, by going to System &amp;gt; Preferences &amp;gt; Power Management.  In the On Battery Power tab, set &amp;quot;Dim display brightness by&amp;quot; to 0%.&lt;br /&gt;
&lt;br /&gt;
Next, install xbacklight.&lt;br /&gt;
&lt;br /&gt;
  sudo apt-get install xbacklight&lt;br /&gt;
&lt;br /&gt;
You can manually set the backlight by using &amp;quot;xbacklight -set &amp;lt;number from 1-100&amp;gt;&amp;quot;.  Note that by using xbacklight, you can make the backlight go brighter or dimmer than normally allowed by Windows or Ubuntu.&lt;br /&gt;
&lt;br /&gt;
To automate brightness changes, first enable laptop-mode&lt;br /&gt;
&lt;br /&gt;
  sudo nano /etc/default/acpi-support&lt;br /&gt;
&lt;br /&gt;
Scroll to the bottom and change ENABLE_LAPTOP_MODE to true&lt;br /&gt;
&lt;br /&gt;
  ENABLE_LAPTOP_MODE=true&lt;br /&gt;
&lt;br /&gt;
Set laptop mode to start automatically&lt;br /&gt;
&lt;br /&gt;
  sudo update-rc.d laptop-mode multiuser&lt;br /&gt;
&lt;br /&gt;
Edit laptop-mode.conf to automate brightness changes.  Scroll down to LCD brightness settings.  Modify the section to read as follows:&lt;br /&gt;
&lt;br /&gt;
  CONTROL_BRIGHTNESS=1&lt;br /&gt;
&lt;br /&gt;
  BATT_BRIGHTNESS_COMMAND=&amp;quot;xbacklight -set 20&amp;quot;&lt;br /&gt;
  LM_AC_BRIGHTNESS_COMMAND=&amp;quot;xbacklight -set 100&amp;quot;&lt;br /&gt;
  NOLM_AC_BRIGHTNESS_COMMAND=&amp;quot;xbacklight -set 100&amp;quot;&lt;br /&gt;
  BRIGHTNESS_OUTPUT=&amp;quot;/dev/null&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Note: You can use any value from 1 to 100 after -set, I used 20 and 100 as examples.  After this, start the laptop-mode daemon, and test if it works.  You may have to restart acpid as well.&lt;br /&gt;
&lt;br /&gt;
  sudo /etc/init.d/laptop-mode start&lt;br /&gt;
  sudo /etc/init.d/acpid restart&lt;br /&gt;
&lt;br /&gt;
==Webcam==&lt;br /&gt;
The webcam in T61 is some sort of UVC camera: Found UVC 1.00 device Integrated Camera (17ef:1004). The module loads out of the box. I tested the camera using:&lt;br /&gt;
Luvcview: http://mxhaard.free.fr/spca50x/Investigation/uvc/luvcview-20070512.tar.gz&lt;br /&gt;
Just compile and run using ./luvcview -f yuv (JPG format doesn't work)&lt;br /&gt;
&lt;br /&gt;
I also tried gqcam and webcam, but both doesn't work (first SEGFAULTs, second prints Invalid argument)&lt;br /&gt;
&lt;br /&gt;
luvcview has a button to take pictures. Place your mouse over the buttons at the bottom of the window, and their function is revealed in the title bar. Unfortunately, the button for avi capture does not seem to work (although it does tell you what the video framerate is, which is helpful).&lt;br /&gt;
&lt;br /&gt;
To capture a video stream, run ./luvcview -f yuv -S&lt;br /&gt;
To play back the video stream, run mplayer -demuxer rawvideo -rawvideo fps=7:w=320:h=240:yuy2 stream.raw&lt;br /&gt;
&lt;br /&gt;
==64 bit systems issues==&lt;br /&gt;
If you are running 64 bit Ubuntu, you will face some problems with 32 bit only proprietary applications. Most of them can be solved. &lt;br /&gt;
&lt;br /&gt;
===Firefox &amp;amp; Flash===&lt;br /&gt;
You can use 32bit version of Firefox (see google), or use http://gwenole.beauchesne.info/projects/nspluginwrapper/ nspluginwrapper] which i prefer:&lt;br /&gt;
 sudo apt-get install ia32-libs ia32-libs-gtk linux32 lib32asound2 alien&lt;br /&gt;
Now download both nspluginwrapper rpms (Plugin + Viewer) and convert them:&lt;br /&gt;
 sudo alien nspluginwrapper*.rpm&lt;br /&gt;
 sudo dpkg -i nspluginwrapper*.deb&lt;br /&gt;
&lt;br /&gt;
Download Adobe Flash Player: http://fpdownload.macromedia.com/get/flashplayer/current/install_flash_player_9_linux.tar.gz&lt;br /&gt;
 tar -xvzf install_flash_player_9_linux.tar.gz&lt;br /&gt;
 cd install_flash_player_9_linux&lt;br /&gt;
 sudo install libflashplayer.so flashplayer.xpt /usr/lib/firefox/plugins&lt;br /&gt;
 nspluginwrapper -i /usr/lib/firefox/plugins/libflashplayer.so&lt;br /&gt;
 cd ~/.mozilla/plugins/&lt;br /&gt;
 sudo install npwrapper.libflashplayer.so /usr/lib/mozilla-firefox/plugins/&lt;br /&gt;
This howto is taken from [http://webzine.smehlik.net/64bit-ubuntu-adobe-flash-plugin-pomoci-nspluginwrapper/ Smehlik Webzine (in Czech)]&lt;br /&gt;
&lt;br /&gt;
===Skype===&lt;br /&gt;
Download Skype for Ubuntu Feisty&lt;br /&gt;
Use this commandlibdbus, libqt4-core, libqt4-gui, libsigc++ to determine missing libraries:&lt;br /&gt;
 ldd /usr/bin/skype | grep not&lt;br /&gt;
It should be these:&lt;br /&gt;
 libdbus, libqt4-core, libqt4-gui, libsigc++ (2.0 version)&lt;br /&gt;
Download them from http://packages.ubuntu.com (32bit versions!)&lt;br /&gt;
 mkdir testlibs&lt;br /&gt;
 dpkg-deb --extract &amp;lt;deb file&amp;gt; testlibs&lt;br /&gt;
Now copy everything from testlibs to /usr/lib32&lt;br /&gt;
 cp -r testlibs/usr/lib/* /usr/lib32&lt;br /&gt;
Freedom lovers are advised to avoid proprietary systems like Skype, however.  Centralized directories and signalling architectures can't be good for your health.&lt;br /&gt;
&lt;br /&gt;
==Bluetooth==&lt;br /&gt;
works for me (TM)&lt;br /&gt;
&lt;br /&gt;
==USB==&lt;br /&gt;
A short time after the system has booted, I get a message on the console of every window indicating IRQ# 23 has fired but noone is expecting it. After this message, the USB ports on the right side fail to work anymore.  It was suggested on a forum that they will work, its just it takes it a long time to discover there is a new device.  I looked in /proc and determined that the bluetooth device is using IRQ23, so it may be involved, but there may be sharing so it could be something else.  Regardless, there are USB bus problems with the T61 and linux.&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
==Overall==&lt;br /&gt;
I initially had some big problems getting this working, but now its working quite well.  The wifi card worked at startup (uses madwifi) and I am happy because I don't seem to need any proprietary software to run this system.&lt;br /&gt;
&lt;br /&gt;
==Discussion==&lt;br /&gt;
In case you missed it the discussion page (for questions/responses) is right here:  [[Talk: Installing Ubuntu 7.04 (Feisty Fawn) on a ThinkPad T61]]&lt;br /&gt;
&lt;br /&gt;
==References==&lt;br /&gt;
* This guide is listed at the [http://tuxmobil.org/ibm.html TuxMobil Linux laptop and notebook installation guides survey (IBM/Lenovo)].&lt;br /&gt;
* Many other suggestions and references can be found in the following ubuntu forum: http://ubuntuforums.org/showthread.php?t=471563&lt;br /&gt;
&lt;br /&gt;
[[Category:Ubuntu 7.04]]&lt;br /&gt;
[[Category:T61]]&lt;/div&gt;</summary>
		<author><name>Vegar</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Tp_smapi&amp;diff=33170</id>
		<title>Tp smapi</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Tp_smapi&amp;diff=33170"/>
		<updated>2007-09-16T19:41:29Z</updated>

		<summary type="html">&lt;p&gt;Vegar: /* HDAPS axis orientation */ Added note about the inverted parameter&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;
For testing, you can simply compile and load the driver within the current&lt;br /&gt;
working directory:&lt;br /&gt;
:{{cmdroot|tar xzvf tp_smapi-0.32.tgz}}&lt;br /&gt;
:{{cmdroot|cd tp_smapi-0.32}}&lt;br /&gt;
:{{cmdroot|make load}}&lt;br /&gt;
&lt;br /&gt;
To 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;
:{{cmdroot|1=make load HDAPS=1}}&lt;br /&gt;
or, to compile and 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-essentials&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, 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;
===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 4b&amp;quot; in the 2nd value, converted to decimal is 75: the current charge stop threshold.&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;lt;tt&amp;gt;thinkpad_ec: no ThinkPad embedded controller!&amp;lt;/tt&amp;gt; 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=}} X'=X, Y'=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=}} X'=X, Y'=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=}} X'=-X, Y'=-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=}} X'=-X, Y'=-Y || 0.32 || 3.21 || Stop charge threshold works in Windows. dmesg output:&lt;br /&gt;
smapi smapi: smapi_request: SMAPI error: Function is not supported by SMAPI BIOS (func=211a)&lt;br /&gt;
smapi smapi: __get_real_thresh: cannot get stop_thresh of bat=0: Function is not supported by SMAPI BIOS&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=}} X'=X, Y'=Y || 0.32 || 1.27 ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T43p}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T60}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} X'=Y, Y'=-X || 0.32 ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T60p}} 8743-CTO&lt;br /&gt;
| {{Cunk}} || {{Cunk}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} X'=-X, Y'=-Y || 0.32 ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T61}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} X'=-X, Y'=-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;
! {{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=}} X'=X, Y'=-Y || 0.32 || 2.08 || EC v1.62&lt;br /&gt;
|-&lt;br /&gt;
! {{X41}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cno|text=}} X'=X, Y'=-Y || 0.32 ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X60}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} X'=-Y, Y'=X ||      || 2.07 || EC v1.10, 2.6.20 issue (see discussion)&lt;br /&gt;
|-&lt;br /&gt;
! {{X61s}}&lt;br /&gt;
| {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cyes}} || {{Cno|text=}} X'=X, Y'=-Y || 0.32 ||  || [http://www.slackwiki.org/ThinkPad_X61s ref]&lt;br /&gt;
|-&lt;br /&gt;
! {{X60T}}&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;
! {{X61T}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}}X'=-Y, Y'=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=}} X'=X, Y'=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;
HDAPS axis orientation notation: X,Y are the hardware readouts, X',Y' are horizontal and vertical. You can use [[HDAPS#Visualisation_of_ThinkPad_orientation|hdaps visualisation]] to check for correctness.&lt;br /&gt;
&lt;br /&gt;
If the axis are inverted, you can pass the inverted parameter to the module, like this:&lt;br /&gt;
  modprobe hdaps inverted=1&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>Vegar</name></author>
		
	</entry>
</feed>