<?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=Pavel</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=Pavel"/>
	<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/wiki/Special:Contributions/Pavel"/>
	<updated>2026-07-01T05:27:21Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.12</generator>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=How_to_control_fan_speed&amp;diff=38555</id>
		<title>How to control fan speed</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=How_to_control_fan_speed&amp;diff=38555"/>
		<updated>2008-08-13T21:01:45Z</updated>

		<summary type="html">&lt;p&gt;Pavel: /* Supported models */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page discusses methods for controlling the system fan.&lt;br /&gt;
&lt;br /&gt;
{| width=&amp;quot;100%&amp;quot; columns=&amp;quot;2&amp;quot;&lt;br /&gt;
|style=&amp;quot;vertical-align:top;white-space:nowrap;&amp;quot; | __TOC__&lt;br /&gt;
|style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
{{WARN|When designing fan-control applets, never ignore a valid thermal sensor.&lt;br /&gt;
&lt;br /&gt;
Even if it seems to be stuck at a certain temperature, you must take that sensor into account.  While it will probably make the fan spin faster than if the sensor was ignored, that's exactly what would happen when the fan is under EC control, and could very well be the reason for the &amp;quot;stuck&amp;quot; value in the first place.&lt;br /&gt;
&lt;br /&gt;
Always play it safe.  If a battery pack seems to want the fan to always run faster, the only safe thing to do is to make it run faster.}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==For Linux==&lt;br /&gt;
===Using a patched kernel===&lt;br /&gt;
{{NOTE|The ibm-acpi driver is part of the Linux kernel 2.6.10 and later (option CONFIG_ACPI_IBM), so patching is not needed anymore.}}&lt;br /&gt;
{{WARN|This patch is superceded by the patches in [[ibm-acpi]] [[Git]] repository or [http://ibm-acpi.sourceforge.net ibm-acpi.sf.net] releases}}&lt;br /&gt;
{{NOTE|Advanced fan control through ibm-acpi has been merged in Linux 2.6.20-rc2 mainline, so users of 2.6.20 won't need to patch their kernels to get the '''fan level''' functionality anymore}}&lt;br /&gt;
&lt;br /&gt;
The [[Patch for controlling fan speed]] provides a convenient interface via {{path|/proc/acpi/ibm/fan}}.&lt;br /&gt;
&lt;br /&gt;
Manual speed control can be done through the [[patch for controlling fan speed]]:&lt;br /&gt;
&lt;br /&gt;
 '''#cat /proc/acpi/ibm/fan'''&lt;br /&gt;
 status:         enabled&lt;br /&gt;
 level:          auto&lt;br /&gt;
 speed:          4219&lt;br /&gt;
 commands:       enable, disable, level &amp;lt;level&amp;gt;&lt;br /&gt;
                 (&amp;lt;level&amp;gt; is 0-7, auto or disengaged)&lt;br /&gt;
 &lt;br /&gt;
 '''#echo level 2 &amp;gt; /proc/acpi/ibm/fan'''&lt;br /&gt;
 &lt;br /&gt;
 '''#cat /proc/acpi/ibm/fan'''&lt;br /&gt;
 status:         enabled&lt;br /&gt;
 level:          2&lt;br /&gt;
 speed:          3142&lt;br /&gt;
 commands:       enable, disable, level &amp;lt;level&amp;gt;&lt;br /&gt;
                 (&amp;lt;level&amp;gt; is 0-7, auto or disengaged)&lt;br /&gt;
&lt;br /&gt;
===Using a stock kernel===&lt;br /&gt;
&lt;br /&gt;
{{NOTE|Fan control operations are disabled by default for safety reasons.}}&lt;br /&gt;
&lt;br /&gt;
'''Linux Kernel 2.6.22 and Above (ibm-acpi has been replaced by [[thinkpad-acpi]])'''&lt;br /&gt;
&lt;br /&gt;
To enable fan control, the module parameter &amp;lt;tt&amp;gt;fan_control=1&amp;lt;/tt&amp;gt; must be given to thinkpad-acpi.&lt;br /&gt;
&lt;br /&gt;
For example, in Ubuntu 8.04 (Hardy Heron), add the following to {{path|/etc/modprobe.d/options}}: &amp;lt;tt&amp;gt;options thinkpad_acpi fan_control=1&amp;lt;/tt&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Having done so, reboot and you can use the following commands to control fan speed:&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|echo level 0 &amp;gt; /proc/acpi/ibm/fan}} (fan off)&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|echo level 2 &amp;gt; /proc/acpi/ibm/fan}} (low speed)&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|echo level 4 &amp;gt; /proc/acpi/ibm/fan}} (medium speed)&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|echo level 7 &amp;gt; /proc/acpi/ibm/fan}} (maximum speed)&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|echo level auto &amp;gt; /proc/acpi/ibm/fan}} (automatic - default)&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|echo level disengaged &amp;gt; /proc/acpi/ibm/fan}} (disengaged)&lt;br /&gt;
&lt;br /&gt;
'''Older Linux Kernels (using [[ibm-acpi]])'''&lt;br /&gt;
&lt;br /&gt;
To enable fan control, the module parameter &amp;lt;tt&amp;gt;experimental=1&amp;lt;/tt&amp;gt; must be given to ibm-acpi.  Then, you can control the fan by directly writing to the relevant embedded controller register, {{path|/proc/acpi/ibm/ecdump}}. &lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|echo 0x2F 0x00 &amp;gt; /proc/acpi/ibm/ecdump}} (fan off)&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|echo 0x2F 0x02 &amp;gt; /proc/acpi/ibm/ecdump}} (low speed)&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|echo 0x2F 0x04 &amp;gt; /proc/acpi/ibm/ecdump}} (medium speed)&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|echo 0x2F 0x07 &amp;gt; /proc/acpi/ibm/ecdump}} (maximum speed)&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|echo 0x2F 0x80 &amp;gt; /proc/acpi/ibm/ecdump}} (automatic - default)&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|echo 0x2F 0x40 &amp;gt; /proc/acpi/ibm/ecdump}} (disengaged)&lt;br /&gt;
&lt;br /&gt;
See the specifications below for the meaning of these modes.&lt;br /&gt;
&lt;br /&gt;
===On/off control using stock kernel===&lt;br /&gt;
&lt;br /&gt;
If you only wish to turn the fan on and off (with automatic control when it's on), you can use the following.&lt;br /&gt;
&lt;br /&gt;
When loading [[ibm-acpi]] v0.11 with experimental switch ({{cmdroot|1=modprobe ibm_acpi experimental=1}}), it is possible to read and write the status of fan:&lt;br /&gt;
&lt;br /&gt;
 '''#cat /proc/acpi/ibm/fan'''&lt;br /&gt;
 status:         enabled&lt;br /&gt;
 speed:          3580&lt;br /&gt;
 commands:       enable, disable&lt;br /&gt;
 &lt;br /&gt;
 '''#echo disable &amp;gt; /proc/acpi/ibm/fan'''&lt;br /&gt;
 &lt;br /&gt;
 '''cat /proc/acpi/ibm/fan'''&lt;br /&gt;
 status:         disabled&lt;br /&gt;
 speed:          0&lt;br /&gt;
 commands:       enable, disable&lt;br /&gt;
&lt;br /&gt;
When off, the fan will then '''never''' wake up. It is advised to use an automated control script to reduce the chance of hardware damage.&lt;br /&gt;
&lt;br /&gt;
===Automated control scripts===&lt;br /&gt;
&lt;br /&gt;
An [[ACPI fan control script#Variable speed control scripts|ACPI fan control script]] can be used to override the firmware's fan algorithm with gentler, quieter version. It monitors the laptop's [[thermal sensors]] and sets the fan speed accordingly, according to customizable thresholds. For the default behavior, simply save {{CodeRef|tp-fancontrol}} as {{path|tp-fancontrol}}, make sure you've loaded [[thinkpad-acpi]] with the &amp;quot;fan_control=1&amp;quot; parameter, and run:&amp;lt;br /&amp;gt;&lt;br /&gt;
{{cmdroot|./tp-fancontrol}}&lt;br /&gt;
&lt;br /&gt;
There is an distro independent daemon (http://projekte.f4.fhtw-berlin.de/trac/s0332819-linuxtools/wiki/), written in python. Packages are available for debian based linux systems.&lt;br /&gt;
&lt;br /&gt;
[http://www.gambitchess.org/moin.py/ThinkPad_Fan_Control A GTK GUI program (packaged for Ubuntu 7.10 and 8.04)] may also help.&lt;br /&gt;
&lt;br /&gt;
===Automated program - Simple ThinkPad Fan Control===&lt;br /&gt;
Written by Stanko, stanko [at] mfhinc [dot] net&lt;br /&gt;
&lt;br /&gt;
This is program for controlling fans speed on IBM/Lenovo ThinkPads. It is written&lt;br /&gt;
for Linux only. This program is written in C, using GTK GUI.&lt;br /&gt;
 &lt;br /&gt;
You are required to have the Linux kernel with 'thinkpad-acpi' patch.&lt;br /&gt;
You must also enable manual control for your fans. For Linux 2.6.22 and above,&lt;br /&gt;
you must add 'fan_control=1' as a module parameter to 'thinkpad-acpi'.&lt;br /&gt;
For example, in Debian Lenny (and Ubuntu 8.04), you must add the following&lt;br /&gt;
to &amp;quot;/etc/modprobe.d/options&amp;quot;:&lt;br /&gt;
        options thinkpad_acpi fan_control=1&lt;br /&gt;
 &lt;br /&gt;
Having done so, reboot. Now you'll be able to use this program easily.&lt;br /&gt;
 &lt;br /&gt;
Here is screenshot:&lt;br /&gt;
[[Image:Tpfc.png|none]]&lt;br /&gt;
&lt;br /&gt;
and direct download (src + i386 32bit binary). Please read README.txt file&lt;br /&gt;
included in package. [[http://stanko.mfhinc.net/projects/tpfc/tpfc0.5.tar.gz tpfc0.5.tar.gz]]&lt;br /&gt;
&lt;br /&gt;
I wrote this for my own personal use, and thought that it would be a good idea&lt;br /&gt;
to release it to the world, and hope that it will be useful to someone!&lt;br /&gt;
Feel free to send comments, bug reports or a thanks to the e-mail above.&lt;br /&gt;
&lt;br /&gt;
==For Windows==&lt;br /&gt;
&lt;br /&gt;
Shimodax's ThinkPad fan control tool offers similar functionality (see [http://forum.thinkpads.com/viewtopic.php?t=17715 forum discussion] at thinkpads.com).  Source and binaries are available through the [http://sourceforge.net/projects/tp4xfancontrol &amp;quot;Tp4xFanControl&amp;quot;] project on SourceForge.&lt;br /&gt;
&lt;br /&gt;
==Hardware specs==&lt;br /&gt;
&lt;br /&gt;
The following hardware behavior was discovered experimentally by [[User:Thinker|Thinker]] and neither provided by nor confirmed by IBM/Lenovo. The following description may be inaccurate and may vary by model (see list of models above). The terminology probably does not match the one used by IBM/Lenovo engineers.&lt;br /&gt;
&lt;br /&gt;
{{NOTE|Information on other models is included in the [[ibm-acpi]] [[Git]] version.}}&lt;br /&gt;
{{NOTE|1=The ThinkPad {{X61s}} and {{X61}} with WWAN have a [http://forum.notebookreview.com/showthread.php?t=141931 second system fan]; its interface is currently unknown.}}&lt;br /&gt;
&lt;br /&gt;
ACPI DSDT register HFSP (8 bits, offset 0x2F in the &amp;lt;tt&amp;gt;EmbeddedController&amp;lt;/tt&amp;gt; address space, accessed through the standard EC interface at IO ports 0x62 and 0x66) is read/writable and has the following meaning:&lt;br /&gt;
 &lt;br /&gt;
 Bits   7 6 5 4 3 2 1 0&lt;br /&gt;
        ---------------&lt;br /&gt;
 Value  1 0 * * * * * *  - automatic&lt;br /&gt;
        * 1 * * * * * *  - disengaged&lt;br /&gt;
        0 0 N N N N N N  - manual (0..63; 0=disable fan, 1=min, ..., 7=max)&lt;br /&gt;
&lt;br /&gt;
Changing modes may not be immediate on all ThinkPads.  Later ThinkPad models seem to take at least 5s to start responding to a fan mode change, for example.&lt;br /&gt;
&lt;br /&gt;
After boot, the HFSP register may not reflect the true state of the EC (on some models it reads 0x07 even though the EC is actually in automatic mode).&lt;br /&gt;
&lt;br /&gt;
=== Fan Tachometer ===&lt;br /&gt;
&lt;br /&gt;
The embedded controller registers 0x84 (LSB), 0x85 (MSB) are the main fan tachometer, and report fan speed in RPM in everything since the {{A31}} and maybe a little earlier.  Not much is know about the tachometer in earlier models, or even whether they had one or not.&lt;br /&gt;
&lt;br /&gt;
=== Automatic mode ===&lt;br /&gt;
In ''automatic'' mode, the embedded controller sets the fan speed automatically according to system temperatures and some unknown algorithm.&lt;br /&gt;
&lt;br /&gt;
Note that the ACPI DSDT may supplement this in some models.  The {{X40}}, for example, changes the profile of speeds the automatic mode should use depending on battery status.&lt;br /&gt;
&lt;br /&gt;
=== Manual mode ===&lt;br /&gt;
&lt;br /&gt;
In ''manual'' mode, the fan level is forced to the given value and the EC will auto-regulate the fan to maintain at a (roughly) constant RPM, which is model-dependent. Manual speed levels 8-63 yield the same behavior as level 7, and the the ACPI DSDT uses level 7 for the emergency mode it enters upon critical CPU/GPU temperature, so apparently 7 is the real maximum level.&lt;br /&gt;
&lt;br /&gt;
=== Disengaged (full-speed) mode ===&lt;br /&gt;
&lt;br /&gt;
In ''disengaged'' mode, the embedded controller does not monitor the fan speed.  It &amp;quot;disengages&amp;quot; the closed-loop control function that keeps track of fan speed, and uses an open-loop control function that ramps up the fan to its maximum speed (100% duty-cycle).  The end speed is not stable, but it is often much faster than the maximum speed manual and automatic modes would set the fan to.&lt;br /&gt;
&lt;br /&gt;
Most newer ThinkPads take quite a while (in excess of one minute) to fully enter disengaged mode.  Exiting it is much faster.  The {{A31}} acts differently, and switches to disengaged mode as fast as it switches to other modes.&lt;br /&gt;
&lt;br /&gt;
For some reason, the embedded controller may stop updating the tachometer registers while entering or exiting disengaged mode in some ThinkPad firmware versions (hence the EC tachometer registers will not be updated on these models while entering/exiting disengaged mode).  Once it arrives at maximum speed, or once it gets back at closed-loop cruise speed, the embedded controller starts updating the tachometer registers again.   Later T models such as the {{T43}} have this problem, while the {{A31}} does not.&lt;br /&gt;
&lt;br /&gt;
{{HINT|Apparently the [[Problem with fan noise|pulsing fan noise]] experienced by some users can be cured by repeatedly running 2-4 seconds of manual control followed by 0.5-1 seconds of disengaged mode. The pulse occurs when the the embedded controller computes the fan speed and adjusts the fan voltage adaptively every few seconds (~4.8sec for the ThinkPad T43); the aforementioned mode switching doesn't give it a chance to do so. One of the [[ACPI fan control script#Variable speed control scripts|ACPI fan control scripts]] implements this solution.}}&lt;br /&gt;
&lt;br /&gt;
==Supported models==&lt;br /&gt;
&lt;br /&gt;
The above was successfully tested on the following models:&lt;br /&gt;
&lt;br /&gt;
* ThinkPad {{A31}} (fan levels RPM: 0 = off, 1-2 = ~3280-3380 (!), 3-5 = ~3200, 6-7 = ~3380, &amp;quot;disengaged&amp;quot; = ~4000 (see NOTE above))&lt;br /&gt;
* ThinkPad {{R50}} (highest manual level is 3; disengage mode works and reaches much higher RPM)&lt;br /&gt;
* ThinkPad {{R50p}} (fan levels RPM: 0 = off, 1-2 = ~3200, 3-5 = ~3500-3600, 6-7 = ~3700-3800, disengaged = ~5300)&lt;br /&gt;
* ThinkPad {{R51}} (fan levels RPM: 0 = off, 1-2 = ~3150, 3-5 = ~3350, 6 = ~3750, disengaged = ~5100)&lt;br /&gt;
* ThinkPad {{R51e}} (fan levels RPM: 0 = off, 1-2 = ~3300, 3-5 = ~3800, 6 = ~4150, disengaged = ~5100)&lt;br /&gt;
* ThinkPad {{R52}} (fan levels RPM: 0 = off, 1-2 = ~3350, 3-5 = ~3650, 6 = ~4250, disengaged = ~5245)&lt;br /&gt;
* ThinkPad {{R60}} (fan levels RPM: 0 = off, 1-1 = ~2650, 3-5 = ~3300, 6-7 = ~3950, disengaged = ~4800)&lt;br /&gt;
* ThinkPad {{R60e}}&lt;br /&gt;
* ThinkPad {{T22}}&lt;br /&gt;
* ThinkPad {{T23}} (low speed = ~2200, medium and maximum speed = ~4800; disengaged mode works at ~5800)&lt;br /&gt;
* ThinkPad {{T30}}&lt;br /&gt;
* ThinkPad {{T40}} (fan levels RPM: 1-2 = ~2950, 3-5 = ~3600, 6-7 = ~4050; disengaged = ~5400)&lt;br /&gt;
* ThinkPad {{T41}}, {{T41p}} (fan levels RPM: 1-2 = ~2980, 3-5 = ~3500, 6-7 = ~4050; disengaged mode works at ~5100)&lt;br /&gt;
* ThinkPad {{T42}}, {{T42p}} (fan levels RPM: 1-2 = ~2900, 3-5 = ~3700, 6-7 = ~4700; disengaged mode works at ~5200)&lt;br /&gt;
* ThinkPad {{T43}}, {{T43p}} (fan levels RPM: 1-2 = ~3300, 3-5 = ~4100, 6-7 = ~4700; disengaged mode works at ~6450)&lt;br /&gt;
* ThinkPad {{T60}} (fan levels RPM: 1-2 = 3000-3100, 3-5 = ~3600, 6-7 = ~4500; disengaged mode works at ~5500)&lt;br /&gt;
* ThinkPad {{T61}} (fan levels RPM: 0 = off, 1-2 = ~2980, 3-5 = ~3330, 6-7 = ~3760; disengaged mode works at ~4500)&lt;br /&gt;
* ThinkPad {{X30}} (level 0 = off, low = ~3900, medium = ~4200, maximum = ~4650, disengaged = ~5900)&lt;br /&gt;
* ThinkPad {{X31}} (fan levels RPM: 0 = off, 1-2 = ~2850, 3-5 = ~3450, 6 = ~4050, 7 = ~4150; disengaged mode works at ~4975)&lt;br /&gt;
* ThinkPad {{X40}}&lt;br /&gt;
* ThinkPad {{X41}}&lt;br /&gt;
* ThinkPad {{X41T}}&lt;br /&gt;
* ThinkPad {{X60}} (fan levels RPM: 7 = ~3700, disengaged ~4700)&lt;br /&gt;
* ThinkPad {{X61s}}&lt;br /&gt;
* ThinkPad {{Z60t}}, {{Z60m}} (fan levels RPM: 1-2 = ~1700, 3-5 = ~2800, 6-7 = ~3500)&lt;br /&gt;
* ThinkPad {{Z61m}}&lt;br /&gt;
* Thinkpad {{Z61p}} (fan levels 0-7, auto, disengaged; enable, disable; watchdog (untested))&lt;br /&gt;
Probably other models are supported too (please update this page if you confirm this; maintain some ordering too).&lt;br /&gt;
&lt;br /&gt;
==Models using a different interface==&lt;br /&gt;
&lt;br /&gt;
The following models also work, use a different access method which supported (only) via the {{path|/proc/acpi/ibm/fan}} of [[ibm-acpi]]. No need for patching.&lt;br /&gt;
&lt;br /&gt;
* ThinkPad {{600E}}, {{600X}}, {{770E}}, {{770X}} (these use a different fan control interface)&lt;br /&gt;
&lt;br /&gt;
==Unsupported models==&lt;br /&gt;
&lt;br /&gt;
* ThinkPad {{560}} (these models don't have a fan)&lt;/div&gt;</summary>
		<author><name>Pavel</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Installing_Ubuntu_6.06_Flight_6_on_a_ThinkPad_X60s&amp;diff=24359</id>
		<title>Installing Ubuntu 6.06 Flight 6 on a ThinkPad X60s</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Installing_Ubuntu_6.06_Flight_6_on_a_ThinkPad_X60s&amp;diff=24359"/>
		<updated>2006-08-26T16:18:36Z</updated>

		<summary type="html">&lt;p&gt;Pavel: /* Special Keys */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installation of Ubuntu 6.06 Flight 6 on X60s (model 1705-24U) =&lt;br /&gt;
== Summary ==&lt;br /&gt;
=== What works out of the box ===&lt;br /&gt;
&lt;br /&gt;
* Graphics adapter and accelerator (Intel GMA 950)&lt;br /&gt;
* USB&lt;br /&gt;
* Firewire&lt;br /&gt;
* Lid switch (LCD off when lid closed)&lt;br /&gt;
* Volume control, keyboard light and screen brightness control&lt;br /&gt;
* Hard disk laptop-mode (/proc/sys/vm/laptop-mode)&lt;br /&gt;
* LCD brightness auto-adjusts depending on AC or battery operation&lt;br /&gt;
* Fn buttons generate ACPI events (/var/log/acpid)&lt;br /&gt;
* EVDO device&lt;br /&gt;
&lt;br /&gt;
=== What needs to be fixed ===&lt;br /&gt;
&lt;br /&gt;
* Network adapter (Intel PRO/1000) &lt;br /&gt;
* Dual core processor&lt;br /&gt;
* Wireless&lt;br /&gt;
* Processor frequency scaling&lt;br /&gt;
* Suspend to RAM&lt;br /&gt;
* Suspend to disk&lt;br /&gt;
* SD card reader&lt;br /&gt;
* Sound&lt;br /&gt;
* Fingerprint scanner&lt;br /&gt;
&lt;br /&gt;
== Installing Ubuntu 6.06 Flight 6 ==&lt;br /&gt;
&lt;br /&gt;
IBM Rescue and Recovery disks (seven CDs) can be created using preinstalled Windows: All programs&amp;amp;rarr;ThinkVantage&amp;amp;rarr;Create Recovery Media. However, as long as recovery partition (called ''predesktop'' in BIOS) is left intact, system '''can be restored to factory default without having recovery CDs'''.&lt;br /&gt;
&lt;br /&gt;
Ubuntu Flight 6 installer boots normally using external (USB) IBM DVD-ROM/CD-RW. SATA disk is recognised, Xorg 7.0, gdm and Gnome start normally. Xorg is configured with i810. DRI works (glxinfo|grep rendering). Networking works, eth0 uses e1000. ALSA sound worked after original installation, but at some point it stopped working as Dapper instantly had numerous updates, including kernel. &lt;br /&gt;
&lt;br /&gt;
== Fixes after installation ==&lt;br /&gt;
&lt;br /&gt;
=== SMP kernel ===&lt;br /&gt;
Flight 6 installs 2.6.15-*-386 kernel without SMP support. After installation of -686 kernel (which appears to be SMP) {{path|/proc/cpuinfo}} reports CPU0 and CPU1.&lt;br /&gt;
&lt;br /&gt;
=== Wi-Fi ===&lt;br /&gt;
Intel 3945ABG wireless driver is available from http://ipw3945.sourceforge.net/. Wireless works after following QUICK INSTALL STEPS in provided INSTALL file. Automating driver loading works as described too, except that {{path|/etc/modprobe.d/ipw3945}} has to be used instead of the proposed {{path|/etc/modules.d/ipw3945}}.&lt;br /&gt;
&lt;br /&gt;
=== CPU frequency scaling ===&lt;br /&gt;
After installation CPU0 switches between 1.5 GHz (full speed) and 1 GHz depending on load, but CPU1 stays at full speed. This is caused by a bug in &amp;lt;code&amp;gt;powernowd&amp;lt;/code&amp;gt;, which is resolved in &amp;lt;code&amp;gt;powernowd&amp;lt;/code&amp;gt; 0.97. By defaqult Flight 6 uses &amp;lt;code&amp;gt;powernowd&amp;lt;/code&amp;gt; with the &amp;lt;code&amp;gt;userspace&amp;lt;/code&amp;gt; governor. Changing to &amp;lt;code&amp;gt;ondemand&amp;lt;/code&amp;gt; governor ({{path|/sysfs/devices/system/cpu/cpu0,1/cpufreq/scaling_governor}}) and thus using kernel part for frequency scaling (modules &amp;lt;code&amp;gt;speedstep_centrino&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;freq_table&amp;lt;/code&amp;gt;) fixes this. To keep the change between reboots, install &amp;lt;code&amp;gt;sysfsutils&amp;lt;/code&amp;gt; package and add the following lines to {{path|/etc/sysfs.conf}}:&lt;br /&gt;
&lt;br /&gt;
   devices/system/cpu/cpu0/cpufreq/scaling_governor=ondemand&lt;br /&gt;
   devices/system/cpu/cpu1/cpufreq/scaling_governor=ondemand&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;powernowd&amp;lt;/code&amp;gt; can then be disabled from auto-starting by &amp;lt;code&amp;gt;rcconf&amp;lt;/code&amp;gt;. It can also be &amp;lt;code&amp;gt;apt-get remove&amp;lt;/code&amp;gt;'d, but that also wants to remove &amp;lt;code&amp;gt;ubuntu-desktop&amp;lt;/code&amp;gt; metapackage.&lt;br /&gt;
&lt;br /&gt;
If you do not want to change governers, uprading &amp;lt;code&amp;gt;powernowd&amp;lt;/code&amp;gt; from 0.96 to 0.97 also resolves the problem. Simply download &amp;lt;code&amp;gt;powernowd&amp;lt;/code&amp;gt; 0.97 [http://www.deater.net/john/powernowd.html], compile it and replace the &amp;lt;code&amp;gt;/usr/sbin/powernowd&amp;lt;/code&amp;gt; executable with the version that you have just compiled, then restart powernowd:&lt;br /&gt;
&lt;br /&gt;
  /etc/init.d/powernowd stop&lt;br /&gt;
  /etc/init.d/powernowd start&lt;br /&gt;
&lt;br /&gt;
However be careful if the powernowd package is upgraded and the original faulty executable is replaced.&lt;br /&gt;
&lt;br /&gt;
=== High pitch noise while on battery ===&lt;br /&gt;
X60s CPU produces the [[Problem_with_high_pitch_noises#Limit_ACPI_CPU_power_states|infamous high pitch noise]] when in lower-power ACPI states (a.k.a. C-states). To eliminate the noise maximum (i.e. lowest power) C-state had to be limited to C2. In {{path|/etc/sysfs.conf}}:&lt;br /&gt;
&lt;br /&gt;
   module/processor/parameters/max_cstate=2&lt;br /&gt;
&lt;br /&gt;
Alternatively upgrade the BIOS to 1.06&lt;br /&gt;
&lt;br /&gt;
== Unsolved ==&lt;br /&gt;
* Suspend to RAM (suspends, but crashes on resume)&lt;br /&gt;
* Suspend to disk (suspends, but crashes on resume)&lt;br /&gt;
* Sound &lt;br /&gt;
* SD card reader (driver in Linux kernel &amp;gt;=2.6.17)&lt;br /&gt;
&lt;br /&gt;
== Not tested ==&lt;br /&gt;
* PCMCIA slots&lt;br /&gt;
* Embeded Security Subsystem (TCPA)&lt;br /&gt;
* Active Protection System (HDAPS)&lt;br /&gt;
* Modem&lt;br /&gt;
&lt;br /&gt;
= Installation of Ubuntu 6.06 Flight 6 on X60s (model 170466U) =&lt;br /&gt;
== Specifications ==&lt;br /&gt;
&lt;br /&gt;
* Processor - Intel Core Duo  1.66GHZ&lt;br /&gt;
* Hard Drive - SATA 80GB - HTS541080&lt;br /&gt;
* Networking - Integrated Wireless (Atheros)&lt;br /&gt;
* Sound - Intel&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0000:00:00.0 Host bridge: Intel Corporation Mobile Memory Controller Hub (rev 03)&lt;br /&gt;
0000:00:02.0 VGA compatible controller: Intel Corporation Mobile Integrated Graphics Controller (rev 03)&lt;br /&gt;
0000:00:02.1 Display controller: Intel Corporation Mobile Integrated Graphics Controller (rev 03)&lt;br /&gt;
0000:00:1b.0 0403: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller (rev 02)&lt;br /&gt;
0000:00:1c.0 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 1 (rev 02)&lt;br /&gt;
0000:00:1c.1 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 2 (rev 02)&lt;br /&gt;
0000:00:1c.2 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 3 (rev 02)&lt;br /&gt;
0000:00:1c.3 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 4 (rev 02)&lt;br /&gt;
0000:00:1d.0 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #1 (rev 02)&lt;br /&gt;
0000:00:1d.1 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #2 (rev 02)&lt;br /&gt;
0000:00:1d.2 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #3 (rev 02)&lt;br /&gt;
0000:00:1d.3 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #4 (rev 02)&lt;br /&gt;
0000:00:1d.7 USB Controller: Intel Corporation 82801G (ICH7 Family) USB2 EHCI Controller (rev 02)&lt;br /&gt;
0000:00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev e2)&lt;br /&gt;
0000:00:1f.0 ISA bridge: Intel Corporation 82801GBM (ICH7-M) LPC Interface Bridge (rev 02)&lt;br /&gt;
0000:00:1f.1 IDE interface: Intel Corporation 82801G (ICH7 Family) IDE Controller (rev 02)&lt;br /&gt;
0000:00:1f.2 0106: Intel Corporation 82801GBM/GHM (ICH7 Family) Serial ATA Storage Controllers cc=AHCI (rev 02)&lt;br /&gt;
0000:00:1f.3 SMBus: Intel Corporation 82801G (ICH7 Family) SMBus Controller (rev 02)&lt;br /&gt;
0000:02:00.0 Ethernet controller: Intel Corporation 82573L Gigabit Ethernet Controller&lt;br /&gt;
0000:03:00.0 Ethernet controller: Atheros Communications, Inc. AR5212 802.11abg NIC (rev 01)&lt;br /&gt;
0000:15:00.0 ffff: Ricoh Co Ltd RL5c476 II (rev ff)&lt;br /&gt;
0000:15:00.1 ffff: Ricoh Co Ltd R5C552 IEEE 1394 Controller (rev ff)&lt;br /&gt;
0000:15:00.2 ffff: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev ff)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
=== What works out of the box ===&lt;br /&gt;
* Graphics adapter and accelerator (Intel GMA 950)&lt;br /&gt;
* USB&lt;br /&gt;
* Lid switch (LCD off when lid closed)&lt;br /&gt;
* Volume control, keyboard light and screen brightness control&lt;br /&gt;
* LCD brightness auto-adjusts depending on AC or battery operation&lt;br /&gt;
* Fn buttons generate ACPI events (/var/log/acpid)&lt;br /&gt;
* Sound, using the snd_hda_intel driver&lt;br /&gt;
&lt;br /&gt;
=== What doesn't work out of the box===&lt;br /&gt;
&lt;br /&gt;
* Network adapter (Intel PRO/1000) &lt;br /&gt;
* Suspend to ram&lt;br /&gt;
* Suspend to disk&lt;br /&gt;
* Wireless&lt;br /&gt;
** ''atheros driver in linux-restricted-modules-2.6.15-20-686 will not work, see below for instructions''&lt;br /&gt;
&lt;br /&gt;
=== Sound ===&lt;br /&gt;
* The sound is very clean, loud enough and there doesn't appear to be any backround machine noise escaping through the card.&lt;br /&gt;
&lt;br /&gt;
=== Annoyances ===&lt;br /&gt;
* '''Battery life''' - With the 8 cell battery Lenovo boasts that it gets about 8 hours of battery life.  So far in Linux it is getting about 5-6.  Need to mess around with more power saving options. To improve battery life rmmod uhci_hcd (disable USB).&lt;br /&gt;
* The Hitachi serial ATA harddrive makes a faint but noticeable high pitched clicking sound when running off the battery.&lt;br /&gt;
* The e1000 network driver currently has issues with the x60s. If you're having issues with eth0 appearing, give this bug report a read:&lt;br /&gt;
http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1474679&amp;amp;group_id=42302&amp;amp;atid=447449&lt;br /&gt;
&lt;br /&gt;
== What works after installation ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Wireless ===&lt;br /&gt;
&lt;br /&gt;
* The X60s comes with an EVDO modem in the USA model of the laptop. The device seems to register correctly with usbserial (when given the correct options).&lt;br /&gt;
* The X60s comes with Bluetooth support it appears to work out of box.&lt;br /&gt;
* Unlike the earlier versions of the X60s this one uses the Atheros driver.&lt;br /&gt;
* The LED wireless indicator light does not switch on when wireless is enabled (unless you use ndiswrapper)&lt;br /&gt;
* The wireless toggle switch does nothing (although it appears to turn the led on momentarily)&lt;br /&gt;
&lt;br /&gt;
==== EVDO ====&lt;br /&gt;
&lt;br /&gt;
[[Verizon_1xEV-DO_WWAN|Some general EVDO info here]].&lt;br /&gt;
&lt;br /&gt;
First we detect the device with lsusb. It should be the Sierra Wireless device unless IBM/Lenova changes it mid-stream:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bus 005 Device 003: ID 17ef:1000&lt;br /&gt;
Bus 005 Device 001: ID 0000:0000&lt;br /&gt;
Bus 002 Device 003: ID 1199:0218 Sierra Wireless, Inc.&lt;br /&gt;
Bus 002 Device 001: ID 0000:0000&lt;br /&gt;
Bus 003 Device 001: ID 0000:0000&lt;br /&gt;
Bus 001 Device 001: ID 0000:0000&lt;br /&gt;
Bus 004 Device 002: ID 0a5c:2110 Broadcom Corp.&lt;br /&gt;
Bus 004 Device 003: ID 0483:2016 SGS Thomson Microelectronics Fingerprint ReaderBus 004 Device 001: ID 0000:0000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then we modprobe the driver with the previously discovered values:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
modprobe usbserial vendor=0x1199 product=0x0218&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dmesg should show something like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[17187980.292000] drivers/usb/serial/usb-serial.c: USB Serial support registered for generic&lt;br /&gt;
[17187980.292000] usbserial_generic 2-1:1.0: generic converter detected&lt;br /&gt;
[17187980.292000] usb 2-1: generic converter now attached to ttyUSB0&lt;br /&gt;
[17187980.292000] usb 2-1: generic converter now attached to ttyUSB1&lt;br /&gt;
[17187980.292000] usb 2-1: generic converter now attached to ttyUSB2&lt;br /&gt;
[17187980.292000] usbcore: registered new driver usbserial_generic&lt;br /&gt;
[17187980.292000] drivers/usb/serial/usb-serial.c: USB Serial Driver core&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can have the driver automatically load by adding the following line to your /etc/modules file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
usbserial vendor=0x1199 product=0x0218&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Your modem is now loaded and ready to go on /dev/ttyUSB0. Call your service provider for details.&lt;br /&gt;
&lt;br /&gt;
==== Bluetooth ====&lt;br /&gt;
Bluetooth should work out of box. Ensure that you have the 'bluez-utils' package installed and then you can query your device with 'hciconfig -a':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
hci0:   Type: USB&lt;br /&gt;
        BD Address: 00:16:EC:B2:D1:90 ACL MTU: 1017:8 SCO MTU: 64:8&lt;br /&gt;
        UP RUNNING PSCAN ISCAN&lt;br /&gt;
        RX bytes:375 acl:0 sco:0 events:17 errors:0&lt;br /&gt;
        TX bytes:319 acl:0 sco:0 commands:17 errors:0&lt;br /&gt;
        Features: 0xff 0xff 0x8d 0xfe 0x9b 0xfd 0x00 0x80&lt;br /&gt;
        Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3&lt;br /&gt;
        Link policy: RSWITCH HOLD SNIFF PARK&lt;br /&gt;
        Link mode: SLAVE ACCEPT&lt;br /&gt;
        Name: 'makho-0'&lt;br /&gt;
        Class: 0x3e0100&lt;br /&gt;
        Service Classes: Networking, Rendering, Capturing&lt;br /&gt;
        Device Class: Computer, Uncategorized&lt;br /&gt;
        HCI Ver: 2.0 (0x3) HCI Rev: 0x206c LMP Ver: 2.0 (0x3) LMP Subver: 0x415c        Manufacturer: Broadcom Corporation (15)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
Bringing the device down with 'hciconfig hci0 down' will not disable the bluetooth light on the laptop. However you can disable the device entirely with the fn-f5 key combo. The device will vanish from hciconfig and the light will go out.&lt;br /&gt;
&lt;br /&gt;
==== compiling the madwifi drivers from source - WORKS :) ====&lt;br /&gt;
&lt;br /&gt;
* untar the latest drivers from teh madwifi website - http://sourceforge.net/projects/madwifi/&lt;br /&gt;
* prepare build environment&lt;br /&gt;
 apt-get install build-essential&lt;br /&gt;
 apt-get install linux-headers-`uname -r`&lt;br /&gt;
 apt-get install sharutils&lt;br /&gt;
* in the madwifi directory build and install the module&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
 modprobe ahc_pci&lt;br /&gt;
&lt;br /&gt;
==== WPA1 encryption - WORKS :) ====&lt;br /&gt;
* In order for this to work you '''must''' compile the wpa_supplicant from source.  &lt;br /&gt;
** follow these instructions carefully - http://madwifi.org/wiki/UserDocs/802.11i&lt;br /&gt;
&lt;br /&gt;
==== ndiswrapper - WORKS :) ====&lt;br /&gt;
* Why use ndiswrapper instead?  Madwifi would not allow me to connect to 5+ wireless networks I had access to.  So, if you too have this problem, try ndiswrapper, if not, support open source and use madwifi.&lt;br /&gt;
* Download and install ndiswrapper&lt;br /&gt;
* Download the driver and use wine to extract it (or another machine):&lt;br /&gt;
** http://www-307.ibm.com/pc/support/site.wss/document.do?lndocid=MIGR-52527&lt;br /&gt;
* Goto the WINXP_2K directory where the driver is and do the following:&lt;br /&gt;
  ndiswrapper -i NET5211.INF&lt;br /&gt;
  modprobe ndiswrapper&lt;br /&gt;
* Your wireless card should now be the wlan0 interface, and the wireless light should light up!&lt;br /&gt;
&lt;br /&gt;
== Fingerprint reader ==&lt;br /&gt;
The X60s comes with a small USB fingerprint reader attached below the mouse buttons. It appears as a USB device. Here's the relevant output of lsusb:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bus 004 Device 003: ID 0483:2016 SGS Thomson Microelectronics Fingerprint Reader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It may be possible to use this device with the instructions found on the following two websites:&lt;br /&gt;
http://pavelmachek.livejournal.com/25060.html&lt;br /&gt;
http://66.102.7.104/search?q=cache:9VkP3DzVdoYJ:linuxbiometrics.com/modules/newbb/viewtopic.php%3Fviewmode%3Dflat%26order%3DASC%26topic_id%3D66%26forum%3D1%26move%3Dnext%26topic_time%3D1122861328%26PHPSESSID%3D677fd91c80089e4ba3edd25fbbbbc2f8+SGS+Thomson+Microelectronics+Fingerprint+Reader+Bus&amp;amp;hl=en&amp;amp;gl=us&amp;amp;ct=clnk&amp;amp;cd=5&amp;amp;client=firefox&lt;br /&gt;
&lt;br /&gt;
== Special Keys ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|+ Post-install support for special keys in Ubuntu Linux 6.06 Flight 6&lt;br /&gt;
! Keys !! function !! status&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F2}} || lock screen || does not work&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F3}} || blank screen || does not work&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F4}} || suspend to ram || does not work&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F5}} || switch bluetooth || works&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F7}} || switch display || does not work&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F8}} || switch between touchpoint and touchpad || not applicable&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F9}} || eject from dock || not tested&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F12}} || suspend to disk || does not work&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|END}} || reduce brightness || works&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|HOME}} || increase brightness || works&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|PGUP}} || keyboard light || works&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:X60s]]&lt;/div&gt;</summary>
		<author><name>Pavel</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Installing_Ubuntu_6.06_Flight_6_on_a_ThinkPad_X60s&amp;diff=24358</id>
		<title>Installing Ubuntu 6.06 Flight 6 on a ThinkPad X60s</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Installing_Ubuntu_6.06_Flight_6_on_a_ThinkPad_X60s&amp;diff=24358"/>
		<updated>2006-08-26T16:17:19Z</updated>

		<summary type="html">&lt;p&gt;Pavel: /* Special Keys */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Installation of Ubuntu 6.06 Flight 6 on X60s (model 1705-24U) =&lt;br /&gt;
== Summary ==&lt;br /&gt;
=== What works out of the box ===&lt;br /&gt;
&lt;br /&gt;
* Graphics adapter and accelerator (Intel GMA 950)&lt;br /&gt;
* USB&lt;br /&gt;
* Firewire&lt;br /&gt;
* Lid switch (LCD off when lid closed)&lt;br /&gt;
* Volume control, keyboard light and screen brightness control&lt;br /&gt;
* Hard disk laptop-mode (/proc/sys/vm/laptop-mode)&lt;br /&gt;
* LCD brightness auto-adjusts depending on AC or battery operation&lt;br /&gt;
* Fn buttons generate ACPI events (/var/log/acpid)&lt;br /&gt;
* EVDO device&lt;br /&gt;
&lt;br /&gt;
=== What needs to be fixed ===&lt;br /&gt;
&lt;br /&gt;
* Network adapter (Intel PRO/1000) &lt;br /&gt;
* Dual core processor&lt;br /&gt;
* Wireless&lt;br /&gt;
* Processor frequency scaling&lt;br /&gt;
* Suspend to RAM&lt;br /&gt;
* Suspend to disk&lt;br /&gt;
* SD card reader&lt;br /&gt;
* Sound&lt;br /&gt;
* Fingerprint scanner&lt;br /&gt;
&lt;br /&gt;
== Installing Ubuntu 6.06 Flight 6 ==&lt;br /&gt;
&lt;br /&gt;
IBM Rescue and Recovery disks (seven CDs) can be created using preinstalled Windows: All programs&amp;amp;rarr;ThinkVantage&amp;amp;rarr;Create Recovery Media. However, as long as recovery partition (called ''predesktop'' in BIOS) is left intact, system '''can be restored to factory default without having recovery CDs'''.&lt;br /&gt;
&lt;br /&gt;
Ubuntu Flight 6 installer boots normally using external (USB) IBM DVD-ROM/CD-RW. SATA disk is recognised, Xorg 7.0, gdm and Gnome start normally. Xorg is configured with i810. DRI works (glxinfo|grep rendering). Networking works, eth0 uses e1000. ALSA sound worked after original installation, but at some point it stopped working as Dapper instantly had numerous updates, including kernel. &lt;br /&gt;
&lt;br /&gt;
== Fixes after installation ==&lt;br /&gt;
&lt;br /&gt;
=== SMP kernel ===&lt;br /&gt;
Flight 6 installs 2.6.15-*-386 kernel without SMP support. After installation of -686 kernel (which appears to be SMP) {{path|/proc/cpuinfo}} reports CPU0 and CPU1.&lt;br /&gt;
&lt;br /&gt;
=== Wi-Fi ===&lt;br /&gt;
Intel 3945ABG wireless driver is available from http://ipw3945.sourceforge.net/. Wireless works after following QUICK INSTALL STEPS in provided INSTALL file. Automating driver loading works as described too, except that {{path|/etc/modprobe.d/ipw3945}} has to be used instead of the proposed {{path|/etc/modules.d/ipw3945}}.&lt;br /&gt;
&lt;br /&gt;
=== CPU frequency scaling ===&lt;br /&gt;
After installation CPU0 switches between 1.5 GHz (full speed) and 1 GHz depending on load, but CPU1 stays at full speed. This is caused by a bug in &amp;lt;code&amp;gt;powernowd&amp;lt;/code&amp;gt;, which is resolved in &amp;lt;code&amp;gt;powernowd&amp;lt;/code&amp;gt; 0.97. By defaqult Flight 6 uses &amp;lt;code&amp;gt;powernowd&amp;lt;/code&amp;gt; with the &amp;lt;code&amp;gt;userspace&amp;lt;/code&amp;gt; governor. Changing to &amp;lt;code&amp;gt;ondemand&amp;lt;/code&amp;gt; governor ({{path|/sysfs/devices/system/cpu/cpu0,1/cpufreq/scaling_governor}}) and thus using kernel part for frequency scaling (modules &amp;lt;code&amp;gt;speedstep_centrino&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;freq_table&amp;lt;/code&amp;gt;) fixes this. To keep the change between reboots, install &amp;lt;code&amp;gt;sysfsutils&amp;lt;/code&amp;gt; package and add the following lines to {{path|/etc/sysfs.conf}}:&lt;br /&gt;
&lt;br /&gt;
   devices/system/cpu/cpu0/cpufreq/scaling_governor=ondemand&lt;br /&gt;
   devices/system/cpu/cpu1/cpufreq/scaling_governor=ondemand&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;powernowd&amp;lt;/code&amp;gt; can then be disabled from auto-starting by &amp;lt;code&amp;gt;rcconf&amp;lt;/code&amp;gt;. It can also be &amp;lt;code&amp;gt;apt-get remove&amp;lt;/code&amp;gt;'d, but that also wants to remove &amp;lt;code&amp;gt;ubuntu-desktop&amp;lt;/code&amp;gt; metapackage.&lt;br /&gt;
&lt;br /&gt;
If you do not want to change governers, uprading &amp;lt;code&amp;gt;powernowd&amp;lt;/code&amp;gt; from 0.96 to 0.97 also resolves the problem. Simply download &amp;lt;code&amp;gt;powernowd&amp;lt;/code&amp;gt; 0.97 [http://www.deater.net/john/powernowd.html], compile it and replace the &amp;lt;code&amp;gt;/usr/sbin/powernowd&amp;lt;/code&amp;gt; executable with the version that you have just compiled, then restart powernowd:&lt;br /&gt;
&lt;br /&gt;
  /etc/init.d/powernowd stop&lt;br /&gt;
  /etc/init.d/powernowd start&lt;br /&gt;
&lt;br /&gt;
However be careful if the powernowd package is upgraded and the original faulty executable is replaced.&lt;br /&gt;
&lt;br /&gt;
=== High pitch noise while on battery ===&lt;br /&gt;
X60s CPU produces the [[Problem_with_high_pitch_noises#Limit_ACPI_CPU_power_states|infamous high pitch noise]] when in lower-power ACPI states (a.k.a. C-states). To eliminate the noise maximum (i.e. lowest power) C-state had to be limited to C2. In {{path|/etc/sysfs.conf}}:&lt;br /&gt;
&lt;br /&gt;
   module/processor/parameters/max_cstate=2&lt;br /&gt;
&lt;br /&gt;
Alternatively upgrade the BIOS to 1.06&lt;br /&gt;
&lt;br /&gt;
== Unsolved ==&lt;br /&gt;
* Suspend to RAM (suspends, but crashes on resume)&lt;br /&gt;
* Suspend to disk (suspends, but crashes on resume)&lt;br /&gt;
* Sound &lt;br /&gt;
* SD card reader (driver in Linux kernel &amp;gt;=2.6.17)&lt;br /&gt;
&lt;br /&gt;
== Not tested ==&lt;br /&gt;
* PCMCIA slots&lt;br /&gt;
* Embeded Security Subsystem (TCPA)&lt;br /&gt;
* Active Protection System (HDAPS)&lt;br /&gt;
* Modem&lt;br /&gt;
&lt;br /&gt;
= Installation of Ubuntu 6.06 Flight 6 on X60s (model 170466U) =&lt;br /&gt;
== Specifications ==&lt;br /&gt;
&lt;br /&gt;
* Processor - Intel Core Duo  1.66GHZ&lt;br /&gt;
* Hard Drive - SATA 80GB - HTS541080&lt;br /&gt;
* Networking - Integrated Wireless (Atheros)&lt;br /&gt;
* Sound - Intel&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
0000:00:00.0 Host bridge: Intel Corporation Mobile Memory Controller Hub (rev 03)&lt;br /&gt;
0000:00:02.0 VGA compatible controller: Intel Corporation Mobile Integrated Graphics Controller (rev 03)&lt;br /&gt;
0000:00:02.1 Display controller: Intel Corporation Mobile Integrated Graphics Controller (rev 03)&lt;br /&gt;
0000:00:1b.0 0403: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller (rev 02)&lt;br /&gt;
0000:00:1c.0 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 1 (rev 02)&lt;br /&gt;
0000:00:1c.1 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 2 (rev 02)&lt;br /&gt;
0000:00:1c.2 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 3 (rev 02)&lt;br /&gt;
0000:00:1c.3 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 4 (rev 02)&lt;br /&gt;
0000:00:1d.0 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #1 (rev 02)&lt;br /&gt;
0000:00:1d.1 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #2 (rev 02)&lt;br /&gt;
0000:00:1d.2 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #3 (rev 02)&lt;br /&gt;
0000:00:1d.3 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #4 (rev 02)&lt;br /&gt;
0000:00:1d.7 USB Controller: Intel Corporation 82801G (ICH7 Family) USB2 EHCI Controller (rev 02)&lt;br /&gt;
0000:00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev e2)&lt;br /&gt;
0000:00:1f.0 ISA bridge: Intel Corporation 82801GBM (ICH7-M) LPC Interface Bridge (rev 02)&lt;br /&gt;
0000:00:1f.1 IDE interface: Intel Corporation 82801G (ICH7 Family) IDE Controller (rev 02)&lt;br /&gt;
0000:00:1f.2 0106: Intel Corporation 82801GBM/GHM (ICH7 Family) Serial ATA Storage Controllers cc=AHCI (rev 02)&lt;br /&gt;
0000:00:1f.3 SMBus: Intel Corporation 82801G (ICH7 Family) SMBus Controller (rev 02)&lt;br /&gt;
0000:02:00.0 Ethernet controller: Intel Corporation 82573L Gigabit Ethernet Controller&lt;br /&gt;
0000:03:00.0 Ethernet controller: Atheros Communications, Inc. AR5212 802.11abg NIC (rev 01)&lt;br /&gt;
0000:15:00.0 ffff: Ricoh Co Ltd RL5c476 II (rev ff)&lt;br /&gt;
0000:15:00.1 ffff: Ricoh Co Ltd R5C552 IEEE 1394 Controller (rev ff)&lt;br /&gt;
0000:15:00.2 ffff: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev ff)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
=== What works out of the box ===&lt;br /&gt;
* Graphics adapter and accelerator (Intel GMA 950)&lt;br /&gt;
* USB&lt;br /&gt;
* Lid switch (LCD off when lid closed)&lt;br /&gt;
* Volume control, keyboard light and screen brightness control&lt;br /&gt;
* LCD brightness auto-adjusts depending on AC or battery operation&lt;br /&gt;
* Fn buttons generate ACPI events (/var/log/acpid)&lt;br /&gt;
* Sound, using the snd_hda_intel driver&lt;br /&gt;
&lt;br /&gt;
=== What doesn't work out of the box===&lt;br /&gt;
&lt;br /&gt;
* Network adapter (Intel PRO/1000) &lt;br /&gt;
* Suspend to ram&lt;br /&gt;
* Suspend to disk&lt;br /&gt;
* Wireless&lt;br /&gt;
** ''atheros driver in linux-restricted-modules-2.6.15-20-686 will not work, see below for instructions''&lt;br /&gt;
&lt;br /&gt;
=== Sound ===&lt;br /&gt;
* The sound is very clean, loud enough and there doesn't appear to be any backround machine noise escaping through the card.&lt;br /&gt;
&lt;br /&gt;
=== Annoyances ===&lt;br /&gt;
* '''Battery life''' - With the 8 cell battery Lenovo boasts that it gets about 8 hours of battery life.  So far in Linux it is getting about 5-6.  Need to mess around with more power saving options. To improve battery life rmmod uhci_hcd (disable USB).&lt;br /&gt;
* The Hitachi serial ATA harddrive makes a faint but noticeable high pitched clicking sound when running off the battery.&lt;br /&gt;
* The e1000 network driver currently has issues with the x60s. If you're having issues with eth0 appearing, give this bug report a read:&lt;br /&gt;
http://sourceforge.net/tracker/index.php?func=detail&amp;amp;aid=1474679&amp;amp;group_id=42302&amp;amp;atid=447449&lt;br /&gt;
&lt;br /&gt;
== What works after installation ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Wireless ===&lt;br /&gt;
&lt;br /&gt;
* The X60s comes with an EVDO modem in the USA model of the laptop. The device seems to register correctly with usbserial (when given the correct options).&lt;br /&gt;
* The X60s comes with Bluetooth support it appears to work out of box.&lt;br /&gt;
* Unlike the earlier versions of the X60s this one uses the Atheros driver.&lt;br /&gt;
* The LED wireless indicator light does not switch on when wireless is enabled (unless you use ndiswrapper)&lt;br /&gt;
* The wireless toggle switch does nothing (although it appears to turn the led on momentarily)&lt;br /&gt;
&lt;br /&gt;
==== EVDO ====&lt;br /&gt;
&lt;br /&gt;
[[Verizon_1xEV-DO_WWAN|Some general EVDO info here]].&lt;br /&gt;
&lt;br /&gt;
First we detect the device with lsusb. It should be the Sierra Wireless device unless IBM/Lenova changes it mid-stream:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bus 005 Device 003: ID 17ef:1000&lt;br /&gt;
Bus 005 Device 001: ID 0000:0000&lt;br /&gt;
Bus 002 Device 003: ID 1199:0218 Sierra Wireless, Inc.&lt;br /&gt;
Bus 002 Device 001: ID 0000:0000&lt;br /&gt;
Bus 003 Device 001: ID 0000:0000&lt;br /&gt;
Bus 001 Device 001: ID 0000:0000&lt;br /&gt;
Bus 004 Device 002: ID 0a5c:2110 Broadcom Corp.&lt;br /&gt;
Bus 004 Device 003: ID 0483:2016 SGS Thomson Microelectronics Fingerprint ReaderBus 004 Device 001: ID 0000:0000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then we modprobe the driver with the previously discovered values:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
modprobe usbserial vendor=0x1199 product=0x0218&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
dmesg should show something like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[17187980.292000] drivers/usb/serial/usb-serial.c: USB Serial support registered for generic&lt;br /&gt;
[17187980.292000] usbserial_generic 2-1:1.0: generic converter detected&lt;br /&gt;
[17187980.292000] usb 2-1: generic converter now attached to ttyUSB0&lt;br /&gt;
[17187980.292000] usb 2-1: generic converter now attached to ttyUSB1&lt;br /&gt;
[17187980.292000] usb 2-1: generic converter now attached to ttyUSB2&lt;br /&gt;
[17187980.292000] usbcore: registered new driver usbserial_generic&lt;br /&gt;
[17187980.292000] drivers/usb/serial/usb-serial.c: USB Serial Driver core&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can have the driver automatically load by adding the following line to your /etc/modules file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
usbserial vendor=0x1199 product=0x0218&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
Your modem is now loaded and ready to go on /dev/ttyUSB0. Call your service provider for details.&lt;br /&gt;
&lt;br /&gt;
==== Bluetooth ====&lt;br /&gt;
Bluetooth should work out of box. Ensure that you have the 'bluez-utils' package installed and then you can query your device with 'hciconfig -a':&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
hci0:   Type: USB&lt;br /&gt;
        BD Address: 00:16:EC:B2:D1:90 ACL MTU: 1017:8 SCO MTU: 64:8&lt;br /&gt;
        UP RUNNING PSCAN ISCAN&lt;br /&gt;
        RX bytes:375 acl:0 sco:0 events:17 errors:0&lt;br /&gt;
        TX bytes:319 acl:0 sco:0 commands:17 errors:0&lt;br /&gt;
        Features: 0xff 0xff 0x8d 0xfe 0x9b 0xfd 0x00 0x80&lt;br /&gt;
        Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3&lt;br /&gt;
        Link policy: RSWITCH HOLD SNIFF PARK&lt;br /&gt;
        Link mode: SLAVE ACCEPT&lt;br /&gt;
        Name: 'makho-0'&lt;br /&gt;
        Class: 0x3e0100&lt;br /&gt;
        Service Classes: Networking, Rendering, Capturing&lt;br /&gt;
        Device Class: Computer, Uncategorized&lt;br /&gt;
        HCI Ver: 2.0 (0x3) HCI Rev: 0x206c LMP Ver: 2.0 (0x3) LMP Subver: 0x415c        Manufacturer: Broadcom Corporation (15)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note:&lt;br /&gt;
Bringing the device down with 'hciconfig hci0 down' will not disable the bluetooth light on the laptop. However you can disable the device entirely with the fn-f5 key combo. The device will vanish from hciconfig and the light will go out.&lt;br /&gt;
&lt;br /&gt;
==== compiling the madwifi drivers from source - WORKS :) ====&lt;br /&gt;
&lt;br /&gt;
* untar the latest drivers from teh madwifi website - http://sourceforge.net/projects/madwifi/&lt;br /&gt;
* prepare build environment&lt;br /&gt;
 apt-get install build-essential&lt;br /&gt;
 apt-get install linux-headers-`uname -r`&lt;br /&gt;
 apt-get install sharutils&lt;br /&gt;
* in the madwifi directory build and install the module&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
 modprobe ahc_pci&lt;br /&gt;
&lt;br /&gt;
==== WPA1 encryption - WORKS :) ====&lt;br /&gt;
* In order for this to work you '''must''' compile the wpa_supplicant from source.  &lt;br /&gt;
** follow these instructions carefully - http://madwifi.org/wiki/UserDocs/802.11i&lt;br /&gt;
&lt;br /&gt;
==== ndiswrapper - WORKS :) ====&lt;br /&gt;
* Why use ndiswrapper instead?  Madwifi would not allow me to connect to 5+ wireless networks I had access to.  So, if you too have this problem, try ndiswrapper, if not, support open source and use madwifi.&lt;br /&gt;
* Download and install ndiswrapper&lt;br /&gt;
* Download the driver and use wine to extract it (or another machine):&lt;br /&gt;
** http://www-307.ibm.com/pc/support/site.wss/document.do?lndocid=MIGR-52527&lt;br /&gt;
* Goto the WINXP_2K directory where the driver is and do the following:&lt;br /&gt;
  ndiswrapper -i NET5211.INF&lt;br /&gt;
  modprobe ndiswrapper&lt;br /&gt;
* Your wireless card should now be the wlan0 interface, and the wireless light should light up!&lt;br /&gt;
&lt;br /&gt;
== Fingerprint reader ==&lt;br /&gt;
The X60s comes with a small USB fingerprint reader attached below the mouse buttons. It appears as a USB device. Here's the relevant output of lsusb:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Bus 004 Device 003: ID 0483:2016 SGS Thomson Microelectronics Fingerprint Reader&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It may be possible to use this device with the instructions found on the following two websites:&lt;br /&gt;
http://pavelmachek.livejournal.com/25060.html&lt;br /&gt;
http://66.102.7.104/search?q=cache:9VkP3DzVdoYJ:linuxbiometrics.com/modules/newbb/viewtopic.php%3Fviewmode%3Dflat%26order%3DASC%26topic_id%3D66%26forum%3D1%26move%3Dnext%26topic_time%3D1122861328%26PHPSESSID%3D677fd91c80089e4ba3edd25fbbbbc2f8+SGS+Thomson+Microelectronics+Fingerprint+Reader+Bus&amp;amp;hl=en&amp;amp;gl=us&amp;amp;ct=clnk&amp;amp;cd=5&amp;amp;client=firefox&lt;br /&gt;
&lt;br /&gt;
== Special Keys ==&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|+ Post-install support for special keys in Ubuntu Linux 6.06 Flight 6&lt;br /&gt;
! Keys !! function !! status&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F2}} || lock screen || does not work&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F3}} || blank screen || does not work&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F4}} || suspend to ram || does not work&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F5}} || switch bluetooth || not tested&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F7}} || switch display || does not work&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F8}} || switch between touchpoint and touchpad || not applicable&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F9}} || eject from dock || not tested&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F12}} || suspend to disk || does not work&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|END}} || reduce brightness || works&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|HOME}} || increase brightness || works&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|PGUP}} || keyboard light || works&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:X60s]]&lt;/div&gt;</summary>
		<author><name>Pavel</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=TuxOnIce&amp;diff=24069</id>
		<title>TuxOnIce</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=TuxOnIce&amp;diff=24069"/>
		<updated>2006-08-10T22:50:42Z</updated>

		<summary type="html">&lt;p&gt;Pavel: suspend2's alternatives got better in meantime&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;
===Software Suspend 2 - swsusp2===&lt;br /&gt;
Software Suspend 2, sometimes also called &amp;quot;swsusp2&amp;quot; and &amp;quot;suspend2&amp;quot;, is an implementation of suspend-to-disk functionality in the form of a Linux kernel patch and several userspace utilities. It is an alternative to both the BIOS-driven hibernation feature found on most ThinkPad models, and the [[swsusp]] &amp;quot;software suspend&amp;quot; functionality built into recent Linux kernels.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Features==&lt;br /&gt;
Compared to the alternatives, Software Suspend 2 has some unique [http://suspend2.net/features features]:&lt;br /&gt;
* Saving the memory image into a swap file, a swap partition or normal a file on any filesystem.&lt;br /&gt;
* Cancelling a suspend in progress&lt;br /&gt;
* Different bugs -- if the alternatives don't work, try this one!&lt;br /&gt;
&lt;br /&gt;
Since it is implemented purely in software, Software Suspend 2 is in principle machine-independent and should work on all modern ThinkPad models. However, in some cases problematic drivers need to be unloaded before suspension. This is handled by the &amp;lt;tt&amp;gt;hibernate&amp;lt;/tt&amp;gt; script (see below).&lt;br /&gt;
&lt;br /&gt;
==Availability / Project Homepage==&lt;br /&gt;
* [http://suspend2.net/ Project home page]&lt;br /&gt;
&lt;br /&gt;
==Model-specific Status==&lt;br /&gt;
&lt;br /&gt;
{| align=&amp;quot;center&amp;quot; cellpadding=&amp;quot;2&amp;quot; width=&amp;quot;100%&amp;quot; style=&amp;quot;border:1px; background:grey;&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#efefef;&amp;quot;| Thinkpad Model &lt;br /&gt;
! style=&amp;quot;background:#efefef;&amp;quot;| Type &lt;br /&gt;
! style=&amp;quot;background:#efefef;&amp;quot;| Operating System &lt;br /&gt;
! style=&amp;quot;background:#efefef;&amp;quot;| Kernel Version&lt;br /&gt;
! style=&amp;quot;background:#efefef;&amp;quot;| Suspend2 Version&lt;br /&gt;
! style=&amp;quot;background:#efefef;&amp;quot;| Success&lt;br /&gt;
! style=&amp;quot;background:#efefef;&amp;quot;| Note&lt;br /&gt;
|- style=&amp;quot;background: white;&amp;quot;&lt;br /&gt;
| {{T42}}&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
! style =&amp;quot;color:green;&amp;quot;| Yes &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;background: white; color:black;&amp;quot;&lt;br /&gt;
| {{T43}}&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
! style =&amp;quot;color:green;&amp;quot;| Yes &lt;br /&gt;
| &lt;br /&gt;
|- style=&amp;quot;background: white; color:black;&amp;quot;&lt;br /&gt;
| {{T21}}&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
! style =&amp;quot;color:green;&amp;quot;| Yes &lt;br /&gt;
| need to unload the sound module (&amp;lt;tt&amp;gt;snd-cs46xx&amp;lt;/tt&amp;gt;) on suspend. May want to enable UseDummyXServer if running X&lt;br /&gt;
|- style=&amp;quot;background: white; color:black;&amp;quot;&lt;br /&gt;
| {{X41T}}&lt;br /&gt;
| &lt;br /&gt;
| Fedore Core 4&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
! style =&amp;quot;color:green;&amp;quot;| Yes &lt;br /&gt;
| requires SATA resume patch and the SATA drivers compiled as built-in or in initrd (see [[Problems with SATA and Linux]]) and a {{path|hibernate.conf}} fix (see [[Installing Fedora Core 4 on a ThinkPad X41 Tablet]])&lt;br /&gt;
|- style=&amp;quot;background: white; color:black;&amp;quot;&lt;br /&gt;
| {{X22}}&lt;br /&gt;
| &lt;br /&gt;
| Ubuntu Breezy&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
! style =&amp;quot;color:green;&amp;quot;| Yes &lt;br /&gt;
| see [[Installing Ubuntu (Breezy) on a ThinkPad X22]]&lt;br /&gt;
|- style=&amp;quot;background: white; color:black;&amp;quot;&lt;br /&gt;
| {{G41}}&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
! style =&amp;quot;color:green;&amp;quot;| Yes &lt;br /&gt;
| see [[Installing Debian on a ThinkPad G41]]&lt;br /&gt;
|- style=&amp;quot;background: white; color:black;&amp;quot;&lt;br /&gt;
| {{R52}}&lt;br /&gt;
| &lt;br /&gt;
| &lt;br /&gt;
| 2.6.17.1&lt;br /&gt;
| 2.2.7&lt;br /&gt;
! style =&amp;quot;color:green;&amp;quot;| Yes &lt;br /&gt;
| FC5 with kernel [http://mhensler.de/swsusp/download_en.php 2.6.17-1.2145_1.rhfc5.cubbi_suspend2]&lt;br /&gt;
|- style=&amp;quot;background: white; color:black;&amp;quot;&lt;br /&gt;
| {{T23}}&lt;br /&gt;
| 2647-9KU &lt;br /&gt;
| Debian Etch&lt;br /&gt;
| 2.6.17.4&lt;br /&gt;
| 2.2.7&lt;br /&gt;
! style =&amp;quot;color:green;&amp;quot;| Yes &lt;br /&gt;
|&lt;br /&gt;
|- style=&amp;quot;background: white; color:black;&amp;quot;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Installation Instructions==&lt;br /&gt;
The [http://suspend2.net/ project home page] has a detailed HOWTO and FAQ. The following are just a few highlights.&lt;br /&gt;
&lt;br /&gt;
===Patching mkinitrd===&lt;br /&gt;
If your systems uses an &amp;lt;tt&amp;gt;initrd&amp;lt;/tt&amp;gt; file (most do), you'll need to patch or replace your &amp;lt;tt&amp;gt;initrd&amp;lt;/tt&amp;gt;-creation script.&lt;br /&gt;
&lt;br /&gt;
*{{Fedora}} 4: in {{path|/sbin/mkinitrd}}, find this line:&lt;br /&gt;
 echo &amp;quot;echo Mounted /proc filesystem&amp;quot; &amp;gt;&amp;gt; $RCFILE&lt;br /&gt;
and add the following immediately afterwards:&lt;br /&gt;
 echo &amp;quot;echo &amp;gt; /proc/suspend2/do_resume&amp;quot; &amp;gt;&amp;gt;$RCFILE&lt;br /&gt;
*{{Fedora}} 5: in {{path|/sbin/mkinitrd}}, find this line:&lt;br /&gt;
 mount -t proc /proc /proc&lt;br /&gt;
and add the following immediately afterwards:&lt;br /&gt;
 echo &amp;gt; /proc/suspend2/do_resume &lt;br /&gt;
*{{Debian}}: copy [http://dagobah.ucc.asn.au/swsusp/2.0.0.102/swsusp-initrd.sh swsusp-initrd.sh] script to your {{path|/etc/mkinitrd/scripts}} directory before creating initrd image.&lt;br /&gt;
&lt;br /&gt;
Make sure you regenerate your &amp;lt;tt&amp;gt;initrd&amp;lt;/tt&amp;gt; file (using &amp;lt;tt&amp;gt;mkinitrd&amp;lt;/tt&amp;gt; or by reinstalling the kernel) after patching &amp;lt;tt&amp;gt;mkinitrd&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
===Hibernate script===&lt;br /&gt;
Software Suspend 2 works best with the &amp;lt;tt&amp;gt;hibernate&amp;lt;/tt&amp;gt; script (available from the project home page), which takes care of auxiliary tasks needed on many systems (e.g., unloading problematic modules and restoring video modes).&lt;br /&gt;
&lt;br /&gt;
====Availability====&lt;br /&gt;
*{{Gentoo}}: emerge hibernate-script&lt;br /&gt;
*{{Fedora}}: kernel and hibernate RPMs are available at http://mhensler.de/swsusp/&lt;br /&gt;
*{{Ubuntu}}: packages for Ubuntu Dapper Drake (kernel, hibernate, suspend2ui-userui): http://dagobah.ucc.asn.au/dapper-kernels/&lt;br /&gt;
*PLD: poldek -iv hibernate&lt;br /&gt;
*Other: check the home page for packages (deb, i386 rpm, tgz, and source rpm) from http://www.suspend2.net&lt;br /&gt;
&lt;br /&gt;
==Configuration tips==&lt;br /&gt;
===RediSafe-like functionality===&lt;br /&gt;
The hibernate functionality on some ThinkPad BIOSes offers the useful &amp;quot;RediSafe&amp;quot; feature, which suspends to both RAM and disk. This way you get quick resumes (directly from RAM), plus the safey of suspend-to-disk in case the battery runs out.&lt;br /&gt;
&lt;br /&gt;
Software Suspend 2 provides this feature too; simply add the following to {{path|/etc/hibernate/suspend2.conf}}:&lt;br /&gt;
 PowerdownMethod 3&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Patches]] [[Category:Drivers]]&lt;/div&gt;</summary>
		<author><name>Pavel</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Tp_smapi&amp;diff=23872</id>
		<title>Tp smapi</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Tp_smapi&amp;diff=23872"/>
		<updated>2006-07-30T10:28:59Z</updated>

		<summary type="html">&lt;p&gt;Pavel: Add row for x60&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 &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; kernel module exposes some features of the ThinkPad's [[SMAPI support for Linux|SMAPI]] functionality via a &amp;lt;tt&amp;gt;sysfs&amp;lt;/tt&amp;gt; interface. Currently, the implemented functionality is control of battery charging, extended battery status and control of CD/DVD speed (disabled by default).&lt;br /&gt;
&lt;br /&gt;
For old 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 may cause arbitrary damage (though so far none was reported).}}&lt;br /&gt;
&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;
*Optical drive speed control (disabled by default)&lt;br /&gt;
&lt;br /&gt;
===Project Homepage / Availability===&lt;br /&gt;
* Project page: http://tpctl.sourceforge.net/&lt;br /&gt;
* You need to download only the [http://sourceforge.net/project/showfiles.php?group_id=1212&amp;amp;package_id=171579 tp_smapi kernel module].&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.22.tgz}}&lt;br /&gt;
:{{cmdroot|cd tp_smapi-0.22}}&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;
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 Debian/Ubuntu====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
deb http://www.oakcourt.dyndns.org/debian/ ./&lt;br /&gt;
deb-src http://www.oakcourt.dyndns.org/debian/ ./&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This repository has kernel-patch packages for tp_smapi. This will not only integrate tp_smapi into your kernel build but will patch the hdaps driver for you. It is available for kernel 2.6.15 and later. Also available is an init script to automatically set SMAPI paramaters at boot--this is in package tpsmapi-utils. Please report any bugs to [[User:Ajbarr]]&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 unconditionally inhibit charging for 17 minutes:&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 a 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 charge inhibiting:&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, use one of these:&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_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/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 [[#Conflict_with_hdaps|Conflict with hdaps]] 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;
===Optical drive control features===&lt;br /&gt;
&lt;br /&gt;
To control the speed of the optical drive:&lt;br /&gt;
:{{cmdroot|echo 0 &amp;gt; /sys/devices/platform/smapi/cd_speed # slow}}&lt;br /&gt;
:{{cmdroot|echo 1 &amp;gt; /sys/devices/platform/smapi/cd_speed # medium}}&lt;br /&gt;
:{{cmdroot|echo 2 &amp;gt; /sys/devices/platform/smapi/cd_speed # fast}}&lt;br /&gt;
:{{cmdroot|cat /sys/devices/platform/smapi/cd_speed}}&lt;br /&gt;
&lt;br /&gt;
=====Enabling this feature=====&lt;br /&gt;
Changing the drive speed when a disc is being accessed will hang your computer. This feature is thus '''disabled by default''', but can be enabled using by adding &amp;lt;tt&amp;gt;#define PROVIDE_CD_SPEED&amp;lt;/tt&amp;gt; at the top of &amp;lt;tt&amp;gt;tp_smapi.c&amp;lt;/tt&amp;gt;. The safe way to set the drive speed is using &amp;lt;tt&amp;gt;hdparm -E num&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;eject -x num&amp;lt;/tt&amp;gt; for CD-ROM, and &amp;lt;tt&amp;gt;speedcontrol -x num&amp;lt;/tt&amp;gt; (sourcecode [http://safari.iki.fi/speedcontrol.c here]) for DVD. For kernels older than 2.6.15, this may require the [[Problems_with_SATA_and_Linux#No_SMART_support libata pass-through|libata pass-through patch]].&lt;br /&gt;
&lt;br /&gt;
===Features not yet implemented===&lt;br /&gt;
Other things that can be controlled through SMAPI, but are not supported in this version of the driver, include PCI bus power saving, CPU power saving control and fan control (the latter is available through an [[How to control fan speed|alternative method]]). See the included README file for more information.&lt;br /&gt;
&lt;br /&gt;
===Conflict with &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt;===&lt;br /&gt;
The extended battery status function conflicts with the [[HDAPS|hdaps]] kernel module (they use the same IO ports). &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; package includes a patch against &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; to make it compatible with &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt;. To build the patched version, 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, for example: {{cmdroot|1=make load HDAPS=1}} (see [[#Installation|Installation]] above).&lt;br /&gt;
&lt;br /&gt;
If you don't do that, you will not be able tp load &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; (and its support module &amp;lt;tt&amp;gt;tp_base&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;
Some new ThinkPad models are not recognized by the built-in whitelist, so you will need to add the &amp;lt;tt&amp;gt;force=1&amp;lt;/tt&amp;gt; module parameter to &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; (this option is added by the &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; patch to &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===Model-specific status===&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;
! &amp;amp;times; &lt;br /&gt;
! &amp;lt;tt&amp;gt;start_charge_&amp;lt;br /&amp;gt;thresh&amp;lt;/tt&amp;gt; &lt;br /&gt;
!           &amp;lt;tt&amp;gt;stop_charge_&amp;lt;br /&amp;gt;thresh&amp;lt;/tt&amp;gt;&lt;br /&gt;
!                      &amp;lt;tt&amp;gt;inhbit_charge_&amp;lt;br /&amp;gt;minutes&amp;lt;/tt&amp;gt;&lt;br /&gt;
!                                   &amp;lt;tt&amp;gt;force_discharge&amp;lt;/tt&amp;gt;&lt;br /&gt;
!                                                battery status files&lt;br /&gt;
!                                                             &amp;lt;tt&amp;gt;cd_speed&amp;lt;/tt&amp;gt;&amp;lt;br \&amp;gt;&amp;lt;span style=&amp;quot;font-size: 90%&amp;quot;&amp;gt;(see [[#Enabling_this_feature|note]] above)&amp;lt;/span&amp;gt;&lt;br /&gt;
!                                                                       Notes&lt;br /&gt;
|-&lt;br /&gt;
! colspan=8 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; | &lt;br /&gt;
=====A series=====&lt;br /&gt;
|-&lt;br /&gt;
! {{A22p}} 2629-USG&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}} || {{Cunk}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{A30}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cunk}} ||&lt;br /&gt;
|-&lt;br /&gt;
! colspan=8 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
=====G series=====&lt;br /&gt;
|-&lt;br /&gt;
! {{G41}}&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cunk}} || {{Cyes}} ||&lt;br /&gt;
|-&lt;br /&gt;
! colspan=8 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
=====R series=====&lt;br /&gt;
|-&lt;br /&gt;
! [[:Category:R31|R31]]&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || No SMAPI BIOS&lt;br /&gt;
|-&lt;br /&gt;
! {{R40}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cyes}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R50}}&lt;br /&gt;
| {{Cunk}} || {{Cno}}  || {{Cunk}} || {{Cunk}} || {{Cyes}} || {{Cunk}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R50p}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cyes}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R51}}&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cunk}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R52}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} || {{Cyes}} ||&lt;br /&gt;
|-&lt;br /&gt;
! colspan=8 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
=====T series=====&lt;br /&gt;
|-&lt;br /&gt;
! {{T20}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{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}} || 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}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T40}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cyes}} || {{Cyes}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T40p}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cyes}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T41}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cyes}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T41p}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}} || {{Cyes}} || {{Cyes}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T42}} &lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T42p}} 2373-KUU&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cunk}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T43}} 2686-DGU&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T43p}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T60}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cyes}} || {{Cunk}} ||&lt;br /&gt;
|-&lt;br /&gt;
! colspan=8 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=====X series=====&lt;br /&gt;
|-&lt;br /&gt;
! {{X20}} 2662-31G&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || tp_smapi 0.20&lt;br /&gt;
|-&lt;br /&gt;
! {{X24}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cyes}} || {{Cunk}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X31}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cyes}} || {{Cunk}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X32}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}} || {{Cyes}} || {{Cunk}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X40}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cunk}} || BIOS v2.03, EC v1.60&lt;br /&gt;
|-&lt;br /&gt;
! {{X41}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X60}}&lt;br /&gt;
| {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cyes}} || {{Cunk}} ||&lt;br /&gt;
|-&lt;br /&gt;
! colspan=8 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=====Z series=====&lt;br /&gt;
|-&lt;br /&gt;
! {{Z60t}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} || {{Cyes}} || {{Cunk}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{Z61m}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&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; 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;
[[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;/div&gt;</summary>
		<author><name>Pavel</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Tp_smapi&amp;diff=23871</id>
		<title>Tp smapi</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Tp_smapi&amp;diff=23871"/>
		<updated>2006-07-30T10:28:25Z</updated>

		<summary type="html">&lt;p&gt;Pavel: /* X series */&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 &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; kernel module exposes some features of the ThinkPad's [[SMAPI support for Linux|SMAPI]] functionality via a &amp;lt;tt&amp;gt;sysfs&amp;lt;/tt&amp;gt; interface. Currently, the implemented functionality is control of battery charging, extended battery status and control of CD/DVD speed (disabled by default).&lt;br /&gt;
&lt;br /&gt;
For old 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 may cause arbitrary damage (though so far none was reported).}}&lt;br /&gt;
&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;
*Optical drive speed control (disabled by default)&lt;br /&gt;
&lt;br /&gt;
===Project Homepage / Availability===&lt;br /&gt;
* Project page: http://tpctl.sourceforge.net/&lt;br /&gt;
* You need to download only the [http://sourceforge.net/project/showfiles.php?group_id=1212&amp;amp;package_id=171579 tp_smapi kernel module].&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.22.tgz}}&lt;br /&gt;
:{{cmdroot|cd tp_smapi-0.22}}&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;
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 Debian/Ubuntu====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
deb http://www.oakcourt.dyndns.org/debian/ ./&lt;br /&gt;
deb-src http://www.oakcourt.dyndns.org/debian/ ./&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This repository has kernel-patch packages for tp_smapi. This will not only integrate tp_smapi into your kernel build but will patch the hdaps driver for you. It is available for kernel 2.6.15 and later. Also available is an init script to automatically set SMAPI paramaters at boot--this is in package tpsmapi-utils. Please report any bugs to [[User:Ajbarr]]&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 unconditionally inhibit charging for 17 minutes:&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 a 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 charge inhibiting:&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, use one of these:&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_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/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 [[#Conflict_with_hdaps|Conflict with hdaps]] 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;
===Optical drive control features===&lt;br /&gt;
&lt;br /&gt;
To control the speed of the optical drive:&lt;br /&gt;
:{{cmdroot|echo 0 &amp;gt; /sys/devices/platform/smapi/cd_speed # slow}}&lt;br /&gt;
:{{cmdroot|echo 1 &amp;gt; /sys/devices/platform/smapi/cd_speed # medium}}&lt;br /&gt;
:{{cmdroot|echo 2 &amp;gt; /sys/devices/platform/smapi/cd_speed # fast}}&lt;br /&gt;
:{{cmdroot|cat /sys/devices/platform/smapi/cd_speed}}&lt;br /&gt;
&lt;br /&gt;
=====Enabling this feature=====&lt;br /&gt;
Changing the drive speed when a disc is being accessed will hang your computer. This feature is thus '''disabled by default''', but can be enabled using by adding &amp;lt;tt&amp;gt;#define PROVIDE_CD_SPEED&amp;lt;/tt&amp;gt; at the top of &amp;lt;tt&amp;gt;tp_smapi.c&amp;lt;/tt&amp;gt;. The safe way to set the drive speed is using &amp;lt;tt&amp;gt;hdparm -E num&amp;lt;/tt&amp;gt; or &amp;lt;tt&amp;gt;eject -x num&amp;lt;/tt&amp;gt; for CD-ROM, and &amp;lt;tt&amp;gt;speedcontrol -x num&amp;lt;/tt&amp;gt; (sourcecode [http://safari.iki.fi/speedcontrol.c here]) for DVD. For kernels older than 2.6.15, this may require the [[Problems_with_SATA_and_Linux#No_SMART_support libata pass-through|libata pass-through patch]].&lt;br /&gt;
&lt;br /&gt;
===Features not yet implemented===&lt;br /&gt;
Other things that can be controlled through SMAPI, but are not supported in this version of the driver, include PCI bus power saving, CPU power saving control and fan control (the latter is available through an [[How to control fan speed|alternative method]]). See the included README file for more information.&lt;br /&gt;
&lt;br /&gt;
===Conflict with &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt;===&lt;br /&gt;
The extended battery status function conflicts with the [[HDAPS|hdaps]] kernel module (they use the same IO ports). &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; package includes a patch against &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; to make it compatible with &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt;. To build the patched version, 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, for example: {{cmdroot|1=make load HDAPS=1}} (see [[#Installation|Installation]] above).&lt;br /&gt;
&lt;br /&gt;
If you don't do that, you will not be able tp load &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; (and its support module &amp;lt;tt&amp;gt;tp_base&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;
Some new ThinkPad models are not recognized by the built-in whitelist, so you will need to add the &amp;lt;tt&amp;gt;force=1&amp;lt;/tt&amp;gt; module parameter to &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; (this option is added by the &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; patch to &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===Model-specific status===&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;
! &amp;amp;times; &lt;br /&gt;
! &amp;lt;tt&amp;gt;start_charge_&amp;lt;br /&amp;gt;thresh&amp;lt;/tt&amp;gt; &lt;br /&gt;
!           &amp;lt;tt&amp;gt;stop_charge_&amp;lt;br /&amp;gt;thresh&amp;lt;/tt&amp;gt;&lt;br /&gt;
!                      &amp;lt;tt&amp;gt;inhbit_charge_&amp;lt;br /&amp;gt;minutes&amp;lt;/tt&amp;gt;&lt;br /&gt;
!                                   &amp;lt;tt&amp;gt;force_discharge&amp;lt;/tt&amp;gt;&lt;br /&gt;
!                                                battery status files&lt;br /&gt;
!                                                             &amp;lt;tt&amp;gt;cd_speed&amp;lt;/tt&amp;gt;&amp;lt;br \&amp;gt;&amp;lt;span style=&amp;quot;font-size: 90%&amp;quot;&amp;gt;(see [[#Enabling_this_feature|note]] above)&amp;lt;/span&amp;gt;&lt;br /&gt;
!                                                                       Notes&lt;br /&gt;
|-&lt;br /&gt;
! colspan=8 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; | &lt;br /&gt;
=====A series=====&lt;br /&gt;
|-&lt;br /&gt;
! {{A22p}} 2629-USG&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}} || {{Cunk}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{A30}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cunk}} ||&lt;br /&gt;
|-&lt;br /&gt;
! colspan=8 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
=====G series=====&lt;br /&gt;
|-&lt;br /&gt;
! {{G41}}&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cunk}} || {{Cyes}} ||&lt;br /&gt;
|-&lt;br /&gt;
! colspan=8 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
=====R series=====&lt;br /&gt;
|-&lt;br /&gt;
! [[:Category:R31|R31]]&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || No SMAPI BIOS&lt;br /&gt;
|-&lt;br /&gt;
! {{R40}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cyes}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R50}}&lt;br /&gt;
| {{Cunk}} || {{Cno}}  || {{Cunk}} || {{Cunk}} || {{Cyes}} || {{Cunk}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R50p}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cyes}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R51}}&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cunk}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R52}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} || {{Cyes}} ||&lt;br /&gt;
|-&lt;br /&gt;
! colspan=8 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
=====T series=====&lt;br /&gt;
|-&lt;br /&gt;
! {{T20}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{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}} || 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}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T40}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cyes}} || {{Cyes}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T40p}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cyes}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T41}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cyes}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T41p}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}} || {{Cyes}} || {{Cyes}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T42}} &lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T42p}} 2373-KUU&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cunk}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T43}} 2686-DGU&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T43p}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T60}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cyes}} || {{Cunk}} ||&lt;br /&gt;
|-&lt;br /&gt;
! colspan=8 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=====X series=====&lt;br /&gt;
|-&lt;br /&gt;
! {{X20}} 2662-31G&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || tp_smapi 0.20&lt;br /&gt;
|-&lt;br /&gt;
! {{X24}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cyes}} || {{Cunk}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X31}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cyes}} || {{Cunk}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X32}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}} || {{Cyes}} || {{Cunk}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X40}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cunk}} || BIOS v2.03, EC v1.60&lt;br /&gt;
|-&lt;br /&gt;
! {{X41}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} ||&lt;br /&gt;
|&lt;br /&gt;
! {{X60}}&lt;br /&gt;
| {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cyes}} || {{Cunk}} ||&lt;br /&gt;
|-&lt;br /&gt;
! colspan=8 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=====Z series=====&lt;br /&gt;
|-&lt;br /&gt;
! {{Z60t}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} || {{Cyes}} || {{Cunk}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{Z61m}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} ||&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&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; 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;
[[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;/div&gt;</summary>
		<author><name>Pavel</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=How_to_enable_integrated_fingerprint_reader_with_BioAPI&amp;diff=23870</id>
		<title>How to enable integrated fingerprint reader with BioAPI</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=How_to_enable_integrated_fingerprint_reader_with_BioAPI&amp;diff=23870"/>
		<updated>2006-07-30T09:52:00Z</updated>

		<summary type="html">&lt;p&gt;Pavel: fix typo in link&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;
This page describes the process of getting the [[Integrated Fingerprint Reader|integrated fingerprint reader]] to work under Linux, using bioapi and binary-only drivers. It is based on experiences in {{Ubuntu}} on a T43. The same works on {{Fedora}} 4 and 5, RHEL4, SuSE 9.3, SuSE 10, and {{Gentoo}}. Note that experimental open-source driver is available, see [[Integrated Fingerprint Reader|fingerprint reader]] page for details.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Basic installation==&lt;br /&gt;
===Installing the bioapi framework===&lt;br /&gt;
====Automated installation script====&lt;br /&gt;
The [[Script for enabling the fingerprint reader]] automates the installation of most components (bioapi framework, driver, pam_bioapi, pam setup, device permissions, pamtester and enrolling), for some Linux distributions.&lt;br /&gt;
&lt;br /&gt;
====Binary packages====&lt;br /&gt;
&lt;br /&gt;
Note that these packages only take care of this one section. If you can use one, you should do so and then proceed to the section entitled, Installing and Configuring the Driver.&lt;br /&gt;
&lt;br /&gt;
=====Debian/ Ubuntu Dapper=====&lt;br /&gt;
*If you're using {{Debian}} Sid (the unstable branch) or {{Ubuntu}} Dapper Drake 6.06 LTS you can try the packages from Michael R. Crusoe's site, either [http://www.qrivy.net/~michael/temp/ version 1.2.3] (recommended) or [http://www.qrivy.net/~michael/debs/unstable/ older versions] which might not work with the steps in this howto.&lt;br /&gt;
&lt;br /&gt;
{{HINT|Ignore the warning about not finding ''/usr/lib/libqtpwbsp.so'', it's not fatal.}}&lt;br /&gt;
&lt;br /&gt;
=====Gentoo=====&lt;br /&gt;
You can either grab the [http://www.qrivy.net/~michael/blua/bioapi/bioapi-1.2.2.ebuild.tar.bz2 ebuild], or use the source-install procedure below.&lt;br /&gt;
&lt;br /&gt;
Also see [http://toe.ch/~tsa/ibm-fingerprint/ http://toe.ch/~tsa/ibm-fingerprint/] for alternative documentation on installing on Gentoo including ebuilds for all the packages used.&lt;br /&gt;
=====Fedora Core=====&lt;br /&gt;
RPM packages for Fedora Core and installation instructions are available [[Installing Fedora Core 5 on a ThinkPad X41 Tablet#Fingerprint_Reader|here]]&lt;br /&gt;
&lt;br /&gt;
====Installing from source====&lt;br /&gt;
*Get the bioapi source:&lt;br /&gt;
:{{cmduser|wget http://www.qrivy.net/~michael/blua/bioapi/bioapi-latest.tar.bz2}}&lt;br /&gt;
*I could not compile bioapi with the graphical Qt tools. To do it manually, do the following:&lt;br /&gt;
:{{cmduser|tar xjf bioapi-latest.tar.bz2}}&lt;br /&gt;
:{{cmduser|cd bioapi-1.2.2}}&lt;br /&gt;
:{{cmduser|1=./configure --with-Qt-dir=no}}&lt;br /&gt;
:{{cmduser|make}}&lt;br /&gt;
:and then as root&lt;br /&gt;
:{{cmdroot|make install}}&lt;br /&gt;
:If make install fails, be sure you're root and then:&lt;br /&gt;
:{{cmdroot|1=export LD_LIBRARY_PATH=/usr/local/lib}}&lt;br /&gt;
:{{cmdroot|make install}}&lt;br /&gt;
:and if you want to compile pam_bioapi for auth later&lt;br /&gt;
:{{cmdroot|cp include/bioapi_util.h include/installdefs.h imports/cdsa/v2_0/inc/cssmtype.h /usr/include}}&lt;br /&gt;
:Be aware that checkinstall will not work!&lt;br /&gt;
:(I got through configure with Qt, but got a cryptic build error.  It all worked fine with Qt disabled as above)&lt;br /&gt;
:buzz: This is due to a wrong qt include path, set it manually in configure and everything should work.&lt;br /&gt;
*Bioapi (at least version 1.2.2) doesn't compile with GCC4. You need to patch it:&lt;br /&gt;
*This is neccessary to compile on SUSE 10.1 which it using gcc version 4.1.0.&lt;br /&gt;
:{{cmduser|wget http://upir.cz/linux/patches/bioapi-1.2.2-gcc4.patch}}&lt;br /&gt;
:{{cmduser|patch -p1 &amp;lt; bioapi-1.2.2-gcc4.patch}}&lt;br /&gt;
*Patch for gcc 4.1 is available here - http://cvs.pld-linux.org/cgi-bin/cvsweb/SOURCES/bioapi-c++.patch?rev=1.3&lt;br /&gt;
* By default, bioapi will install numerous files in {{path|/usr/local/&amp;lt;nowiki&amp;gt;{&amp;lt;/nowiki&amp;gt;bin,lib,include&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;}}, including files with &amp;quot;self-explanatory&amp;quot; names such as {{path|/usr/local/bin/Sample}}. To prevent this pollution:&lt;br /&gt;
:Create a dedicated directory, for example {{path|/opt/bioapi}} .&lt;br /&gt;
:Append &amp;lt;tt&amp;gt;--prefix=/opt/bioapi&amp;lt;/tt&amp;gt; to the above &amp;lt;tt&amp;gt;./configure&amp;lt;/tt&amp;gt; command.&lt;br /&gt;
:Append {{path|/opt/bioapi/bin}} to &amp;lt;tt&amp;gt;$PATH&amp;lt;/tt&amp;gt; and {{path|/opt/bioapi/lib}} to &amp;lt;tt&amp;gt;$LD_LIBRARY_PATH&amp;lt;/tt&amp;gt;.&lt;br /&gt;
:When installing the driver (below), tell it the new install path: {{cmdroot|sh install.sh /opt/bioapi/lib}}&lt;br /&gt;
&lt;br /&gt;
====Adjusting ldconfigs library search path====&lt;br /&gt;
At least on {{Fedora}} or {{Aurox}} 11, you may need to add {{path|/usr/local/lib}} to the library path so that the libraries referenced from &amp;lt;tt&amp;gt;pam_bioapi.so&amp;lt;/tt&amp;gt; get picked up properly. The usual way to do this is adding it to the ldconfig configuration:&lt;br /&gt;
:{{cmdroot|echo '/usr/local/lib' &amp;gt; /etc/ld.so.conf.d/bioapi.conf}}&lt;br /&gt;
:{{cmdroot|ldconfig}}&lt;br /&gt;
Alternatively you can add it to the LD_LIBRARY variable.&lt;br /&gt;
&lt;br /&gt;
If you see bioapi libs in the output of &lt;br /&gt;
:{{cmdroot|ldconfig -p | grep bioapi}}&lt;br /&gt;
then it should work.&lt;br /&gt;
&lt;br /&gt;
===Installing and configuring the driver===&lt;br /&gt;
====Installing the driver====&lt;br /&gt;
*Download {{path|TFMESS_BSP_LIN_1.0.zip}} from the [http://www.upek.com/support/dl_linux_bsp.asp UPEK support site] and unzip it into a seperate folder, as it will not create one.&lt;br /&gt;
*Change to that folder and do as root:&lt;br /&gt;
:{{cmdroot|sh install.sh}}&lt;br /&gt;
:If you're running Gentoo or Ubuntu Dapper, use&lt;br /&gt;
:{{cmdroot|sh install.sh /usr/lib}}&lt;br /&gt;
:If that fails, it may be that make install failed up above -- try setting LD_LIBRARY_PATH, do the make install again, and come back here and try this again.  You also need {{cmd|mod_install|}} from bioapi in your PATH.&lt;br /&gt;
:May there still occures and error, which means mod_install: command not found.&lt;br /&gt;
:Then login as root - not su!&lt;br /&gt;
:Do this:&lt;br /&gt;
:{{cmdroot|sh install.sh}}&lt;br /&gt;
:again. It should work. SU to root does not work since then the /usr/local/bin directory is not used per default.&lt;br /&gt;
&lt;br /&gt;
====Configuring permissions for non-root use====&lt;br /&gt;
If you want to use PAM-aware applications like xscreensaver that are NOT running with root permissions (as opposed to login, gdm or other authentication mechanisms), you may need to do all or at least some of the things in this section.  More details on what is necessary on which distributions would be greately appreciated.&lt;br /&gt;
*Create two groups, one for access to BioAPI files and the other for access to the usb files.  (This is done for full generality; i.e., you may have other USB devices which you want accessable to other users, without exposing your BioAPI configuration to them).  Add your normal user (the one you wish to use PAM-aware applications with) to both of these groups.&lt;br /&gt;
On {{Debian}} this is done with&lt;br /&gt;
:{{cmdroot|addgroup --system bioapi}}&lt;br /&gt;
:{{cmdroot|addgroup --system usbfs}}&lt;br /&gt;
:{{cmdroot|adduser yournormaluser bioapi}}&lt;br /&gt;
:{{cmdroot|adduser yournormaluser usbfs}}&lt;br /&gt;
On {{SUSE}} this is done with&lt;br /&gt;
:{{cmdroot|groupadd --system bioapi}}&lt;br /&gt;
:{{cmdroot|groupadd --system usbfs}}&lt;br /&gt;
:{{cmdroot|groupmod -A yournormaluser bioapi}}&lt;br /&gt;
:{{cmdroot|groupmod -A yournormaluser usbfs}}&lt;br /&gt;
On {{Mandriva}} this is done with&lt;br /&gt;
:{{cmdroot|groupadd -r bioapi}}&lt;br /&gt;
:{{cmdroot|groupadd -r usbfs}}&lt;br /&gt;
:{{cmdroot|usermod -G bioapi,usbfs yournormaluser}}&lt;br /&gt;
&lt;br /&gt;
:(where {{cmd|yournormaluser|}} is your normal user name).  You will need to log out and log back in for this to take effect.&lt;br /&gt;
*Set permissions on the BioAPI config/registry directory:&lt;br /&gt;
:{{cmdroot|chown -R root:bioapi /usr/local/var/bioapi/}}&lt;br /&gt;
:{{cmdroot|chmod -R 770 /usr/local/var/bioapi/}}&lt;br /&gt;
:(change this path if you used an alternate BioAPI install directory above)&lt;br /&gt;
*Set permissions on the files in {{path|/proc/bus/usb}}:&lt;br /&gt;
:{{cmdroot|chown -R root:usbfs /proc/bus/usb}}&lt;br /&gt;
:{{cmdroot|chmod -R g+X /proc/bus/usb}}&lt;br /&gt;
:{{cmdroot|chown root:usbfs /proc/bus/usb/`lsusb &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; sed -ne &amp;quot;/0483:2016/s/Bus\ \(.*\)\ Device\ \(.*\):\ .*/\1\/\2/p&amp;quot;`}}&lt;br /&gt;
:{{cmdroot|chmod 660 /proc/bus/usb/`lsusb &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; sed -ne &amp;quot;/0483:2016/s/Bus\ \(.*\)\ Device\ \(.*\):\ .*/\1\/\2/p&amp;quot;`}}&lt;br /&gt;
:You may need to replace {{cmd|lsusb|}} with its full path, which is something like {{cmd|/sbin/lsusb|}} or {{cmd|/usr/bin/lsusb|}} depending on your distro.  It might be necessary to put these lines into a script which is run at startup and resume from suspend/hibernate.&lt;br /&gt;
*As an alternative to the {{cmd|chown|}}/{{cmd|chmod|}} commands above, you can set mount options for usbfs with a line in {{path|/etc/fstab|}}; an example would be&lt;br /&gt;
 none /proc/bus/usb usbfs defaults,devgid=108,devmode=0660,busgid=108,busmode=0770,listgid=108,listmode=0660 0 0&lt;br /&gt;
:where 108 is replaced with the numerical group ID of the usbfs group (you can determine this with something like {{cmd|cat /etc/group &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; grep usbfs &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; cut -d':' -f 3|}}).  Make sure you only have one {{path|/proc/bus/usb}} entry in {{path|/etc/fstab}}.  See the {{cmd|mount(8)|}} manpage for more information on these options.  This is &amp;quot;cleaner&amp;quot; but seems to have a few weird issues -- see the talk page for details.&lt;br /&gt;
*You may also have files in {{path|/dev/bus/usb}}, which the driver will try before {{path|/proc/bus/usb}}.  If this is another usbfs mount point ({{cmd|mount|}} shows a line containing {{cmdresult|/dev/bus/usb type usbfs}}), then simply follow the above instructions with {{path|/dev/bus/usb}} rather than {{path|/proc/bus/usb}}.  Otherwise, you may be running a new kernel (i.e. 2.6.15) that makes usbfs-like files available through {{path|/dev/bus/usb}}.&lt;br /&gt;
*On systems running udev these files are dynamically created; you can configure their permissions by editing a udev config file.  On Debian this is done by changing the &amp;lt;tt&amp;gt;usb_device&amp;lt;/tt&amp;gt; line of {{path|/etc/udev/permissions.rules}} to read&lt;br /&gt;
 SUBSYSTEM==&amp;quot;usb_device&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;usbfs&amp;quot;&lt;br /&gt;
*For the beta versions only, there is a logfile, which needs to exist with the proper permissions:&lt;br /&gt;
:{{cmdroot|touch /var/log/BSP.log &amp;amp;&amp;amp; chown root:bioapi /var/log/BSP.log &amp;amp;&amp;amp; chmod 660 /var/log/BSP.log}}&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous configuration====&lt;br /&gt;
* To increase the security level (minimize false accept rate), set this in {{path|/etc/tfmessbsp.cfg}}:&lt;br /&gt;
 security-level=&amp;quot;5&amp;quot;&lt;br /&gt;
{{WARN|Please see discussion section Security Level!}}&lt;br /&gt;
&lt;br /&gt;
===Testing the driver and enrolling a fingerprint===&lt;br /&gt;
To test the driver and generate the file containing your fingerprint information, you need a sample program included with the driver.  The compilation steps below were discovered by trial and error; if they don't work for you, try the binary {{cmd|Sample|}} utility that came with the beta versions of the driver (i.e., {{path|TFMESS_BSP_LIN_1.0beta2.zip}} as mentioned above).&lt;br /&gt;
Go to the folder where you extracted {{path|TFMESS_BSP_LIN_1.0.zip}} and do:&lt;br /&gt;
:{{cmdroot|cd NonGUI_Sample}}&lt;br /&gt;
:Edit {{path|main.c|}} and remove (or comment out) the line&lt;br /&gt;
 #include &amp;quot;port/bioapi_port.h&amp;quot;&lt;br /&gt;
:{{cmdroot|gcc -o Sample main.c -L/usr/local/lib -lbioapi100 -DUNIX -DLITTLE_ENDIAN}}&lt;br /&gt;
:{{cmdroot|./Sample}}&lt;br /&gt;
:Note that Sample may only run as root, unless you've already configured the usbfs file permissions.&lt;br /&gt;
:You can try to &amp;quot;e&amp;quot;nroll (to record a fingerprint for an account) and then &amp;quot;v&amp;quot;erify (to test a fingerprint against the one it expects for an account).&lt;br /&gt;
:You'll save a step later if you use your own login username as the username to enroll here.&lt;br /&gt;
:If running {{cmd |./Sample|}} produces the error message 'BioAPI_ModuleLoad failed, BioAPI Error Code: 6477 (0x194d)'&lt;br /&gt;
:then uncommenting the line&lt;br /&gt;
://BioAPI_SetGUICallbacks(gModuleHandle, NULL, NULL,TextGuiCallback, NULL);&lt;br /&gt;
:in {{path|main.c|}} can help.&lt;br /&gt;
&lt;br /&gt;
==Login via pam_bioapi==&lt;br /&gt;
&lt;br /&gt;
The following explains how to add fingerprint authentiation to programs that use the PAM (Pluggable Authentication Modules) framework, such as  Gnome's GDM and KDE's KDM and screensaver.&lt;br /&gt;
&lt;br /&gt;
===Getting required libs &amp;amp; tools===&lt;br /&gt;
====Installing pam_bioapi====&lt;br /&gt;
*Prerequisites&lt;br /&gt;
:On SuSE 10, I needed to install the pam-devel RPM&lt;br /&gt;
:In general, you will need pam itself (standard for most distros) as well as the pam development files (probably an optional package for your distro).&lt;br /&gt;
*Get and compile the pam_bioapi module.&lt;br /&gt;
{{HINT|A new version, pam_bioapi 0.3.0, with multi-finger and identification support can be found [http://www.nax.cz/pub/bioapi/pam_bioapi/pam-bioapi_0.3.0.tar.gz here].}}&lt;br /&gt;
:{{cmduser|wget http://www.qrivy.net/~michael/blua/pam_bioapi/pam_bioapi-latest.tar.bz2}}&lt;br /&gt;
:{{cmduser|tar xjf pam_bioapi-latest.tar.bz2}}&lt;br /&gt;
:{{cmduser|cd pam_bioapi-0.2.1}}&lt;br /&gt;
:{{cmduser|wget http://badcode.de/downloads/fingerprint.patch}}&lt;br /&gt;
:{{cmduser|patch -p0 &amp;lt; fingerprint.patch}}&lt;br /&gt;
:If you want to, review the patch. In general you should review all code you download and compile, if possible.&lt;br /&gt;
:{{cmduser|&amp;lt;nowiki&amp;gt;./configure --libdir=/lib &amp;amp;&amp;amp; make &amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
:and as root&lt;br /&gt;
:{{cmdroot| make install}}&lt;br /&gt;
{{NOTE|If you get a 'rpl_malloc' error in /var/log/auth.log when trying to use the fingerprint reader, redo these steps and remove the related term from Makefile after running ./configure. (FC3, Debian etch)}}&lt;br /&gt;
*If you get 'configure: error: cannot find required header: security/_pam_macros.h' and are on a Debian-like system, do &amp;quot;apt-get install libpam0g-dev&amp;quot; and try again. If you are using a Mandriva distribution, do &amp;quot;urpmi libpam0-devel&amp;quot; instead.&lt;br /&gt;
*If you get 'PAM [dlerror: /lib/security/pam_bioapi.so: undefined symbol: BioAPIMemoryFuncs]' error in your syslog, replace 'LIBS = ' line in {{path|libpam_bioapi/makefile}} with the following (of course, replace {{path|/opt/bioapi/}} with the path where you installed bioapi):&lt;br /&gt;
 LIBS = -L/opt/bioapi/lib -lbioapi100 -lbioapi_mds300 -lmds_util&lt;br /&gt;
*Use the sample tool from the fingerprint reader to create {{path|&amp;lt;username&amp;gt;.bir}} (&amp;lt;tt&amp;gt;&amp;lt;username&amp;gt;&amp;lt;/tt&amp;gt; '''must''' be the username you want to login with. gdm will probably break for any login name that has no .bir file).&lt;br /&gt;
*As root do:&lt;br /&gt;
:{{cmdroot|SERIAL&amp;lt;nowiki&amp;gt;=`BioAPITest | sed -ne &amp;quot;/Fingerprint/{n;n;s/^.*: \(.\{9\}\)\(.\{4\}\)\(.\{4\}\)\(.\{4\}\)\(.*\)/\1-\2-\3-\4-\5/gp}&amp;quot;` &amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
:{{cmdroot|echo $SERIAL}} should print something like {{cmdresult|&amp;lt;nowiki&amp;gt;{5550454b-2054-464d-2f45-535320425350}&amp;lt;/nowiki&amp;gt;}} now.&lt;br /&gt;
:If it does, do:&lt;br /&gt;
:{{cmdroot|mkdir -p /etc/bioapi/pam/$SERIAL}}&lt;br /&gt;
:{{cmdroot|cp &amp;lt;username&amp;gt;.bir /etc/bioapi/pam/$SERIAL}}&lt;br /&gt;
:If not, you might just try&lt;br /&gt;
:{{cmdroot|SERIAL&amp;lt;nowiki&amp;gt;={5550454b-2054-464d-2f45-535320425350}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
:as this value is hardcoded into the UPEK docs.&lt;br /&gt;
&lt;br /&gt;
===Configuring pam===&lt;br /&gt;
The following part is distribution specific. On {{Ubuntu}} or {{SUSE}} you can modify {{path|/etc/pam.d/common-auth}} (on {{Gentoo}} and {{Fedora}} it is {{path|/etc/pam.d/system-auth}}) to look like this:&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 # /etc/pam.d/common-auth - authentication settings common to all services&lt;br /&gt;
 #&lt;br /&gt;
 # This file is included from other service-specific PAM config files,&lt;br /&gt;
 # and should contain a list of the authentication modules that define&lt;br /&gt;
 # the central authentication scheme for use on the system&lt;br /&gt;
 # (e.g., /etc/shadow, LDAP, Kerberos, etc.).  The default is to use the&lt;br /&gt;
 # traditional Unix authentication mechanisms.&lt;br /&gt;
 #&lt;br /&gt;
 auth       sufficient   pam_bioapi.so {5550454b-2054-464d-2f45-535320425350} /etc/bioapi/pam/&lt;br /&gt;
 password   sufficient   pam_bioapi.so {5550454b-2054-464d-2f45-535320425350} /etc/bioapi/pam/&lt;br /&gt;
 auth       required     pam_unix.so nullok_secure&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
For '''Gentoo'''-Users - this allows you to attempt a password first. If you simply press enter, it then prompts for a fingerprints. Create a file named {{path|/etc/pam.d/bioapi}}. This also means that remote services, such as SSH keep working:&lt;br /&gt;
&lt;br /&gt;
 auth       required     pam_env.so&lt;br /&gt;
 auth       sufficient   pam_unix.so likeauth nullok&lt;br /&gt;
 auth       sufficient   pam_bioapi.so {5550454b-2054-464d-2f45-535320425350} /etc/bioapi/pam/&lt;br /&gt;
 auth       required     pam_deny.so&lt;br /&gt;
 &lt;br /&gt;
 account    required     pam_unix.so&lt;br /&gt;
 &lt;br /&gt;
 session    required     pam_limits.so&lt;br /&gt;
 session    required     pam_unix.so&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Now, simply replace &amp;quot;auth include system-auth&amp;quot; in all services that you wish to use fingerprint for with &amp;quot;auth include bioapi&amp;quot;. For example, {{path|/etc/pam.d/kde}} by default contains&lt;br /&gt;
&lt;br /&gt;
  auth       include      system-auth&lt;br /&gt;
  auth       required     pam_nologin.so&lt;br /&gt;
  &lt;br /&gt;
  account    include      system-auth&lt;br /&gt;
  &lt;br /&gt;
  password   include      system-auth&lt;br /&gt;
  &lt;br /&gt;
  session    include      system-auth&lt;br /&gt;
&lt;br /&gt;
Simply replace the first &amp;quot;system-auth&amp;quot; with bioapi and you can also get rid of KDE desktop lock with a fingerprint. If you do not wish to allow for &amp;quot;password fallback&amp;quot; then remove &lt;br /&gt;
&lt;br /&gt;
 auth       sufficient   pam_unix.so likeauth nullok&lt;br /&gt;
&lt;br /&gt;
from {{path|/etc/pam.d/bioapi}}.&lt;br /&gt;
&lt;br /&gt;
{{WARN|If su/sudo expects to receive the root password (SuSE 10), you need to have fingerprint settings for root (that is, copy in a root.bir as well as a your-username.bir).  Otherwise, they get a segmentation fault.  Which is a little unfortunate, given that you need to su or sudo to change your settings... }}&lt;br /&gt;
{{WARN|Not only SuSE 10 requires root.bir to be available for su to work. Just make sure you have root.bir when su is not working with your fingerprint reader but other applications are...}}&lt;br /&gt;
Note that sshd may pick up the fingerprint settings from {{path|/etc/pam.d/common-auth}}.  I didn't want that, so I removed the &amp;quot;auth include common-auth&amp;quot; line from {{path|/etc/pam.d/sshd}} and replaced it with the lines that were originally in my {{path|/etc/pam.d/common-auth}}.  That way most local services use the fingerprint reader, but sshd does not.&lt;br /&gt;
&lt;br /&gt;
Another way to do this is to create a file ({{path|/etc/pam.d/bioapi|}} for example) which contains the {{cmd|pam_bioapi.so|}} lines, and explicitly {{cmd|@include|}} this '''before''' {{path|/etc/pam.d/common-auth|}} in the files for services which should use the fingerprint reader.  In this case you should leave {{path|/etc/pam.d/common-auth|}} alone.&lt;br /&gt;
&lt;br /&gt;
{{NOTE|This was discovered through trial and success, if it is plain wrong, wikorrect it, please.}}&lt;br /&gt;
&lt;br /&gt;
In {{Fedora}} the original 'session' terms in {{path|/etc/pam.d/system-auth}} need to be kept.&lt;br /&gt;
&lt;br /&gt;
{{HINT|The setup described above will/could affect remote ssh logins to also use biometric logins, which is a bit silly (who wants to remote ssh to the laptop, and then have to walk over to it and swipe your finger)&amp;lt;br /&amp;gt;To avoid that you can copy the default &amp;lt;tt&amp;gt;/etc/pam.d/system-auth&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;/etc/pam.d/sshd&amp;lt;/tt&amp;gt; which will allow the sshd service to use the standard authentication procedure.}}&lt;br /&gt;
&lt;br /&gt;
You can do some useful testing with [http://pamtester.sourceforge.net/ {{cmd|pamtester|}}], which calls the pam modules as if it were a program of your choice.  Examples:&lt;br /&gt;
:{{cmdroot|pamtester xdm yourusername authenticate}}&lt;br /&gt;
:{{cmduser|pamtester xscreensaver yourusername authenticate}}&lt;br /&gt;
where {{cmd|yourusername|}} is your username.  Note that {{cmd|pamtester|}} should run as root if and only if the program in question does.&lt;br /&gt;
&lt;br /&gt;
===Application support===&lt;br /&gt;
The implementation of fingerprint scanning support in the relevant applications varies.&lt;br /&gt;
&lt;br /&gt;
Here is the behaviour of the most common ones:&lt;br /&gt;
* In gdm enter your username and there should pop up an (ugly) image to swipe your finger and... magic - you can login without a password.&lt;br /&gt;
* kdm doesn't give any visual indication, other than that the cursor stops blinking. Just swipe your finger and hope it lets you log in.&lt;br /&gt;
* In xdm, enter your username and a blank password, then swipe (there is no popup as well). Identification support for xdm can be achieved with [http://www.nax.cz/pub/bioapi/2005/xdm/xdm_bio.patch this patch].&lt;br /&gt;
* The KDE screen saver in SUSE 10 requires you to enter an empty password (or select the correct user and then enter an empty password) in order to get the fingerprint prompt.&lt;br /&gt;
* For Fedora users, the redhat-config tools will crash if no root.bir presents. Also, there won't be any visual idication unless X server is properly configured for root to access. Just swipe your finger when the HDD stopped blinking or issue the following command in advance:&lt;br /&gt;
:{{cmduser|xhost +local:}}&lt;br /&gt;
* For RHEL4 users gdm, console (virtual terminal) logins and the xscreensaver all work&lt;br /&gt;
&lt;br /&gt;
===kdm support===&lt;br /&gt;
To add graphical popup to kdm, you need following:&lt;br /&gt;
* Patch for pam_bioapi. This patch adds third parameter to {{path|pam_bioapi.so}} module, which is a name of file with additional environment variables that will be supplied to the UPEK driver.&lt;br /&gt;
:{{cmdroot|wget http://upir.cz/linux/patches/pam_bioapi-0.2.1-alter-environ.patch}}&lt;br /&gt;
:{{cmdroot|patch -p1 &amp;lt; pam_bioapi-0.2.1-alter-environ.patch}}&lt;br /&gt;
* Edit your {{path|Xsetup}} file (on SUSE 10 it's {{path|/etc/X11/xdm/Xsetup}}) and add these lines:&lt;br /&gt;
 echo &amp;quot;XAUTHORITY=$XAUTHORITY&amp;quot; &amp;gt; /var/lib/xdm/kdm_env&lt;br /&gt;
 echo &amp;quot;DISPLAY=$DISPLAY&amp;quot; &amp;gt;&amp;gt; /var/lib/xdm/kdm_env&lt;br /&gt;
* In {{path|/etc/pam.d/xdm}} file, add {{path|/var/lib/xdm/kdm_env}} as a third parameter for {{path|pam_bioapi.so}} module:&lt;br /&gt;
 auth sufficient pam_bioapi.so {5550454b-2054-464d-2f45-535320425350} /etc/bioapi/pam/ /var/lib/xdm/kdm_env&lt;br /&gt;
&lt;br /&gt;
Please note, that this won't work if you have more than one Xserver.&lt;br /&gt;
&lt;br /&gt;
==Make xscreensaver use the scanner==&lt;br /&gt;
If you are using Gentoo, you can get a portage overlay with the necessary patches here: http://www.zzamboni.org/brt/files/xscreensaver-fingerprint-overlay.tar.gz&lt;br /&gt;
*Get the needed xscreensaver sources:&lt;br /&gt;
:{{cmduser|wget http://www.jwz.org/xscreensaver/xscreensaver-4.23.tar.gz}}&lt;br /&gt;
:{{cmduser|tar xzf xscreensaver-4.23.tar.gz}}&lt;br /&gt;
:{{cmduser|cd xscreensaver-4.23}}&lt;br /&gt;
:{{cmduser|wget http://www.nax.cz/pub/bioapi/2005/xscreensaver/xscreensaver-4.22_alternativeAuth.diff&amp;lt;br/&amp;gt; mirror: http://zepan.org/files/xscreensaver-4.22_alternativeAuth.diff&amp;lt;br/&amp;gt;For xscreensaver 5.00, you can get a patch here: http://www.zzamboni.org/brt/files/xscreensaver-5.00-alternativeauth.patch}}&lt;br /&gt;
*After reviewing the patch (it's small and straightforward), do&lt;br /&gt;
:{{cmduser|patch -p1 &amp;lt; xscreensaver-4.22_alternativeAuth.diff}}&amp;lt;br /&amp;gt;The patch prevents xscreensaver from opening an authentification window and dispatches the authentification request to another program, in our case &amp;lt;tt&amp;gt;pam&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;pam_bioapi&amp;lt;/tt&amp;gt;. It should apply with some offset, don't mind that. If it says something about rejected though, then there's a problem.&lt;br /&gt;
*Compile with&lt;br /&gt;
:{{cmduser|./configure --with-pam &amp;amp;&amp;amp; make}}&amp;lt;br /&amp;gt;&lt;br /&gt;
*If you receive an error like &amp;quot;Couldn't find X11 headers/libs&amp;quot; and are running a Debian-like system, try &amp;quot;apt-get install xlibs-dev&amp;quot;&lt;br /&gt;
*If you receive an error like &amp;quot;undefined reference to `XmuPrintDefaultErrorMessage'&amp;quot; then install the libxmu-dev package and run the previous line again and then install as root with&lt;br /&gt;
:{{cmduser|su -c make install}} .&lt;br /&gt;
*Make sure that the newly compiled xscreensaver is used:&lt;br /&gt;
:{{cmduser|which xscreensaver}} should return&lt;br /&gt;
:{{cmdresult|/usr/local/bin/xscreensaver}} .&lt;br /&gt;
*In case it doesn't, try adjusting your PATH.&lt;/div&gt;</summary>
		<author><name>Pavel</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=How_to_enable_integrated_fingerprint_reader_with_BioAPI&amp;diff=23869</id>
		<title>How to enable integrated fingerprint reader with BioAPI</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=How_to_enable_integrated_fingerprint_reader_with_BioAPI&amp;diff=23869"/>
		<updated>2006-07-30T09:50:52Z</updated>

		<summary type="html">&lt;p&gt;Pavel: Added notice that this driver is binary-only, and add link to open source driver.&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;
This page describes the process of getting the [[Integrated Fingerprint Reader|integrated fingerprint reader]] to work under Linux, using bioapi and binary-only drivers. It is based on experiences in {{Ubuntu}} on a T43. The same works on {{Fedora}} 4 and 5, RHEL4, SuSE 9.3, SuSE 10, and {{Gentoo}}. Note that experimental open-source driver is available, see [[Integrated Fingerprint Reader||fingerprint reader]] page for details.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Basic installation==&lt;br /&gt;
===Installing the bioapi framework===&lt;br /&gt;
====Automated installation script====&lt;br /&gt;
The [[Script for enabling the fingerprint reader]] automates the installation of most components (bioapi framework, driver, pam_bioapi, pam setup, device permissions, pamtester and enrolling), for some Linux distributions.&lt;br /&gt;
&lt;br /&gt;
====Binary packages====&lt;br /&gt;
&lt;br /&gt;
Note that these packages only take care of this one section. If you can use one, you should do so and then proceed to the section entitled, Installing and Configuring the Driver.&lt;br /&gt;
&lt;br /&gt;
=====Debian/ Ubuntu Dapper=====&lt;br /&gt;
*If you're using {{Debian}} Sid (the unstable branch) or {{Ubuntu}} Dapper Drake 6.06 LTS you can try the packages from Michael R. Crusoe's site, either [http://www.qrivy.net/~michael/temp/ version 1.2.3] (recommended) or [http://www.qrivy.net/~michael/debs/unstable/ older versions] which might not work with the steps in this howto.&lt;br /&gt;
&lt;br /&gt;
{{HINT|Ignore the warning about not finding ''/usr/lib/libqtpwbsp.so'', it's not fatal.}}&lt;br /&gt;
&lt;br /&gt;
=====Gentoo=====&lt;br /&gt;
You can either grab the [http://www.qrivy.net/~michael/blua/bioapi/bioapi-1.2.2.ebuild.tar.bz2 ebuild], or use the source-install procedure below.&lt;br /&gt;
&lt;br /&gt;
Also see [http://toe.ch/~tsa/ibm-fingerprint/ http://toe.ch/~tsa/ibm-fingerprint/] for alternative documentation on installing on Gentoo including ebuilds for all the packages used.&lt;br /&gt;
=====Fedora Core=====&lt;br /&gt;
RPM packages for Fedora Core and installation instructions are available [[Installing Fedora Core 5 on a ThinkPad X41 Tablet#Fingerprint_Reader|here]]&lt;br /&gt;
&lt;br /&gt;
====Installing from source====&lt;br /&gt;
*Get the bioapi source:&lt;br /&gt;
:{{cmduser|wget http://www.qrivy.net/~michael/blua/bioapi/bioapi-latest.tar.bz2}}&lt;br /&gt;
*I could not compile bioapi with the graphical Qt tools. To do it manually, do the following:&lt;br /&gt;
:{{cmduser|tar xjf bioapi-latest.tar.bz2}}&lt;br /&gt;
:{{cmduser|cd bioapi-1.2.2}}&lt;br /&gt;
:{{cmduser|1=./configure --with-Qt-dir=no}}&lt;br /&gt;
:{{cmduser|make}}&lt;br /&gt;
:and then as root&lt;br /&gt;
:{{cmdroot|make install}}&lt;br /&gt;
:If make install fails, be sure you're root and then:&lt;br /&gt;
:{{cmdroot|1=export LD_LIBRARY_PATH=/usr/local/lib}}&lt;br /&gt;
:{{cmdroot|make install}}&lt;br /&gt;
:and if you want to compile pam_bioapi for auth later&lt;br /&gt;
:{{cmdroot|cp include/bioapi_util.h include/installdefs.h imports/cdsa/v2_0/inc/cssmtype.h /usr/include}}&lt;br /&gt;
:Be aware that checkinstall will not work!&lt;br /&gt;
:(I got through configure with Qt, but got a cryptic build error.  It all worked fine with Qt disabled as above)&lt;br /&gt;
:buzz: This is due to a wrong qt include path, set it manually in configure and everything should work.&lt;br /&gt;
*Bioapi (at least version 1.2.2) doesn't compile with GCC4. You need to patch it:&lt;br /&gt;
*This is neccessary to compile on SUSE 10.1 which it using gcc version 4.1.0.&lt;br /&gt;
:{{cmduser|wget http://upir.cz/linux/patches/bioapi-1.2.2-gcc4.patch}}&lt;br /&gt;
:{{cmduser|patch -p1 &amp;lt; bioapi-1.2.2-gcc4.patch}}&lt;br /&gt;
*Patch for gcc 4.1 is available here - http://cvs.pld-linux.org/cgi-bin/cvsweb/SOURCES/bioapi-c++.patch?rev=1.3&lt;br /&gt;
* By default, bioapi will install numerous files in {{path|/usr/local/&amp;lt;nowiki&amp;gt;{&amp;lt;/nowiki&amp;gt;bin,lib,include&amp;lt;nowiki&amp;gt;}&amp;lt;/nowiki&amp;gt;}}, including files with &amp;quot;self-explanatory&amp;quot; names such as {{path|/usr/local/bin/Sample}}. To prevent this pollution:&lt;br /&gt;
:Create a dedicated directory, for example {{path|/opt/bioapi}} .&lt;br /&gt;
:Append &amp;lt;tt&amp;gt;--prefix=/opt/bioapi&amp;lt;/tt&amp;gt; to the above &amp;lt;tt&amp;gt;./configure&amp;lt;/tt&amp;gt; command.&lt;br /&gt;
:Append {{path|/opt/bioapi/bin}} to &amp;lt;tt&amp;gt;$PATH&amp;lt;/tt&amp;gt; and {{path|/opt/bioapi/lib}} to &amp;lt;tt&amp;gt;$LD_LIBRARY_PATH&amp;lt;/tt&amp;gt;.&lt;br /&gt;
:When installing the driver (below), tell it the new install path: {{cmdroot|sh install.sh /opt/bioapi/lib}}&lt;br /&gt;
&lt;br /&gt;
====Adjusting ldconfigs library search path====&lt;br /&gt;
At least on {{Fedora}} or {{Aurox}} 11, you may need to add {{path|/usr/local/lib}} to the library path so that the libraries referenced from &amp;lt;tt&amp;gt;pam_bioapi.so&amp;lt;/tt&amp;gt; get picked up properly. The usual way to do this is adding it to the ldconfig configuration:&lt;br /&gt;
:{{cmdroot|echo '/usr/local/lib' &amp;gt; /etc/ld.so.conf.d/bioapi.conf}}&lt;br /&gt;
:{{cmdroot|ldconfig}}&lt;br /&gt;
Alternatively you can add it to the LD_LIBRARY variable.&lt;br /&gt;
&lt;br /&gt;
If you see bioapi libs in the output of &lt;br /&gt;
:{{cmdroot|ldconfig -p | grep bioapi}}&lt;br /&gt;
then it should work.&lt;br /&gt;
&lt;br /&gt;
===Installing and configuring the driver===&lt;br /&gt;
====Installing the driver====&lt;br /&gt;
*Download {{path|TFMESS_BSP_LIN_1.0.zip}} from the [http://www.upek.com/support/dl_linux_bsp.asp UPEK support site] and unzip it into a seperate folder, as it will not create one.&lt;br /&gt;
*Change to that folder and do as root:&lt;br /&gt;
:{{cmdroot|sh install.sh}}&lt;br /&gt;
:If you're running Gentoo or Ubuntu Dapper, use&lt;br /&gt;
:{{cmdroot|sh install.sh /usr/lib}}&lt;br /&gt;
:If that fails, it may be that make install failed up above -- try setting LD_LIBRARY_PATH, do the make install again, and come back here and try this again.  You also need {{cmd|mod_install|}} from bioapi in your PATH.&lt;br /&gt;
:May there still occures and error, which means mod_install: command not found.&lt;br /&gt;
:Then login as root - not su!&lt;br /&gt;
:Do this:&lt;br /&gt;
:{{cmdroot|sh install.sh}}&lt;br /&gt;
:again. It should work. SU to root does not work since then the /usr/local/bin directory is not used per default.&lt;br /&gt;
&lt;br /&gt;
====Configuring permissions for non-root use====&lt;br /&gt;
If you want to use PAM-aware applications like xscreensaver that are NOT running with root permissions (as opposed to login, gdm or other authentication mechanisms), you may need to do all or at least some of the things in this section.  More details on what is necessary on which distributions would be greately appreciated.&lt;br /&gt;
*Create two groups, one for access to BioAPI files and the other for access to the usb files.  (This is done for full generality; i.e., you may have other USB devices which you want accessable to other users, without exposing your BioAPI configuration to them).  Add your normal user (the one you wish to use PAM-aware applications with) to both of these groups.&lt;br /&gt;
On {{Debian}} this is done with&lt;br /&gt;
:{{cmdroot|addgroup --system bioapi}}&lt;br /&gt;
:{{cmdroot|addgroup --system usbfs}}&lt;br /&gt;
:{{cmdroot|adduser yournormaluser bioapi}}&lt;br /&gt;
:{{cmdroot|adduser yournormaluser usbfs}}&lt;br /&gt;
On {{SUSE}} this is done with&lt;br /&gt;
:{{cmdroot|groupadd --system bioapi}}&lt;br /&gt;
:{{cmdroot|groupadd --system usbfs}}&lt;br /&gt;
:{{cmdroot|groupmod -A yournormaluser bioapi}}&lt;br /&gt;
:{{cmdroot|groupmod -A yournormaluser usbfs}}&lt;br /&gt;
On {{Mandriva}} this is done with&lt;br /&gt;
:{{cmdroot|groupadd -r bioapi}}&lt;br /&gt;
:{{cmdroot|groupadd -r usbfs}}&lt;br /&gt;
:{{cmdroot|usermod -G bioapi,usbfs yournormaluser}}&lt;br /&gt;
&lt;br /&gt;
:(where {{cmd|yournormaluser|}} is your normal user name).  You will need to log out and log back in for this to take effect.&lt;br /&gt;
*Set permissions on the BioAPI config/registry directory:&lt;br /&gt;
:{{cmdroot|chown -R root:bioapi /usr/local/var/bioapi/}}&lt;br /&gt;
:{{cmdroot|chmod -R 770 /usr/local/var/bioapi/}}&lt;br /&gt;
:(change this path if you used an alternate BioAPI install directory above)&lt;br /&gt;
*Set permissions on the files in {{path|/proc/bus/usb}}:&lt;br /&gt;
:{{cmdroot|chown -R root:usbfs /proc/bus/usb}}&lt;br /&gt;
:{{cmdroot|chmod -R g+X /proc/bus/usb}}&lt;br /&gt;
:{{cmdroot|chown root:usbfs /proc/bus/usb/`lsusb &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; sed -ne &amp;quot;/0483:2016/s/Bus\ \(.*\)\ Device\ \(.*\):\ .*/\1\/\2/p&amp;quot;`}}&lt;br /&gt;
:{{cmdroot|chmod 660 /proc/bus/usb/`lsusb &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; sed -ne &amp;quot;/0483:2016/s/Bus\ \(.*\)\ Device\ \(.*\):\ .*/\1\/\2/p&amp;quot;`}}&lt;br /&gt;
:You may need to replace {{cmd|lsusb|}} with its full path, which is something like {{cmd|/sbin/lsusb|}} or {{cmd|/usr/bin/lsusb|}} depending on your distro.  It might be necessary to put these lines into a script which is run at startup and resume from suspend/hibernate.&lt;br /&gt;
*As an alternative to the {{cmd|chown|}}/{{cmd|chmod|}} commands above, you can set mount options for usbfs with a line in {{path|/etc/fstab|}}; an example would be&lt;br /&gt;
 none /proc/bus/usb usbfs defaults,devgid=108,devmode=0660,busgid=108,busmode=0770,listgid=108,listmode=0660 0 0&lt;br /&gt;
:where 108 is replaced with the numerical group ID of the usbfs group (you can determine this with something like {{cmd|cat /etc/group &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; grep usbfs &amp;lt;nowiki&amp;gt;|&amp;lt;/nowiki&amp;gt; cut -d':' -f 3|}}).  Make sure you only have one {{path|/proc/bus/usb}} entry in {{path|/etc/fstab}}.  See the {{cmd|mount(8)|}} manpage for more information on these options.  This is &amp;quot;cleaner&amp;quot; but seems to have a few weird issues -- see the talk page for details.&lt;br /&gt;
*You may also have files in {{path|/dev/bus/usb}}, which the driver will try before {{path|/proc/bus/usb}}.  If this is another usbfs mount point ({{cmd|mount|}} shows a line containing {{cmdresult|/dev/bus/usb type usbfs}}), then simply follow the above instructions with {{path|/dev/bus/usb}} rather than {{path|/proc/bus/usb}}.  Otherwise, you may be running a new kernel (i.e. 2.6.15) that makes usbfs-like files available through {{path|/dev/bus/usb}}.&lt;br /&gt;
*On systems running udev these files are dynamically created; you can configure their permissions by editing a udev config file.  On Debian this is done by changing the &amp;lt;tt&amp;gt;usb_device&amp;lt;/tt&amp;gt; line of {{path|/etc/udev/permissions.rules}} to read&lt;br /&gt;
 SUBSYSTEM==&amp;quot;usb_device&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;usbfs&amp;quot;&lt;br /&gt;
*For the beta versions only, there is a logfile, which needs to exist with the proper permissions:&lt;br /&gt;
:{{cmdroot|touch /var/log/BSP.log &amp;amp;&amp;amp; chown root:bioapi /var/log/BSP.log &amp;amp;&amp;amp; chmod 660 /var/log/BSP.log}}&lt;br /&gt;
&lt;br /&gt;
====Miscellaneous configuration====&lt;br /&gt;
* To increase the security level (minimize false accept rate), set this in {{path|/etc/tfmessbsp.cfg}}:&lt;br /&gt;
 security-level=&amp;quot;5&amp;quot;&lt;br /&gt;
{{WARN|Please see discussion section Security Level!}}&lt;br /&gt;
&lt;br /&gt;
===Testing the driver and enrolling a fingerprint===&lt;br /&gt;
To test the driver and generate the file containing your fingerprint information, you need a sample program included with the driver.  The compilation steps below were discovered by trial and error; if they don't work for you, try the binary {{cmd|Sample|}} utility that came with the beta versions of the driver (i.e., {{path|TFMESS_BSP_LIN_1.0beta2.zip}} as mentioned above).&lt;br /&gt;
Go to the folder where you extracted {{path|TFMESS_BSP_LIN_1.0.zip}} and do:&lt;br /&gt;
:{{cmdroot|cd NonGUI_Sample}}&lt;br /&gt;
:Edit {{path|main.c|}} and remove (or comment out) the line&lt;br /&gt;
 #include &amp;quot;port/bioapi_port.h&amp;quot;&lt;br /&gt;
:{{cmdroot|gcc -o Sample main.c -L/usr/local/lib -lbioapi100 -DUNIX -DLITTLE_ENDIAN}}&lt;br /&gt;
:{{cmdroot|./Sample}}&lt;br /&gt;
:Note that Sample may only run as root, unless you've already configured the usbfs file permissions.&lt;br /&gt;
:You can try to &amp;quot;e&amp;quot;nroll (to record a fingerprint for an account) and then &amp;quot;v&amp;quot;erify (to test a fingerprint against the one it expects for an account).&lt;br /&gt;
:You'll save a step later if you use your own login username as the username to enroll here.&lt;br /&gt;
:If running {{cmd |./Sample|}} produces the error message 'BioAPI_ModuleLoad failed, BioAPI Error Code: 6477 (0x194d)'&lt;br /&gt;
:then uncommenting the line&lt;br /&gt;
://BioAPI_SetGUICallbacks(gModuleHandle, NULL, NULL,TextGuiCallback, NULL);&lt;br /&gt;
:in {{path|main.c|}} can help.&lt;br /&gt;
&lt;br /&gt;
==Login via pam_bioapi==&lt;br /&gt;
&lt;br /&gt;
The following explains how to add fingerprint authentiation to programs that use the PAM (Pluggable Authentication Modules) framework, such as  Gnome's GDM and KDE's KDM and screensaver.&lt;br /&gt;
&lt;br /&gt;
===Getting required libs &amp;amp; tools===&lt;br /&gt;
====Installing pam_bioapi====&lt;br /&gt;
*Prerequisites&lt;br /&gt;
:On SuSE 10, I needed to install the pam-devel RPM&lt;br /&gt;
:In general, you will need pam itself (standard for most distros) as well as the pam development files (probably an optional package for your distro).&lt;br /&gt;
*Get and compile the pam_bioapi module.&lt;br /&gt;
{{HINT|A new version, pam_bioapi 0.3.0, with multi-finger and identification support can be found [http://www.nax.cz/pub/bioapi/pam_bioapi/pam-bioapi_0.3.0.tar.gz here].}}&lt;br /&gt;
:{{cmduser|wget http://www.qrivy.net/~michael/blua/pam_bioapi/pam_bioapi-latest.tar.bz2}}&lt;br /&gt;
:{{cmduser|tar xjf pam_bioapi-latest.tar.bz2}}&lt;br /&gt;
:{{cmduser|cd pam_bioapi-0.2.1}}&lt;br /&gt;
:{{cmduser|wget http://badcode.de/downloads/fingerprint.patch}}&lt;br /&gt;
:{{cmduser|patch -p0 &amp;lt; fingerprint.patch}}&lt;br /&gt;
:If you want to, review the patch. In general you should review all code you download and compile, if possible.&lt;br /&gt;
:{{cmduser|&amp;lt;nowiki&amp;gt;./configure --libdir=/lib &amp;amp;&amp;amp; make &amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
:and as root&lt;br /&gt;
:{{cmdroot| make install}}&lt;br /&gt;
{{NOTE|If you get a 'rpl_malloc' error in /var/log/auth.log when trying to use the fingerprint reader, redo these steps and remove the related term from Makefile after running ./configure. (FC3, Debian etch)}}&lt;br /&gt;
*If you get 'configure: error: cannot find required header: security/_pam_macros.h' and are on a Debian-like system, do &amp;quot;apt-get install libpam0g-dev&amp;quot; and try again. If you are using a Mandriva distribution, do &amp;quot;urpmi libpam0-devel&amp;quot; instead.&lt;br /&gt;
*If you get 'PAM [dlerror: /lib/security/pam_bioapi.so: undefined symbol: BioAPIMemoryFuncs]' error in your syslog, replace 'LIBS = ' line in {{path|libpam_bioapi/makefile}} with the following (of course, replace {{path|/opt/bioapi/}} with the path where you installed bioapi):&lt;br /&gt;
 LIBS = -L/opt/bioapi/lib -lbioapi100 -lbioapi_mds300 -lmds_util&lt;br /&gt;
*Use the sample tool from the fingerprint reader to create {{path|&amp;lt;username&amp;gt;.bir}} (&amp;lt;tt&amp;gt;&amp;lt;username&amp;gt;&amp;lt;/tt&amp;gt; '''must''' be the username you want to login with. gdm will probably break for any login name that has no .bir file).&lt;br /&gt;
*As root do:&lt;br /&gt;
:{{cmdroot|SERIAL&amp;lt;nowiki&amp;gt;=`BioAPITest | sed -ne &amp;quot;/Fingerprint/{n;n;s/^.*: \(.\{9\}\)\(.\{4\}\)\(.\{4\}\)\(.\{4\}\)\(.*\)/\1-\2-\3-\4-\5/gp}&amp;quot;` &amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
:{{cmdroot|echo $SERIAL}} should print something like {{cmdresult|&amp;lt;nowiki&amp;gt;{5550454b-2054-464d-2f45-535320425350}&amp;lt;/nowiki&amp;gt;}} now.&lt;br /&gt;
:If it does, do:&lt;br /&gt;
:{{cmdroot|mkdir -p /etc/bioapi/pam/$SERIAL}}&lt;br /&gt;
:{{cmdroot|cp &amp;lt;username&amp;gt;.bir /etc/bioapi/pam/$SERIAL}}&lt;br /&gt;
:If not, you might just try&lt;br /&gt;
:{{cmdroot|SERIAL&amp;lt;nowiki&amp;gt;={5550454b-2054-464d-2f45-535320425350}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
:as this value is hardcoded into the UPEK docs.&lt;br /&gt;
&lt;br /&gt;
===Configuring pam===&lt;br /&gt;
The following part is distribution specific. On {{Ubuntu}} or {{SUSE}} you can modify {{path|/etc/pam.d/common-auth}} (on {{Gentoo}} and {{Fedora}} it is {{path|/etc/pam.d/system-auth}}) to look like this:&lt;br /&gt;
&lt;br /&gt;
 #&lt;br /&gt;
 # /etc/pam.d/common-auth - authentication settings common to all services&lt;br /&gt;
 #&lt;br /&gt;
 # This file is included from other service-specific PAM config files,&lt;br /&gt;
 # and should contain a list of the authentication modules that define&lt;br /&gt;
 # the central authentication scheme for use on the system&lt;br /&gt;
 # (e.g., /etc/shadow, LDAP, Kerberos, etc.).  The default is to use the&lt;br /&gt;
 # traditional Unix authentication mechanisms.&lt;br /&gt;
 #&lt;br /&gt;
 auth       sufficient   pam_bioapi.so {5550454b-2054-464d-2f45-535320425350} /etc/bioapi/pam/&lt;br /&gt;
 password   sufficient   pam_bioapi.so {5550454b-2054-464d-2f45-535320425350} /etc/bioapi/pam/&lt;br /&gt;
 auth       required     pam_unix.so nullok_secure&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
For '''Gentoo'''-Users - this allows you to attempt a password first. If you simply press enter, it then prompts for a fingerprints. Create a file named {{path|/etc/pam.d/bioapi}}. This also means that remote services, such as SSH keep working:&lt;br /&gt;
&lt;br /&gt;
 auth       required     pam_env.so&lt;br /&gt;
 auth       sufficient   pam_unix.so likeauth nullok&lt;br /&gt;
 auth       sufficient   pam_bioapi.so {5550454b-2054-464d-2f45-535320425350} /etc/bioapi/pam/&lt;br /&gt;
 auth       required     pam_deny.so&lt;br /&gt;
 &lt;br /&gt;
 account    required     pam_unix.so&lt;br /&gt;
 &lt;br /&gt;
 session    required     pam_limits.so&lt;br /&gt;
 session    required     pam_unix.so&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Now, simply replace &amp;quot;auth include system-auth&amp;quot; in all services that you wish to use fingerprint for with &amp;quot;auth include bioapi&amp;quot;. For example, {{path|/etc/pam.d/kde}} by default contains&lt;br /&gt;
&lt;br /&gt;
  auth       include      system-auth&lt;br /&gt;
  auth       required     pam_nologin.so&lt;br /&gt;
  &lt;br /&gt;
  account    include      system-auth&lt;br /&gt;
  &lt;br /&gt;
  password   include      system-auth&lt;br /&gt;
  &lt;br /&gt;
  session    include      system-auth&lt;br /&gt;
&lt;br /&gt;
Simply replace the first &amp;quot;system-auth&amp;quot; with bioapi and you can also get rid of KDE desktop lock with a fingerprint. If you do not wish to allow for &amp;quot;password fallback&amp;quot; then remove &lt;br /&gt;
&lt;br /&gt;
 auth       sufficient   pam_unix.so likeauth nullok&lt;br /&gt;
&lt;br /&gt;
from {{path|/etc/pam.d/bioapi}}.&lt;br /&gt;
&lt;br /&gt;
{{WARN|If su/sudo expects to receive the root password (SuSE 10), you need to have fingerprint settings for root (that is, copy in a root.bir as well as a your-username.bir).  Otherwise, they get a segmentation fault.  Which is a little unfortunate, given that you need to su or sudo to change your settings... }}&lt;br /&gt;
{{WARN|Not only SuSE 10 requires root.bir to be available for su to work. Just make sure you have root.bir when su is not working with your fingerprint reader but other applications are...}}&lt;br /&gt;
Note that sshd may pick up the fingerprint settings from {{path|/etc/pam.d/common-auth}}.  I didn't want that, so I removed the &amp;quot;auth include common-auth&amp;quot; line from {{path|/etc/pam.d/sshd}} and replaced it with the lines that were originally in my {{path|/etc/pam.d/common-auth}}.  That way most local services use the fingerprint reader, but sshd does not.&lt;br /&gt;
&lt;br /&gt;
Another way to do this is to create a file ({{path|/etc/pam.d/bioapi|}} for example) which contains the {{cmd|pam_bioapi.so|}} lines, and explicitly {{cmd|@include|}} this '''before''' {{path|/etc/pam.d/common-auth|}} in the files for services which should use the fingerprint reader.  In this case you should leave {{path|/etc/pam.d/common-auth|}} alone.&lt;br /&gt;
&lt;br /&gt;
{{NOTE|This was discovered through trial and success, if it is plain wrong, wikorrect it, please.}}&lt;br /&gt;
&lt;br /&gt;
In {{Fedora}} the original 'session' terms in {{path|/etc/pam.d/system-auth}} need to be kept.&lt;br /&gt;
&lt;br /&gt;
{{HINT|The setup described above will/could affect remote ssh logins to also use biometric logins, which is a bit silly (who wants to remote ssh to the laptop, and then have to walk over to it and swipe your finger)&amp;lt;br /&amp;gt;To avoid that you can copy the default &amp;lt;tt&amp;gt;/etc/pam.d/system-auth&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;/etc/pam.d/sshd&amp;lt;/tt&amp;gt; which will allow the sshd service to use the standard authentication procedure.}}&lt;br /&gt;
&lt;br /&gt;
You can do some useful testing with [http://pamtester.sourceforge.net/ {{cmd|pamtester|}}], which calls the pam modules as if it were a program of your choice.  Examples:&lt;br /&gt;
:{{cmdroot|pamtester xdm yourusername authenticate}}&lt;br /&gt;
:{{cmduser|pamtester xscreensaver yourusername authenticate}}&lt;br /&gt;
where {{cmd|yourusername|}} is your username.  Note that {{cmd|pamtester|}} should run as root if and only if the program in question does.&lt;br /&gt;
&lt;br /&gt;
===Application support===&lt;br /&gt;
The implementation of fingerprint scanning support in the relevant applications varies.&lt;br /&gt;
&lt;br /&gt;
Here is the behaviour of the most common ones:&lt;br /&gt;
* In gdm enter your username and there should pop up an (ugly) image to swipe your finger and... magic - you can login without a password.&lt;br /&gt;
* kdm doesn't give any visual indication, other than that the cursor stops blinking. Just swipe your finger and hope it lets you log in.&lt;br /&gt;
* In xdm, enter your username and a blank password, then swipe (there is no popup as well). Identification support for xdm can be achieved with [http://www.nax.cz/pub/bioapi/2005/xdm/xdm_bio.patch this patch].&lt;br /&gt;
* The KDE screen saver in SUSE 10 requires you to enter an empty password (or select the correct user and then enter an empty password) in order to get the fingerprint prompt.&lt;br /&gt;
* For Fedora users, the redhat-config tools will crash if no root.bir presents. Also, there won't be any visual idication unless X server is properly configured for root to access. Just swipe your finger when the HDD stopped blinking or issue the following command in advance:&lt;br /&gt;
:{{cmduser|xhost +local:}}&lt;br /&gt;
* For RHEL4 users gdm, console (virtual terminal) logins and the xscreensaver all work&lt;br /&gt;
&lt;br /&gt;
===kdm support===&lt;br /&gt;
To add graphical popup to kdm, you need following:&lt;br /&gt;
* Patch for pam_bioapi. This patch adds third parameter to {{path|pam_bioapi.so}} module, which is a name of file with additional environment variables that will be supplied to the UPEK driver.&lt;br /&gt;
:{{cmdroot|wget http://upir.cz/linux/patches/pam_bioapi-0.2.1-alter-environ.patch}}&lt;br /&gt;
:{{cmdroot|patch -p1 &amp;lt; pam_bioapi-0.2.1-alter-environ.patch}}&lt;br /&gt;
* Edit your {{path|Xsetup}} file (on SUSE 10 it's {{path|/etc/X11/xdm/Xsetup}}) and add these lines:&lt;br /&gt;
 echo &amp;quot;XAUTHORITY=$XAUTHORITY&amp;quot; &amp;gt; /var/lib/xdm/kdm_env&lt;br /&gt;
 echo &amp;quot;DISPLAY=$DISPLAY&amp;quot; &amp;gt;&amp;gt; /var/lib/xdm/kdm_env&lt;br /&gt;
* In {{path|/etc/pam.d/xdm}} file, add {{path|/var/lib/xdm/kdm_env}} as a third parameter for {{path|pam_bioapi.so}} module:&lt;br /&gt;
 auth sufficient pam_bioapi.so {5550454b-2054-464d-2f45-535320425350} /etc/bioapi/pam/ /var/lib/xdm/kdm_env&lt;br /&gt;
&lt;br /&gt;
Please note, that this won't work if you have more than one Xserver.&lt;br /&gt;
&lt;br /&gt;
==Make xscreensaver use the scanner==&lt;br /&gt;
If you are using Gentoo, you can get a portage overlay with the necessary patches here: http://www.zzamboni.org/brt/files/xscreensaver-fingerprint-overlay.tar.gz&lt;br /&gt;
*Get the needed xscreensaver sources:&lt;br /&gt;
:{{cmduser|wget http://www.jwz.org/xscreensaver/xscreensaver-4.23.tar.gz}}&lt;br /&gt;
:{{cmduser|tar xzf xscreensaver-4.23.tar.gz}}&lt;br /&gt;
:{{cmduser|cd xscreensaver-4.23}}&lt;br /&gt;
:{{cmduser|wget http://www.nax.cz/pub/bioapi/2005/xscreensaver/xscreensaver-4.22_alternativeAuth.diff&amp;lt;br/&amp;gt; mirror: http://zepan.org/files/xscreensaver-4.22_alternativeAuth.diff&amp;lt;br/&amp;gt;For xscreensaver 5.00, you can get a patch here: http://www.zzamboni.org/brt/files/xscreensaver-5.00-alternativeauth.patch}}&lt;br /&gt;
*After reviewing the patch (it's small and straightforward), do&lt;br /&gt;
:{{cmduser|patch -p1 &amp;lt; xscreensaver-4.22_alternativeAuth.diff}}&amp;lt;br /&amp;gt;The patch prevents xscreensaver from opening an authentification window and dispatches the authentification request to another program, in our case &amp;lt;tt&amp;gt;pam&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;pam_bioapi&amp;lt;/tt&amp;gt;. It should apply with some offset, don't mind that. If it says something about rejected though, then there's a problem.&lt;br /&gt;
*Compile with&lt;br /&gt;
:{{cmduser|./configure --with-pam &amp;amp;&amp;amp; make}}&amp;lt;br /&amp;gt;&lt;br /&gt;
*If you receive an error like &amp;quot;Couldn't find X11 headers/libs&amp;quot; and are running a Debian-like system, try &amp;quot;apt-get install xlibs-dev&amp;quot;&lt;br /&gt;
*If you receive an error like &amp;quot;undefined reference to `XmuPrintDefaultErrorMessage'&amp;quot; then install the libxmu-dev package and run the previous line again and then install as root with&lt;br /&gt;
:{{cmduser|su -c make install}} .&lt;br /&gt;
*Make sure that the newly compiled xscreensaver is used:&lt;br /&gt;
:{{cmduser|which xscreensaver}} should return&lt;br /&gt;
:{{cmdresult|/usr/local/bin/xscreensaver}} .&lt;br /&gt;
*In case it doesn't, try adjusting your PATH.&lt;/div&gt;</summary>
		<author><name>Pavel</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Integrated_Fingerprint_Reader&amp;diff=23868</id>
		<title>Integrated Fingerprint Reader</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Integrated_Fingerprint_Reader&amp;diff=23868"/>
		<updated>2006-07-30T09:48:26Z</updated>

		<summary type="html">&lt;p&gt;Pavel: Removed another dead link&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;&amp;quot; | [[Image:fingerprintreader.jpg|IBM Integrated Fingerprint Reader]] __NOTOC__&lt;br /&gt;
|style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 0; margin-right:10px; border: 1px solid #dfdfdf; padding: 0em 1em 1em 1em; background-color:#F8F8FF; align:right;&amp;quot;&amp;gt;&lt;br /&gt;
===Integrated Fingerprint Reader===&lt;br /&gt;
IBM released a second generation of T42 models in Autumn 2004 featuring Intel Pentium M 765 processors and an integrated fingerprint reader.&lt;br /&gt;
&lt;br /&gt;
The fingerprint reader is produced by a company called UPEK, which specializes in the manufacture of fingerprint readers. It is integrated as an USB device, and does all the matching in hardware, making it rather easy to use. Furthermore, IBM states that there's an interface with the [[Embedded Security Subsystem]].&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Linux Support==&lt;br /&gt;
&lt;br /&gt;
There is a new GPL driver here: http://pavelmachek.livejournal.com/25060.html&lt;br /&gt;
&lt;br /&gt;
A closed source driver from the vendor has been released.  It interfaces to the hardware as a user-space USB driver through {{path|/proc/bus/usb|}} and provides a BioAPI 1.10 device, which can then be interfaced to pam for authentication by user programs.  The driver can be downloaded from http://www.upek.com/support/dl_linux_bsp.asp; see the [[How to enable the fingerprint reader|corresponding HOWTO]] for detailed instructions.&lt;br /&gt;
&lt;br /&gt;
==Related Links==&lt;br /&gt;
* [http://www.trustedreviews.com/article.aspx?page=1643&amp;amp;head=36 Review from TrustedReviews of the fingerprint scanner]&lt;br /&gt;
* [http://biomark.org.ru/en/ A (Russian) project that provides support for a (different model) of fingerprint scanner] (also a USB device, though)&lt;br /&gt;
&lt;br /&gt;
==Models featuring this Technology==&lt;br /&gt;
*ThinkPad {{T42}}, {{T42p}}, {{T43}}, {{T43p}}, {{T60}}, {{T60p}}&lt;br /&gt;
*ThinkPad {{X41}}, {{X41T}}, {{X60}}, {{X60s}}&lt;br /&gt;
*ThinkPad {{Z60m}}, {{Z60t}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Glossary]]&lt;/div&gt;</summary>
		<author><name>Pavel</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Integrated_Fingerprint_Reader&amp;diff=23867</id>
		<title>Integrated Fingerprint Reader</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Integrated_Fingerprint_Reader&amp;diff=23867"/>
		<updated>2006-07-30T09:47:08Z</updated>

		<summary type="html">&lt;p&gt;Pavel: binary-only bioapi support is reality, not something planned. Remove obsolete link.&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;&amp;quot; | [[Image:fingerprintreader.jpg|IBM Integrated Fingerprint Reader]] __NOTOC__&lt;br /&gt;
|style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 0; margin-right:10px; border: 1px solid #dfdfdf; padding: 0em 1em 1em 1em; background-color:#F8F8FF; align:right;&amp;quot;&amp;gt;&lt;br /&gt;
===Integrated Fingerprint Reader===&lt;br /&gt;
IBM released a second generation of T42 models in Autumn 2004 featuring Intel Pentium M 765 processors and an integrated fingerprint reader.&lt;br /&gt;
&lt;br /&gt;
The fingerprint reader is produced by a company called UPEK, which specializes in the manufacture of fingerprint readers. It is integrated as an USB device, and does all the matching in hardware, making it rather easy to use. Furthermore, IBM states that there's an interface with the [[Embedded Security Subsystem]].&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Linux Support==&lt;br /&gt;
&lt;br /&gt;
There is a new GPL driver here: http://pavelmachek.livejournal.com/25060.html&lt;br /&gt;
&lt;br /&gt;
A closed source driver from the vendor has been released.  It interfaces to the hardware as a user-space USB driver through {{path|/proc/bus/usb|}} and provides a BioAPI 1.10 device, which can then be interfaced to pam for authentication by user programs.  The driver can be downloaded from http://www.upek.com/support/dl_linux_bsp.asp; see the [[How to enable the fingerprint reader|corresponding HOWTO]] for detailed instructions.&lt;br /&gt;
&lt;br /&gt;
==Related Links==&lt;br /&gt;
* [http://www.upek.com/customers/ct_notebook_ibm.asp UPEK customer report about the deal with IBM]&lt;br /&gt;
* [http://www.trustedreviews.com/article.aspx?page=1643&amp;amp;head=36 Review from TrustedReviews of the fingerprint scanner]&lt;br /&gt;
* [http://biomark.org.ru/en/ A (Russian) project that provides support for a (different model) of fingerprint scanner] (also a USB device, though)&lt;br /&gt;
&lt;br /&gt;
==Models featuring this Technology==&lt;br /&gt;
*ThinkPad {{T42}}, {{T42p}}, {{T43}}, {{T43p}}, {{T60}}, {{T60p}}&lt;br /&gt;
*ThinkPad {{X41}}, {{X41T}}, {{X60}}, {{X60s}}&lt;br /&gt;
*ThinkPad {{Z60m}}, {{Z60t}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Glossary]]&lt;/div&gt;</summary>
		<author><name>Pavel</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Integrated_Fingerprint_Reader&amp;diff=23866</id>
		<title>Integrated Fingerprint Reader</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Integrated_Fingerprint_Reader&amp;diff=23866"/>
		<updated>2006-07-30T09:45:32Z</updated>

		<summary type="html">&lt;p&gt;Pavel: Remove link to dead site&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;&amp;quot; | [[Image:fingerprintreader.jpg|IBM Integrated Fingerprint Reader]] __NOTOC__&lt;br /&gt;
|style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 0; margin-right:10px; border: 1px solid #dfdfdf; padding: 0em 1em 1em 1em; background-color:#F8F8FF; align:right;&amp;quot;&amp;gt;&lt;br /&gt;
===Integrated Fingerprint Reader===&lt;br /&gt;
IBM released a second generation of T42 models in Autumn 2004 featuring Intel Pentium M 765 processors and an integrated fingerprint reader.&lt;br /&gt;
&lt;br /&gt;
The fingerprint reader is produced by a company called UPEK, which specializes in the manufacture of fingerprint readers. It is integrated as an USB device, and does all the matching in hardware, making it rather easy to use. Furthermore, IBM states that there's an interface with the [[Embedded Security Subsystem]].&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Linux Support==&lt;br /&gt;
&lt;br /&gt;
There is a new GPL driver here: http://pavelmachek.livejournal.com/25060.html&lt;br /&gt;
&lt;br /&gt;
A closed source driver from the vendor has been released.  It interfaces to the hardware as a user-space USB driver through {{path|/proc/bus/usb|}} and provides a BioAPI 1.10 device, which can then be interfaced to pam for authentication by user programs.  The driver can be downloaded from http://www.upek.com/support/dl_linux_bsp.asp; see the [[How to enable the fingerprint reader|corresponding HOWTO]] for detailed instructions.&lt;br /&gt;
&lt;br /&gt;
==Related Links==&lt;br /&gt;
* [http://www.upek.com/customers/ct_notebook_ibm.asp UPEK customer report about the deal with IBM]&lt;br /&gt;
* [http://www.trustedreviews.com/article.aspx?page=1643&amp;amp;head=36 Review from TrustedReviews of the fingerprint scanner]&lt;br /&gt;
* [http://biomark.org.ru/en/ A (Russian) project that provides support for a (different model) of fingerprint scanner] (also a USB device, though)&lt;br /&gt;
* [http://linuxbiometrics.com/modules/news/article.php?storyid=16 UPEK announcement (planned, closed-source) support for BioAPI on Linux] The first release was scheduled for September 2005; the final driver came out in December 2005.&lt;br /&gt;
&lt;br /&gt;
==Models featuring this Technology==&lt;br /&gt;
*ThinkPad {{T42}}, {{T42p}}, {{T43}}, {{T43p}}, {{T60}}, {{T60p}}&lt;br /&gt;
*ThinkPad {{X41}}, {{X41T}}, {{X60}}, {{X60s}}&lt;br /&gt;
*ThinkPad {{Z60m}}, {{Z60t}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Glossary]]&lt;/div&gt;</summary>
		<author><name>Pavel</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Integrated_Fingerprint_Reader&amp;diff=23865</id>
		<title>Integrated Fingerprint Reader</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Integrated_Fingerprint_Reader&amp;diff=23865"/>
		<updated>2006-07-30T09:40:17Z</updated>

		<summary type="html">&lt;p&gt;Pavel: Add few more facts about fingerprint scanner&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;&amp;quot; | [[Image:fingerprintreader.jpg|IBM Integrated Fingerprint Reader]] __NOTOC__&lt;br /&gt;
|style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 0; margin-right:10px; border: 1px solid #dfdfdf; padding: 0em 1em 1em 1em; background-color:#F8F8FF; align:right;&amp;quot;&amp;gt;&lt;br /&gt;
===Integrated Fingerprint Reader===&lt;br /&gt;
IBM released a second generation of T42 models in Autumn 2004 featuring Intel Pentium M 765 processors and an integrated fingerprint reader.&lt;br /&gt;
&lt;br /&gt;
The fingerprint reader is produced by a company called UPEK, which specializes in the manufacture of fingerprint readers. It is integrated as an USB device, and does all the matching in hardware, making it rather easy to use. Furthermore, IBM states that there's an interface with the [[Embedded Security Subsystem]].&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Linux Support==&lt;br /&gt;
&lt;br /&gt;
There is a new GPL driver here: http://pavelmachek.livejournal.com/25060.html&lt;br /&gt;
&lt;br /&gt;
A closed source driver from the vendor has been released.  It interfaces to the hardware as a user-space USB driver through {{path|/proc/bus/usb|}} and provides a BioAPI 1.10 device, which can then be interfaced to pam for authentication by user programs.  The driver can be downloaded from http://www.upek.com/support/dl_linux_bsp.asp; see the [[How to enable the fingerprint reader|corresponding HOWTO]] for detailed instructions.&lt;br /&gt;
&lt;br /&gt;
==Related Links==&lt;br /&gt;
* [http://www.upek.com/customers/ct_notebook_ibm.asp UPEK customer report about the deal with IBM]&lt;br /&gt;
* [http://www.trustedreviews.com/article.aspx?page=1643&amp;amp;head=36 Review from TrustedReviews of the fingerprint scanner]&lt;br /&gt;
* [http://biomark.org.ru/en/ A (Russian) project that provides support for a (different model) of fingerprint scanner] (also a USB device, though)&lt;br /&gt;
* [http://linuxbiometrics.com/modules/newbb/viewtopic.php?topic_id=8&amp;amp;forum=1 Discussion of the T42/T42p fingerprint scanner on the Linux Biometrics site]  ''(Linux Biometrics site has blown up so for now this link does not work)''&lt;br /&gt;
* [http://linuxbiometrics.com/modules/news/article.php?storyid=16 UPEK announcement (planned, closed-source) support for BioAPI on Linux] The first release was scheduled for September 2005; the final driver came out in December 2005.&lt;br /&gt;
&lt;br /&gt;
==Models featuring this Technology==&lt;br /&gt;
*ThinkPad {{T42}}, {{T42p}}, {{T43}}, {{T43p}}, {{T60}}, {{T60p}}&lt;br /&gt;
*ThinkPad {{X41}}, {{X41T}}, {{X60}}, {{X60s}}&lt;br /&gt;
*ThinkPad {{Z60m}}, {{Z60t}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Glossary]]&lt;/div&gt;</summary>
		<author><name>Pavel</name></author>
		
	</entry>
</feed>