<?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=Dskrvk</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=Dskrvk"/>
	<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/wiki/Special:Contributions/Dskrvk"/>
	<updated>2026-04-18T17:06:52Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.12</generator>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=How_to_get_special_keys_to_work&amp;diff=56714</id>
		<title>How to get special keys to work</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=How_to_get_special_keys_to_work&amp;diff=56714"/>
		<updated>2016-02-15T01:13:42Z</updated>

		<summary type="html">&lt;p&gt;Dskrvk: /* Weblinks */ add category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Overview==&lt;br /&gt;
The following table gives an overview over the special keys found on ThinkPads and what is needed to make them work.&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
! key !! standard function{{footnote|1}} !! tools supporting key{{footnote|2}} !! configurability{{footnote|3}} !! remarks&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}} || - || [[#xmodmap configuration|xmodmap]], [[#tpb configuration|tpb]] || full || on release without completed key combination&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F1}} || - || [[thinkpad-acpi]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F2}} || lock screen || [[thinkpad-acpi]] || full || in models from T/X/Z 60 onwards&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F3}} || blank screen || [[thinkpad-acpi]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F4}} || suspend to ram || [[thinkpad-acpi]] || full || may generate ACPI event when not enabled in the thinkpad-acpi hotkey mask&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F5}} || switch bluetooth || [[thinkpad-acpi]] || full || in models starting from 2002&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F6}} || Video conference || || || Starting with the T400s (icon of a camera and a headset)&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F7}} || toggle display || [[thinkpad-acpi]], [[#tpb configuration|tpb]] || additional actions || [[Sample Fn-F7 script]]&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F8}} || toggle trackpoint/touchpad || [[thinkpad-acpi]], [[#tpb configuration|tpb]] || additional actions ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F9}} || eject from dock || [[thinkpad-acpi]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F10}} || - || [[thinkpad-acpi]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F11}} || - || [[thinkpad-acpi]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F12}} || hibernate || [[thinkpad-acpi]] || full || may generate ACPI event when not enabled in the thinkpad-acpi hotkey mask&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|Home}} / {{key|Fn}}{{key|Pos1}} || brightness up || [[thinkpad-acpi]], [[#tpb configuration|tpb]], [[KMilo]] || additional actions ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|End}} || brightness down || [[thinkpad-acpi]], [[#tpb configuration|tpb]], [[KMilo]] || additional actions ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|PageUp}} || toggle thinklight || [[thinkpad-acpi]], [[#tpb configuration|tpb]], [[KMilo]] || additional actions ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|Space}} || toggle zoom || [[thinkpad-acpi]], [[#tpb configuration|tpb]], [[KMilo]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|Ins}} || - || [[thinkpad-acpi]]|| full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|Del}} || - || [[thinkpad-acpi]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|Backspace}} || - || [[thinkpad-acpi]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|NumLock}} || - || [[#xmodmap configuration|xmodmap]] || make working ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Windows}} || - || [[#xmodmap configuration|xmodmap]] || remapping ||&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Access IBM|#495988}} or {{ibmkey|ThinkPad|#494949}} or {{ibmkey|ThinkVantage|#495988}} || help application || [[thinkpad-acpi]],[[#tpb configuration|tpb]], [[KMilo]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Home|#494949}} || open web browser || [[#xmodmap configuration|xmodmap]], [[#tpb configuration|tpb]], [[KMilo]] || full || only {{A30}}, {{A30p}}, {{A31}}, {{A31p}} and ext. keyboards&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Search|#494949}} || open search application || [[#xmodmap configuration|xmodmap]], [[#tpb configuration|tpb]], [[KMilo]] || full || only {{A30}}, {{A30p}}, {{A31}}, {{A31p}} and ext. keyboards&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Mail|#494949}} || open mail application || [[#xmodmap configuration|xmodmap]], [[#tpb configuration|tpb]], [[KMilo]] || full || only {{A30}}, {{A30p}}, {{A31}}, {{A31p}} and ext. keyboards&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Favorites|#494949}} || open favorites || [[#xmodmap configuration|xmodmap]], [[#tpb configuration|tpb]] || full || only {{A30}}, {{A30p}}, {{A31}}, {{A31p}} and ext. keyboards&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Reload|#494949}} || reload web page || [[#xmodmap configuration|xmodmap]], [[#tpb configuration|tpb]] || full || only {{A30}}, {{A30p}}, {{A31}}, {{A31p}} and ext. keyboards&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Abort|#494949}} || abort loading page || [[#xmodmap configuration|xmodmap]], [[#tpb configuration|tpb]] || full || only {{A30}}, {{A30p}}, {{A31}}, {{A31p}} and ext. keyboards&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Backward|#494949}} || previous page || [[#xmodmap configuration|xmodmap]], [[#tpb configuration|tpb]] || full ||  ext. keyboards and ThinkPads starting from 2002&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Forward|#494949}} || next page || [[#xmodmap configuration|xmodmap]], [[#tpb configuration|tpb]] || full || ext. keyboards and ThinkPads starting from 2002&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Volume up|#494949}} || volume up || [[thinkpad-acpi]], [[#tpb configuration|tpb]], [[KMilo]] || additional actions ||&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Volume down|#494949}} || volume down || [[thinkpad-acpi]], [[#tpb configuration|tpb]], [[KMilo]] || additional actions ||&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Volume mute|#494949}} || mute volume || [[thinkpad-acpi]], [[#tpb configuration|tpb]], [[KMilo]] || additional actions ||&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Microphone mute|#494949}} || Microphone volume || || || Starting with the T400s&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Play/Pause|#494949}} || start/pause playback  || [[#xmodmap configuration|xmodmap]] || full || {{X60s}} (Fn+Arrow Down)&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Stop|#494949}} || stop playback || [[#xmodmap configuration|xmodmap]] || full || {{X60s}} (Fn+Arrow Up)&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Next|#494949}} || play next || [[#xmodmap configuration|xmodmap]] || full || {{X60s}} (Fn+Arrow Right)&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Previous|#494949}} || play previous || [[#xmodmap configuration|xmodmap]] || full || {{X60s}} (Fn+Arrow Left)&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Power|#494949}} || shutdown || [[thinkpad-acpi]] || full || triggered on pressing 3secs, but notebook goes off on 5sec press&lt;br /&gt;
|-&lt;br /&gt;
| Display lid || blank screen || acpi video || full ||&lt;br /&gt;
|-&lt;br /&gt;
| Ultrabay eject || announce ultrabay change || acpi bay || full ||&lt;br /&gt;
|-&lt;br /&gt;
| Dock eject || eject from dock || acpi dock || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Tablet power|#494949}} || shutdown || [[thinkpad-acpi]] || full || triggered on pressing 3secs, but notebook goes off on 5sec press&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Tablet orientation|#494949}} || rotates screen || [[#Mapping keys with setkeycodes|setkeycodes]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Tablet shortcut|#494949}} || shortcut menu || [[#Mapping keys with setkeycodes|setkeycodes]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Tablet Esc|#494949}} || esc key || [[#Mapping keys with setkeycodes|setkeycodes]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Tablet Enter|#494949}} || enter key || [[#mapping keys with setkeycodes|setkeycodes]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Tablet Up|#494949}} || up key || [[#Mapping keys with setkeycodes|setkeycodes]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Tablet Down|#494949}} || down key || [[#Mapping keys with setkeycodes|setkeycodes]] || full ||&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Tablet (unlabeled)|#494949}} || down key || [[#Mapping keys with setkeycodes|setkeycodes]] || full ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
For completeness, note that the WiFi enable/disable switch is located (on the X61 and other models that have it) just under the front edge of the base of the machine.  You should see a small horizontal slider switch.  Enable by sliding it rightwards, disable by sliding it leftwards.&lt;br /&gt;
&lt;br /&gt;
Tablet buttons vary with model.  See [[Tablet Hardware Buttons]].&lt;br /&gt;
&lt;br /&gt;
==Triggering key events==&lt;br /&gt;
&lt;br /&gt;
===thinkpad_acpi events===&lt;br /&gt;
The thinkpad_acpi driver should automatically select an appropriate mask for your machine.&lt;br /&gt;
But on a rare occasions you might need to change the hotkey mask for key events to happen.  In that case,&lt;br /&gt;
read the recommended hotkey_mask from hotkey_recommended_mask, set the extra bits you need, and write&lt;br /&gt;
the result to hotkey_mask.  These files (actually, &amp;quot;sysfs attributes&amp;quot;) can be found on {{path|sys/devices/platform/thinkpad_acpi}}&lt;br /&gt;
&lt;br /&gt;
These events can be used to configure HAL or [[How to configure acpid|acpid]].&lt;br /&gt;
&lt;br /&gt;
{{WARN|The below list of ACPI key events seems to have been invalidated on some platforms by a recent update (March 2013) - for details, see  [[Talk:Thinkpad-acpi#Problem_with_ACPI_key_event_codes_in_OpenSuse_12.3|Problem with ACPI key event codes in OpenSuse 12.3]].}}&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
|+ events triggered by [[thinkpad-acpi]]. May vary on different models.&lt;br /&gt;
! key !! acpi event || IBM ThinkPad hal event || Lenovo ThinkPad hal event&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F1}} || ibm/hotkey HKEY 00000080 00001001 || ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F2}} || ibm/hotkey HKEY 00000080 00001002 || 0x01:battery || 0x01:screenlock&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F3}} || ibm/hotkey HKEY 00000080 00001003 || 0x02:screenlock || 0x02:battery&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F4}} || ibm/hotkey HKEY 00000080 00001004 || 0x03:sleep || 0x03:sleep&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F5}} || ibm/hotkey HKEY 00000080 00001005 || 0x04:radio || 0x04:radio&lt;br /&gt;
|- &lt;br /&gt;
| {{key|Fn}}{{key|F6}} || ibm/hotkey HKEY 00000080 00001006 || ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F7}} || ibm/hotkey HKEY 00000080 00001007 || 0x06:switchvideomode || 0x06:switchvideomode&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F8}} || ibm/hotkey HKEY 00000080 00001008 || 0x07:zoom || 0x07:f22&lt;br /&gt;
|- &lt;br /&gt;
| {{key|Fn}}{{key|F9}} || ibm/hotkey HKEY 00000080 00001009 || 0x08:f24 || 0x08:f24&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F10}} || ibm/hotkey HKEY 00000080 0000100a || ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F11}} || ibm/hotkey HKEY 00000080 0000100b || ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F12}} || ibm/hotkey HKEY 00000080 0000100c || 0x0b:suspend || 0x0b:suspend&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|Backspace}} || ibm/hotkey HKEY 00000080 0000100d || ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|Ins}} || ibm/hotkey HKEY 00000080 0000100e || ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|Del}} || ibm/hotkey HKEY 00000080 0000100f || ||&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|Home}}/{{key|Fn}}{{key|Pos1}} || ibm/hotkey HKEY 00000080 00001010 || 0x0f:brightnessup || 0x0f:brightnessup&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|End}} || ibm/hotkey HKEY 00000080 00001011 || 0x10:brightnessdown || 0x10:brightnessdown&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|PgUp}} || ibm/hotkey HKEY 00000080 00001012 || 0x11:kbdillumtoggle || 0x11:kbdillumtoggle&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|Space}} || ibm/hotkey HKEY 00000080 00001014 || 0x13:zoom || 0x13:zoom&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Volume up|#494949}}|| ibm/hotkey HKEY 00000080 00001015 || 0x14:volumeup || 0x14:volumeup&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Volume down|#494949}} || ibm/hotkey HKEY 00000080 00001016 || 0x15:volumedown || 0x15:volumedown&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Volume mute|#494949}} || ibm/hotkey HKEY 00000080 00001017 || 0x16:mute || 0x16:mute&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Microphone mute|#494949}} || ibm/hotkey HKEY 00000080 0000101b || ||&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Access IBM|#495988}} or {{ibmkey|ThinkPad|#494949}} or {{ibmkey|ThinkVantage|#495988}} || ibm/hotkey HKEY 00000080 00001018 || 0x17:prog1 || 0x17:prog1&lt;br /&gt;
|-&lt;br /&gt;
| Ultrabay eject || ibm/bay MSTR 00000003 00000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| Ultrabay inserted || ibm/bay MSTR 00000001 00000000 || ||&lt;br /&gt;
|-&lt;br /&gt;
| Dock eject || ibm/dock GDCK 00000003 00000001 || ||&lt;br /&gt;
|-&lt;br /&gt;
| Wireless switch || ibm/hotkey HKEY 00000080 00007000 || ||&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
By disassembling and editing the DSDT, more events can be added.  HKEY events are triggered by calls to the MKHQ function, e.g. &amp;lt;tt&amp;gt;\_SB.PCI0.LPC.EC.HKEY.MHKQ(0Ã—1007)&amp;lt;/tt&amp;gt; will trigger &amp;quot;ibm/hotkey HKEY 00000080 00001007&amp;quot;.  Most of these can be found in &amp;lt;tt&amp;gt;_Qxx&amp;lt;/tt&amp;gt; methods within the DSDT, which are executed on embedded controller events, e.g. _Q10 is triggered by pressing Fn-F7.  You can add a call to MKHQ into an existing &amp;lt;tt&amp;gt;_Qxx&amp;lt;/tt&amp;gt; method to get it recognized by thinkpad-acpi as well as creating new &amp;lt;tt&amp;gt;_Qxx&amp;lt;/tt&amp;gt; methods, which if you're lucky will correspond to an EC event that IBM never used (e.g. A 770 will send Fn-Home/End/PgUp/PgDn to thinkpad-acpi if hacked in this fashion). For example, [http://www.wormnet.eu/ibm-g40/morebuttons.dsl this is a modified block of DSDT for a G40].&lt;br /&gt;
&lt;br /&gt;
=== ACPI events from the &amp;lt;tt&amp;gt;button&amp;lt;/tt&amp;gt; module===&lt;br /&gt;
&lt;br /&gt;
A few keys can generate ACPI events that result from the &amp;lt;tt&amp;gt;button&amp;lt;/tt&amp;gt; kernel module, as long as they are masked off in the &amp;lt;tt&amp;gt;thinkpad-acpi&amp;lt;/tt&amp;gt; hotkey's mask or the hotkey function of the latter module is disabled.&lt;br /&gt;
&lt;br /&gt;
If you want the ThinkPad's BIOS and ACPI methods to know about these keys being pressed, you probably want to leave them masked out from thinkpad-acpi, and use their non-HKEY events listed below, instead.&lt;br /&gt;
&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
|+ events triggered by ACPI when hotkey is masked out or disabled. &lt;br /&gt;
! key !! event !! T60 event&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Power|#494949}} || button/power PWRF 00000080 xxxxxxxx || button/power PWRF 00000080 00000001&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F4}} || button/sleep SLPB 00000080 00000001 || button/sleep SLPB 00000080 00000001&lt;br /&gt;
|-&lt;br /&gt;
| Display lid || button/lid LID 00000080 xxxxxxxx || button/lid LID 00000080 00000001&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Configuration using HAL===&lt;br /&gt;
&lt;br /&gt;
Modern distributions like Ubuntu 8.10 and Fedora 10 use HAL to configure the kernel input devices. Xorg in turn gets these key events through the evdev driver and will no longer try to take control of the input devices away from the kernel.&lt;br /&gt;
&lt;br /&gt;
But before you get started on this you should make sure you have all the updates applied from your distro vendor as both Ubuntu 8.10 and Fedora 10 require some additional fixes that you might need.&lt;br /&gt;
====Xorg problems====&lt;br /&gt;
You may find that by default some buttons will work in Xorg and others will not (e.g. Fn-Space). The reason for this is that Xorg is limited to 255 different key codes, and some keys are mapped to key codes that are out of range for Xorg. The Xorg developers are aware of this issue and plan to fix it in XKB2. Unfortunately support for XKB2 has slipped and is now planned for Xorg 1.8, sometime in 2010.&lt;br /&gt;
&lt;br /&gt;
{{HINT|You can get Fn-Space working via ACPI events. Here is a practical [http://www.thinkwiki.org/wiki/Installing_Ubuntu_10.04_(Lucid_Lynx)_on_a_ThinkPad_Z61m#Make_Fn-Space_.28Screen_Magnify.29_work HOWTO] for Ubuntu 10.04 Lucid}} &lt;br /&gt;
&lt;br /&gt;
Default HAL config files are located in {{path|/usr/share/hal/fdi}}. If you create any custom files you should instead place them in {{path|/etc/hal/fdi}} to prevent them from getting overwritten by the next hal-info package update of your distribution.&lt;br /&gt;
&lt;br /&gt;
You can see for instance the mapping between {{path|/usr/share/hal/fdi/information/10freedesktop/30-keymap-module-thinkpad-acpi.fdi}} and that of the kernel [http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blob_plain;f=include/linux/input.h;hb=HEAD input.h] header file.&lt;br /&gt;
&lt;br /&gt;
keyboard events defined in input.h in the 0x100 range and above will be ignored by current Xorg. If you want to work around this you can change the hal config file such that for instance the Fn-F5 key no longer maps to '''radio''' (0x181) but to '''wlan''' (238) or '''bluetooth''' (237).&lt;br /&gt;
&lt;br /&gt;
Have a look at the HAL documentation for samples on how to configure your own events [http://hal.freedesktop.org/quirk/quirk-keymap-index.html].&lt;br /&gt;
&lt;br /&gt;
To check if a key is being handled by Xorg, start xev and press the key. If you do not see any output from the keypress it is not handled. If it is handled you can configure the key in Gnome with gnome-keybinding-properties (kde??).&lt;br /&gt;
&lt;br /&gt;
====bypassing Xorg====&lt;br /&gt;
Since the keys are handled by the kernel and passed through hal, we can bypass Xorg and have a key run a specific task.&lt;br /&gt;
This is useful if Xorg cannot handle the key (out of range, or X doesn't&lt;br /&gt;
matter this input key), or if your not running X. This can be done with the&lt;br /&gt;
'''halevt''' program (located at [http://www.nongnu.org/halevt|http://www.nongnu.org/halevt] ; for Debian systems, use a version &amp;gt;= 0.1.5-1). This program can react to some events detected by HAL such a special key press. For example, to run a custom script when Fn-F5 (Radio toggle) is pressed, you could put a stanza in halevt's configuration file ('''/etc/halevt/halevt.xml''', in XML format) :&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&lt;br /&gt;
  &amp;lt;halevt:Device match=&amp;quot;hal.info.category = input&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Warning: /etc/sudoers must be configured to let 'halevt' user&lt;br /&gt;
         runs the given command ! --&amp;gt;&lt;br /&gt;
    &amp;lt;halevt:Condition name=&amp;quot;ButtonPressed&amp;quot; value=&amp;quot;wlan&amp;quot; exec=&amp;quot;sudo /usr/local/sbin/toggle_wlan&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/halevt:Device&amp;gt;&lt;br /&gt;
  &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here, '''sudo''' is used as the halevt daemon runs with its own user, which don't have required rights to do the work in the custom script ''/usr/local/sbin/toggle_wlan'', so in ''/etc/sudoers'', we have :&lt;br /&gt;
&lt;br /&gt;
  halevt  ALL = NOPASSWD: /usr/local/sbin/toggle_wlan&lt;br /&gt;
&lt;br /&gt;
Be careful when writing halevt configuration, as the daemon isn't very verbose about what it does or not : you don't get error messages when command run fails…&lt;br /&gt;
&lt;br /&gt;
===inputlirc configuration===&lt;br /&gt;
&lt;br /&gt;
An alternative to halevt is inputlirc [http://ajoute.org/wiki/doc/linux/inputlirc]. After installation of the packages inputlirc [http://packages.debian.org/search?keywords=inputlirc] and lirc, you can test it with the irw command. To run custom scripts you need a configuration for the irexec daemon ('''/etc/lirc/lircrc''') :&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;nowiki&amp;gt;&lt;br /&gt;
   begin&lt;br /&gt;
    prog = irexec&lt;br /&gt;
    button = KEY_RADIO&lt;br /&gt;
    config = /etc/acpi/wireless.sh&lt;br /&gt;
   end&lt;br /&gt;
&lt;br /&gt;
   begin&lt;br /&gt;
    prog = irexec&lt;br /&gt;
    button = KEY_SCREENLOCK&lt;br /&gt;
    config = /etc/acpi/thinkpad-lockorbattery.sh&lt;br /&gt;
   end&lt;br /&gt;
   &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===tpb configuration===&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
|+ configuration keywords for [[tpb]] (to put in {{path|/etc/tpbrc}})&lt;br /&gt;
! key !! config keyword&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Access IBM|#495988}} or {{ibmkey|ThinkPad|#494949}} || THINKPAD&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Home|#494949}} || HOME&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Search|#494949}} || SEARCH&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Mail|#494949}} || MAIL&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Favorites|#494949}} || FAVORITES&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Reload|#494949}} || RELOAD&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Abort|#494949}} || ABORT&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Backward|#494949}} || BACKWARD&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Forward|#494949}} || FORWARD&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}} || FN&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|Space}} || CALLBACK (zoom on/off)&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|PageUp}} || CALLBACK (thinklight on/off)&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F7}} || CALLBACK (display lcd/crt/both)&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|F8}} || CALLBACK (expand on/off)&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|Home}} / {{key|Fn}}{{key|Pos1}} || CALLBACK (brightness &amp;lt;percent&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}}{{key|End}} || CALLBACK (brightness &amp;lt;percent&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Volume up|#494949}} || CALLBACK (volume &amp;lt;percent&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Volume down|#494949}} || CALLBACK (volume &amp;lt;percent&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Volume mute|#494949}} || CALLBACK (mute on/off)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
To all parameter keywords should be assigned the full path to the executables supposed to be started on key press.&lt;br /&gt;
The exectable provided for the CALLBACK keyword should take the parameters given in parentheses and act according to them.&lt;br /&gt;
If you want to use xmodmap for the HOME, SEARCH, MAIL, FAVORITES, RELOAD, ABORT, BACKWARD, FORWARD and FN keys you should&lt;br /&gt;
provide a &amp;lt;tt&amp;gt;XEVENTS OFF&amp;lt;/tt&amp;gt; in your {{path|/etc/tpbrc}}. &lt;br /&gt;
You can use an appropriate executable to [[How to inject fake keystrokes|inject fake keystrokes]].&lt;br /&gt;
&lt;br /&gt;
For Debian users, tpb is started from {{path|/etc/X11/Xsession.d/90tpb}}.&lt;br /&gt;
&lt;br /&gt;
'''Sound Button configuration'''&lt;br /&gt;
&lt;br /&gt;
''Note: Tested on T60p with Ubuntu 6.06 LTS''&lt;br /&gt;
&lt;br /&gt;
Most Thinkpads have a hardware sound mixer, thus the volumes buttons should work without configuration. However, this change is not reflected in the software mixer. tpb has a switch to enable software mixer support via OSS. The manual recommends this only for devices without a hardware mixer, but it also works for other hadware mixer enabled devices, even with the ALSA system. Just put MIXER ON in your {{path|/etc/tpbrc}} file and you can see the effect immediately in any ALSA mixer (e.g. kmix). For this to work you need write permissions to {{path|/dev/nvram}}.&lt;br /&gt;
&lt;br /&gt;
''Note: Tested on X21 with Ubuntu 6.06 LTS''&lt;br /&gt;
&lt;br /&gt;
On the ThinkPad X21 (and maybe some other older models) ACPI causes problems with tpb.  On an X21 using acpi the volume buttons would work occasionally, and the OSD for tpb functions would rarely work.  If a volume buttons was pressed too often, sometimes the computer would enter a low power (unplugged state) and would require a reboot.  The solution is to use APM instead of ACPI.  Instructions can be found in [[How_to_make_APM_work]].&lt;br /&gt;
&lt;br /&gt;
===KMilo configuration===&lt;br /&gt;
The programs to be executed by [[KMilo]] are configured via the KDE Control Center (&amp;lt;tt&amp;gt;kcontrol&amp;lt;/tt&amp;gt;), under &amp;lt;tt&amp;gt;System Administration --&amp;gt; IBM Thinkpad Laptop&amp;lt;/tt&amp;gt;. Note that you can use appropriate commands to [[How to inject fake keystrokes|inject fake keystrokes]].&lt;br /&gt;
&lt;br /&gt;
===xmodmap configuration===&lt;br /&gt;
xmodmap enables you to edit the modifier map and keymap tables that are used to translate keycodes into keysyms.&lt;br /&gt;
Understood? Well, basically it allows you to give the X server a dictionary for the translation of keycodes like &amp;quot;97&amp;quot; into more human readable synonyms like &amp;quot;Home&amp;quot;. This way xmodmap allows you to make the special keys of your keyboard known to X applications.&lt;br /&gt;
&lt;br /&gt;
To discover the keycode that a certain keypress produces, use the tool {{cmduser|xev}} &lt;br /&gt;
&lt;br /&gt;
Usually you should write your keycode-keysym associations into the file {{path|~/.Xmodmap}}. This file is usually read by the X session startup scripts of your system, so that the mappings automatically get included everytime you run the X server.&lt;br /&gt;
&lt;br /&gt;
The {{path|~/.Xmodmap}} lines for our purpose are in the form of&lt;br /&gt;
 keycode &amp;lt;keycode&amp;gt; = &amp;lt;keysym&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Load the assocation using the command&lt;br /&gt;
&lt;br /&gt;
{{cmduser|xmodmap ~/.Xmodmap}} &lt;br /&gt;
&lt;br /&gt;
(some configurations do this automatically upon X startup). &lt;br /&gt;
&lt;br /&gt;
The following table shows the keycodes generated by the ThinkPad special keys and sensible keysyms to assign them to.&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
|+ keycodes and recommended keysyms&lt;br /&gt;
! key !! keycode !! keysym&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Access IBM|#495988}} or {{ibmkey|ThinkPad|#494949}} || 159 || XF86LaunchA&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Backward|#494949}} || 234 || XF86Back or F19&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Forward|#494949}} || 233 || XF86Forward or F20&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Play/Pause|#494949}} || 162 || XF86AudioPlay&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Stop|#494949}} || 164 || XF86AudioStop&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Next|#494949}} || 153 || XF86AudioNext&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Previous|#494949}} || 144 || XF86AudioPrev&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
| {{ibmkey|Home|#494949}} || 178 || XF86HomePage&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Search|#494949}} || 229 || XF86Search&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Mail|#494949}} || 236 || XF86Mail&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Favorites|#494949}} || 230 || XF86AddFavorite or XF86Favorites&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Reload|#494949}} || 231 || XF86Reload&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Abort|#494949}} || 232 || XF86Stop&lt;br /&gt;
|-&lt;br /&gt;
| {{key|Fn}} || 227 || F35&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Note: You can also use xkeycaps (an X tool to display and edit the X keyboard mapping) to generate proper .Xmodmap.&lt;br /&gt;
&lt;br /&gt;
Note: if you are running [[tpb]] you might need to add the line &amp;lt;tt&amp;gt;XEVENTS=off&amp;lt;/tt&amp;gt; into your tpbrc to stop it from grabbing the key events and allow them to get through to X instead. See [[http://www.thinkwiki.org/wiki/Tpb]] for more detailed instruction on how to use tpb and xmodmap.&lt;br /&gt;
&lt;br /&gt;
Note: XF86Forward and XF86Back do not work correctly in Firefox. You may want to map them to F19 and F20 instead if you use Firefox.&lt;br /&gt;
&lt;br /&gt;
Note: The &amp;quot;XF86AudioPlay&amp;quot; etc. just works with a few programs. To make it work with more multimedia programs you have map the key to use something like [http://www.kde-apps.org/content/show.php/ReMoot?content=63140 ReMoot]. ReMoot is a command line wrapper that control 18 of the most common multimedia applications. &lt;br /&gt;
&lt;br /&gt;
=====Enabling the Windows and Menu Keys=====&lt;br /&gt;
On some systems the Windows and Menu keys may not be recognized.  You can enable then by&lt;br /&gt;
making the following changes:&lt;br /&gt;
&lt;br /&gt;
        keycode 115 = F13&lt;br /&gt;
        keycode 227 = F35&lt;br /&gt;
&lt;br /&gt;
F13 and F35 are used for the Windows and and Menu keys respectively.  Labelling keycpode 227 as &amp;quot;Menu&amp;quot; may conflict with the right-mouse-click event.&lt;br /&gt;
&lt;br /&gt;
=====Using Caps Lock as Super L (Windows key)=====&lt;br /&gt;
You can easily use Caps Lock as Win key by adding the following in your ~/.Xmodmap:&lt;br /&gt;
        ! No Caps Lock&lt;br /&gt;
        clear lock&lt;br /&gt;
        ! Caps Lock as Win key&lt;br /&gt;
        add mod4 = Caps_Lock&lt;br /&gt;
=====NumLock=====&lt;br /&gt;
On the ThinkPad {{600}}, {{T20}}, {{T21}}, {{T22}}, {{T30}}, {{X20}}, {{X21}},  {{X31}}, {{X40}}, {{T42p}}, {{T43}}, {{R51}}, {{R52}} and possibly other models, X does not recognize the keycode for {{key|NumLk}} = {{key|Shift}}+{{key|ScrLk}}. To fix this, add the following to {{path|~/.Xmodmap}} in your home directory or {{path|/etc/X11/Xmodmap}} and run &amp;lt;tt&amp;gt;xmodmap&amp;lt;/tt&amp;gt;, ex: &amp;lt;tt&amp;gt;xmodmap ~/.Xmodmap&amp;lt;/tt&amp;gt;:&lt;br /&gt;
 keycode 77 = Num_Lock&lt;br /&gt;
&lt;br /&gt;
The following might work better for you:&lt;br /&gt;
  keycode 77 = Num_Lock Num_Lock&lt;br /&gt;
because you will only get keycode 77 together with Shift (at least on the {{T43}})&lt;br /&gt;
&lt;br /&gt;
This configuration also enables the respective LED.&lt;br /&gt;
&lt;br /&gt;
Please note, pressing the {{key|Shift}}+{{key|ScrLk}} key combination, without first following the above configuration, will start an accessibility feature, which will allow the numeric keypad to maneuver the mouse pointer.  Starting this accessibility feature and subsequently running xmodmap, as described above, results in the accessibility feature and the numeric lock LED functioning simultaneously.  As such, the above configuration should be completed before the accessibility feature is started in order to produce numbers.&lt;br /&gt;
======T60 (and possibly others)======&lt;br /&gt;
It seems that on the T60, PrtSc, ScrLk and Pause all generate the correct keycodes, however Fn-PrtSc (labelled as SysRq) generates keycode 64 (Alt_L) followed by the expected 111 (Sys_Req) on down and the same thing in the opposite order on release. Fn-ScrLk (labelled as NmLk) does indeed toggle the Numlock, but only seems to register as an X event the first time it is engaged. The above solution does not appear to work. This is perhaps because the Numlock toggle is built into the firmware rather than controlled by the kernel. Finally, Fn-Pause (labelled as Break) generates keycode 37 (Control_L) followed by the expected keycode 110 (Break) on down and the same thing in reverse order on release.&lt;br /&gt;
&lt;br /&gt;
=====NumPad (KeyPad) keys access by a key combination=====&lt;br /&gt;
The current state is that you have to switch NumLock '''on''' via {{key|Fn}}+{{key|ScrLk}} and then e.g. type {{key|u}} to get a {{key|KP_4}} (NumPad 4). To get back to normal keyboard, you have to type {{key|Fn}}+{{key|ScrLk}} again.&lt;br /&gt;
&lt;br /&gt;
Some people (including me) are missing on recent Thinkpads the option to have Fn as a modifier key to access the NumPad instead, i.e. and e.g. {{key|Fn}}+{{key|u}} gives you {{key|KP_4}}.&lt;br /&gt;
&lt;br /&gt;
There is currently no way to make this work in a simple way (pleeeease correct me if I am wrong!), though there is a work-around. Instead of using {{key|Fn}} for accessing the NumPad, {{key|CapsLock}} can get this function by being mapped as Mode_switch (the {{key|AltGr}} on international keyboards). The {{key|Fn}} can be remapped to be Caps_Lock - while at the same time retaining its function to access the special laptop functions (e.g. {{key|Fn}}+{{key|F4}} for sleep}}, by using .Xmodmap.&lt;br /&gt;
&lt;br /&gt;
So on my {{R60}} running fvwm@{{Slackware}} 12.1 the .Xmodmap would look like this:&lt;br /&gt;
&lt;br /&gt;
 ! Make the forward and back buttons work&lt;br /&gt;
    keycode 233 = XF86Forward&lt;br /&gt;
    keycode 234 = XF86Back&lt;br /&gt;
 ! Make the WIN key to Super modifier&lt;br /&gt;
    keycode 115 = Super_L&lt;br /&gt;
 ! Set the Caps_Lock physical key to Mode_switch (like AltGr on intl. keyboards)&lt;br /&gt;
    keycode 66 = Mode_switch&lt;br /&gt;
 ! Set the Fn key to work as Caps_Lock now. The special key combos like Fn-F4 for &amp;quot;sleep&amp;quot; still work then&lt;br /&gt;
    keycode 227 = Caps_Lock&lt;br /&gt;
    clear lock&lt;br /&gt;
    add lock = Caps_Lock&lt;br /&gt;
 ! Now we activate those new keys. Find some free mod slots (xmodmap) and put them there.&lt;br /&gt;
    clear mod4&lt;br /&gt;
    clear mod5&lt;br /&gt;
    add mod4 = Super_L&lt;br /&gt;
    add mod3 = Mode_switch&lt;br /&gt;
 ! It's time to add the keypad keys to the third position of the key definition (pure shift mode_switch shift+mode_switch)&lt;br /&gt;
    keycode 16 = 7 ampersand KP_7&lt;br /&gt;
    keycode 17 = 8 asterisk KP_8&lt;br /&gt;
    keycode 18 = 9 parenleft KP_9&lt;br /&gt;
      keycode 19 = 0 parenright KP_Divide&lt;br /&gt;
    keycode 30 = u U KP_4&lt;br /&gt;
    keycode 31 = i I KP_5&lt;br /&gt;
    keycode 32 = o O KP_6&lt;br /&gt;
      keycode 33 = p P KP_Multiply&lt;br /&gt;
    keycode 44 = j J KP_1&lt;br /&gt;
    keycode 45 = k K KP_2&lt;br /&gt;
    keycode 46 = l L KP_3&lt;br /&gt;
      keycode 47 = semicolon colon KP_Subtract&lt;br /&gt;
    keycode 58 = m M KP_0&lt;br /&gt;
 ! ... I have to use the coma key, too, on the keypad...so I set it to be F20 (which is not existing on normal keyboards and thus is free... check for side effects in programmes accepting F12+ keys!)&lt;br /&gt;
    keycode 59 = comma less F20 &lt;br /&gt;
    keycode 60 = period greater KP_Decimal    &lt;br /&gt;
      keycode  61 = slash question KP_Add&lt;br /&gt;
&lt;br /&gt;
{{WARN|Your keycodes might be different as well as your '''mod''#''''' settings.}}&lt;br /&gt;
Use {{cmduser|xmodmap}} and {{cmduser|xmodmap -pke}} to check your ModMap, and the tool {{cmduser|xev}} to obtain your exact key codes.&lt;br /&gt;
&lt;br /&gt;
===Mapping keys with setkeycodes===&lt;br /&gt;
You can use the setkeycodes command to remap certain keys. I.e. you can use {{cmdroot|setkeycodes 6e 109 6d 104 69 28 6b 1}} to map the Tablets Up and Down keys to the standard PageUp and PageDown keys and Tablet Escape and Enter to their respective keys.&lt;br /&gt;
&lt;br /&gt;
The following table shows the scancodes generated by the ThinkPad keys.  They vary with model - see [[Tablet Hardware Buttons]].&lt;br /&gt;
{| {{prettytable}}&lt;br /&gt;
|+ scancodes&lt;br /&gt;
! key !! scancode&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Tablet orientation|#494949}} || 0x6c&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Tablet Shortcut|#494949}} || 0x68&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Tablet Esc|#494949}} || 0x6b&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Tablet Enter|#494949}} || 0x69&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Tablet Up|#494949}} || 0x6d&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Tablet Down|#494949}} || 0x6e&lt;br /&gt;
|-&lt;br /&gt;
| {{ibmkey|Tablet (unlabeled)|#494949}} || 0x67&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===acpi_fakekey===&lt;br /&gt;
You can turn acpi events into user-level xevents by putting &amp;lt;tt&amp;gt;acpi_fakekey&amp;lt;/tt&amp;gt; commands into the acpi action scripts. There are several layers involved in using acpi keys in this way, so I'll go through the example of using the ThinkVantage button to open xmms.&lt;br /&gt;
&lt;br /&gt;
My ThinkVantage button generates an '''acpi event''' &amp;quot;ibm/hotkey HKEY 00000080 00001018&amp;quot;, so we have the event file &amp;lt;tt&amp;gt;/etc/acpi/events/ThinkVantage&amp;lt;/tt&amp;gt; for it which executes the script &amp;lt;tt&amp;gt;/etc/acpi/actions/fakekey-macro.sh&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
event=ibm/hotkey HKEY 00000080 00001018&lt;br /&gt;
action=/etc/acpi/actions/fakekey-macro.sh&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In turn, the executable &amp;lt;tt&amp;gt;/etc/acpi/actions/fakekey-macro.sh&amp;lt;/tt&amp;gt; script calls acpi_fakekey with the '''key number''' defined in &amp;lt;tt&amp;gt;/usr/share/acpi-support/key-constants&amp;lt;/tt&amp;gt; as $KEY_MACRO which is 112 (you could just as well choose an other key number, just make sure that it doesn't belong to something else like the &amp;quot;j&amp;quot; key or something). &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
. /usr/share/acpi-support/key-constants&lt;br /&gt;
acpi_fakekey $KEY_MACRO &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
I have no idea how this actually corresponds to which xevent is generated, so I can find out out by running the program &amp;lt;tt&amp;gt;xev&amp;lt;/tt&amp;gt; and hitting the ThinkVantage button while the mouse is in the &amp;lt;tt&amp;gt;xev&amp;lt;/tt&amp;gt; window (remember to &amp;lt;tt&amp;gt;/etc/init.d/acpid restart&amp;lt;/tt&amp;gt; first if you just created the &amp;lt;tt&amp;gt;/etc/acpi/events/ThinkVantage&amp;lt;/tt&amp;gt; file). I get something popping up in the terminal where I ran xev that looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
KeyPress event, serial 30, synthetic NO, window 0x2800001,&lt;br /&gt;
    root 0x6a, subw 0x0, time 2000522842, (138,83), root:(781,500),&lt;br /&gt;
    state 0x0, keycode 239 (keysym 0x0, NoSymbol), same_screen YES,&lt;br /&gt;
    XLookupString gives 0 bytes: &lt;br /&gt;
    XmbLookupString gives 0 bytes: &lt;br /&gt;
    XFilterEvent returns: False&lt;br /&gt;
&lt;br /&gt;
KeyRelease event, serial 30, synthetic NO, window 0x2800001,&lt;br /&gt;
    root 0x6a, subw 0x0, time 2000522842, (138,83), root:(781,500),&lt;br /&gt;
    state 0x0, keycode 239 (keysym 0x0, NoSymbol), same_screen YES,&lt;br /&gt;
    XLookupString gives 0 bytes: &lt;br /&gt;
    XFilterEvent returns: False&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This tells me that the &amp;lt;tt&amp;gt;acpi_fakekey 112&amp;lt;/tt&amp;gt; as executed by hitting the ThinkVantage button generates KeyPress event followed by a KeyRelease event with '''keycode''' 239 and that this keycode has been assigned no corresponding '''keysym'''. Thus, I am free to assign the keycode to any keysym I want. You can find a list of available keysyms in &amp;lt;tt&amp;gt;/usr/share/X11/XKeysymDB&amp;lt;/tt&amp;gt;. Again try and pick one that is not likely to have already been taken by something, such as &amp;lt;tt&amp;gt;XF86LaunchA&amp;lt;/tt&amp;gt;. To assign this keysym to keycode 239, you can either edit ~/.Xmodmap on an individual user basis, or edit the systemwide &amp;lt;tt&amp;gt;/etc/X11/Xmodmap&amp;lt;/tt&amp;gt; file to contain the line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
keycode 239 = XF86LaunchA&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If you choose to go with the former, you may need to run &amp;lt;tt&amp;gt;xmodmap ~/.Xmodmap&amp;lt;/tt&amp;gt; for every login session in order to read in your ~/.Xmodmap file if your window manager does not do it for you. Regardless of which option you choose, you can run &amp;lt;tt&amp;gt;xmodmap &amp;lt;file&amp;gt;&amp;lt;/tt&amp;gt; to read in the updated Xmodmap file without logging out and logging back in.&lt;br /&gt;
&lt;br /&gt;
You should now find that hitting the ThinkVantage button creates the following output from &amp;lt;tt&amp;gt;xev&amp;lt;/tt&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
KeyPress event, serial 55, synthetic NO, window 0x2800001,&lt;br /&gt;
    root 0x6a, subw 0x0, time 2001286078, (0,106), root:(643,523),&lt;br /&gt;
    state 0x0, keycode 239 (keysym 0x1008ff4a, XF86LaunchA), same_screen YES,&lt;br /&gt;
    XLookupString gives 0 bytes: &lt;br /&gt;
    XmbLookupString gives 0 bytes: &lt;br /&gt;
    XFilterEvent returns: False&lt;br /&gt;
&lt;br /&gt;
KeyRelease event, serial 55, synthetic NO, window 0x2800001,&lt;br /&gt;
    root 0x6a, subw 0x0, time 2001286078, (0,106), root:(643,523),&lt;br /&gt;
    state 0x0, keycode 239 (keysym 0x1008ff4a, XF86LaunchA), same_screen YES,&lt;br /&gt;
    XLookupString gives 0 bytes: &lt;br /&gt;
    XFilterEvent returns: False&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note the change of &amp;lt;tt&amp;gt;(keysym 0x0, NoSymbol)&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;(keysym 0x1008ff4a, XF86LaunchA)&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
You're now ready to map &amp;lt;tt&amp;gt;XF86LaunchA&amp;lt;/tt&amp;gt; to executing xmms. This is highly dependent on what keygrabber you decide to use. For openbox, I edit my &amp;lt;tt&amp;gt;~/.config/openbox/rc.xml&amp;lt;/tt&amp;gt; file and add the following entry in the  &amp;lt;keyboard&amp;gt; section:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    &amp;lt;keybind key=&amp;quot;XF86LaunchA&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;action name=&amp;quot;Execute&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;startupnotify&amp;gt;&lt;br /&gt;
          &amp;lt;enabled&amp;gt;true&amp;lt;/enabled&amp;gt;&lt;br /&gt;
        &amp;lt;/startupnotify&amp;gt;&lt;br /&gt;
        &amp;lt;command&amp;gt;&lt;br /&gt;
	  xmms&lt;br /&gt;
	&amp;lt;/command&amp;gt;&lt;br /&gt;
      &amp;lt;/action&amp;gt;&lt;br /&gt;
    &amp;lt;/keybind&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
After, right clicking on the desktop and selecting the &amp;quot;Reconfigure&amp;quot; menu option, you should then have xmms pop up when you hit the ThinkVantage key.&lt;br /&gt;
&lt;br /&gt;
==Example Applications==&lt;br /&gt;
===Web Browsers===&lt;br /&gt;
====Firefox (&amp;lt;3.0)====&lt;br /&gt;
&lt;br /&gt;
There are various ways to assign actions to the browser keys. The easiest way is to install [http://mozilla.dorando.at/keyconfig.xpi keyconfig.xpi] from http://mozilla.dorando.at, which adds a menu entry Tools-&amp;gt;Keyconfig. Then you can assign any action you want to the F19/F20 keys (you still need to create {{path|~/.Xmodmap}} as explained above).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The remaining discussion gives you various more complicated ways to achieve the same thing. &lt;br /&gt;
To have firefox make use of the browser keys you need to modify one of its files{{footnote|4}}.&lt;br /&gt;
To do this you will first need to extract it from the {{path|browser.jar}} archive. Do...&lt;br /&gt;
&lt;br /&gt;
Step 1:  Edit .Xmodmap and add entries for F19 and F20 as explained above.&lt;br /&gt;
&lt;br /&gt;
Step 2:&lt;br /&gt;
&lt;br /&gt;
Note: &amp;lt;firefox-directory&amp;gt; is probably /usr/lib/firefox. Use your version so, if you have 3.0.1 or 3.0.2 use /usr/lib/firefox-3.0.1&lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|cd &amp;lt;firefox-directory&amp;gt;/chrome}}&amp;lt;br /&amp;gt;&lt;br /&gt;
:{{cmdroot|unzip browser.jar}}&lt;br /&gt;
&lt;br /&gt;
The file of interest is {{path|content/browser/browser.xul}}. Edit it {and don't forget to make a backup copy first}...&lt;br /&gt;
:{{cmdroot|vi content/browser/browser.xul}}&lt;br /&gt;
&lt;br /&gt;
Look for the '''&amp;lt;keyset id=&amp;quot;mainKeyset&amp;quot;&amp;gt;''' section and add the following lines within...&lt;br /&gt;
 &amp;lt;key id=&amp;quot;goBackKb&amp;quot; keycode=&amp;quot;VK_F19&amp;quot; command=&amp;quot;Browser:Back&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;key id=&amp;quot;goForwardKb&amp;quot; keycode=&amp;quot;VK_F20&amp;quot; command=&amp;quot;Browser:Forward&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Command you need for Next Tab &lt;br /&gt;
 &amp;lt;key id=&amp;quot;goBackTabKb&amp;quot; keycode=&amp;quot;VK_F19&amp;quot; oncommand=&amp;quot;gBrowser.mTabContainer.advanceSelectedTab(-1)&amp;quot; /&amp;gt;&lt;br /&gt;
For the Previous Tab &lt;br /&gt;
 &amp;lt;key id=&amp;quot;goForwardTabKb&amp;quot; keycode=&amp;quot;VK_F20&amp;quot; oncommand=&amp;quot;gBrowser.mTabContainer.advanceSelectedTab(1)&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now save the file and repackage the {{path|browser.jar}} archive...&lt;br /&gt;
:{{cmdroot|zip -rD0 browser.jar content/browser/}}&lt;br /&gt;
&lt;br /&gt;
That's it.&lt;br /&gt;
&lt;br /&gt;
Step 3:  Restart Firefox.&lt;br /&gt;
&lt;br /&gt;
{{HINT|Outdated: Another interesting Page on Firefox is http://dqd.com/~mayoff/notes/thinkpad/dqdnavkeys/ It uses different key mappings (F19 resp. F20) but a ready [http://dqd.com/~mayoff/notes/thinkpad/dqdnavkeys/dqdnavkeys-1.2.xpi .xpi] is provided which is pretty comfortable. However, this xpi file does not install on Firefox 1.5. or later.}}&lt;br /&gt;
&lt;br /&gt;
{{HINT| You can also use the [http://extensionroom.mozdev.org/more-info/keyconfig keyconfig] extension to configure custom keys.  This extension works with Firefox 1.5 and also with Firefox 2.0. The Command you need for Next Tab is gBrowser.mTabContainer.advanceSelectedTab(1,true); For Previous Tab its gBrowser.mTabContainer.advanceSelectedTab(-1,true); You can alternatively install the [http://www.pqrs.org/~tekezo/firefox/extensions/functions_for_keyconfig/index.html functions for keyconfig] and set the variable f4kc_NextTab to F20 and f4kc_PrevTab to F19.}}.&lt;br /&gt;
&lt;br /&gt;
====Firefox 3.0====&lt;br /&gt;
Thankfully the people at Mozilla decided to include the expected functionality for the XF86Back and XF86Forward keysyms in the new release so all you need to do is&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;code&amp;gt;# printf 'keycode 234 = XF86Back\nkeycode 233 = XF86Forward' &amp;gt;&amp;gt; /etc/X11/Xmodmap&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
And to make this take effect immediately (i.e., without having to log out and log in again), as a regular user run:&lt;br /&gt;
&amp;lt;br&amp;gt;{{cmduser|Xmodmap /etc/X11/Xmodmap}}&lt;br /&gt;
&lt;br /&gt;
For Hardy Heron, the xmodmap command is all lowercase. Also, the /etc/X11/Xmodmap file is not being read on boot. I've added the command to my .bashrc to have it called on startup.&lt;br /&gt;
&lt;br /&gt;
====Konqueror====&lt;br /&gt;
KDE allows you set key mappings for KDE applications (Go to KMenu &amp;gt; System &amp;gt; Control Center &amp;gt; Regional &amp;amp; Accessibility &amp;gt; Keyboard Shortcuts). By default (at least in KDE 3.5), XF86Back and XF86Forward are set as alternatives to Alt-Left and Alt-Right, and are mapped to KDE Back and Forward navigation actions.  &lt;br /&gt;
&lt;br /&gt;
If you use Konqueror as your only browser, you only need to set up {{path|~/.Xmodmap}} as described [[#xmodmap configuration|above]] to assign ThinkPad back/forward keys to the symbols XF86Back/XF86Forward. This also make these keys work for other KDE applications such as Quanta Plus, KPackage and so on (not all KDE applications honor this setting, e.g. KDE help system doesn't).&lt;br /&gt;
&lt;br /&gt;
If you want to use Firefox, however, the above settings do not work. You will have to map ThinkPad back/forward keys to F19/F20 as described [[#Firefox|above]], and change KDE navigation key settings to use F19/F20 instead of the default.&lt;br /&gt;
&lt;br /&gt;
====Opera====&lt;br /&gt;
However this isn't a simple configration file, you can set your browser manually.&amp;lt;br /&amp;gt;&lt;br /&gt;
Go to &amp;lt;i&amp;gt;Tool &amp;gt; Settings &amp;gt; Mouse and keyboard &amp;gt; Keyboard settings &amp;gt; Edit &amp;gt; Browser Window&amp;lt;/i&amp;gt;. There add F19 - Back and F20 - Forward. Now you can surf using your TP keys ;-)&lt;br /&gt;
&lt;br /&gt;
====Epiphany====&lt;br /&gt;
By default, the back/forward keys, when bound to XF86Back/XF86Forward, successfully navigate through the history.&lt;br /&gt;
&lt;br /&gt;
To get them switch through your tabs, you could use the extension from [http://crashman.homelinux.org/~andre/public/epiphany%20extensions/thinkpad%20browserkeys/ here]&lt;br /&gt;
You just need to edit your Xmodmap like described for Firefox &amp;lt; 3.0 (bind the keys on F19 and F20)&lt;br /&gt;
&lt;br /&gt;
====W3M (under Emacs)====&lt;br /&gt;
I'm not sure that I want to use the back and forward keys all the time in Emacs, but while browsing the web it is useful to have them.&lt;br /&gt;
&lt;br /&gt;
On my X61s running Fedora 13, I've found that by adding the following lines to my .emacs, I'm able to do just that:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;(eval-after-load &amp;quot;w3m&amp;quot;&amp;lt;br&amp;gt;'(progn&amp;lt;br&amp;gt;(define-key w3m-mode-map [XF86Back] 'w3m-view-previous-page)&amp;lt;br&amp;gt;  (define-key w3m-mode-map [XF86Forward] 'w3m-view-next-page)))&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Open an application===&lt;br /&gt;
&lt;br /&gt;
To configure the ThinkVantage button to open a terminal window in Gnome:&lt;br /&gt;
&lt;br /&gt;
Step 1:&lt;br /&gt;
Use xev to find the keycode generated by the button on your machine.  In my case is is 159.&lt;br /&gt;
&lt;br /&gt;
Step 2:&lt;br /&gt;
Create an entry in .Xmodmap like so&lt;br /&gt;
&lt;br /&gt;
keycode 159 = XF86LaunchA&lt;br /&gt;
&lt;br /&gt;
replacing 159 by the keycode found in step 1.  Load the map using&lt;br /&gt;
&lt;br /&gt;
:{{cmd|xmodmap ~/.Xmodmap}}&lt;br /&gt;
&lt;br /&gt;
Step 3:&lt;br /&gt;
Configure the required function (e.g. open terminal window) in System-&amp;gt;Preferences-&amp;gt;Keyboard shortcuts&lt;br /&gt;
&lt;br /&gt;
===Window Managers===&lt;br /&gt;
====fvwm====&lt;br /&gt;
To get the {{ibmkey|Forward|#494949}} and {{ibmkey|Backward|#494949}} keys to cycle through pages in the virtual desktop, add this to your {{path|~/.fvwmrc}}:&lt;br /&gt;
 Key    XF86Back     A      A   Scroll     -100000   0&lt;br /&gt;
 Key    XF86Forward  A      A   Scroll     +100000   0&lt;br /&gt;
If you use multiple virtual desktops, you could instead use the keys to flip between them by using GotoDesk.&lt;br /&gt;
&lt;br /&gt;
====fluxbox====&lt;br /&gt;
To get the keys to cycle through pages in the virtual desktop, add this to your {{path|~/.fluxbox/keys}}:&lt;br /&gt;
 None F19 :PrevWorkspace&lt;br /&gt;
 None F20 :NextWorkspace&lt;br /&gt;
&lt;br /&gt;
====pekwm configuration====&lt;br /&gt;
You can make the two browser keys switch workspaces in pekwm, by adding the following two lines to the {{path|~/.pekwm/keys}} file:&lt;br /&gt;
 KeyPress = &amp;quot;Mod1 XF86Back&amp;quot; { Actions = &amp;quot;GoToWorkspace prev&amp;quot; }&lt;br /&gt;
 KeyPress = &amp;quot;Mod1 XF86Forward&amp;quot; { Actions = &amp;quot;GoToWorkspace next&amp;quot; }&lt;br /&gt;
&lt;br /&gt;
====pwm====&lt;br /&gt;
Another example how to use these two keys to switch between pwm tabs. These two lines should be added to {{path|~/.pwm/keys-default.conf}} or {{path|/etc/pwm/keys-default.conf}}:&lt;br /&gt;
 kbind &amp;quot;Back&amp;quot;, &amp;quot;switch_rot&amp;quot;, -1&lt;br /&gt;
 kbind &amp;quot;Forward&amp;quot;, &amp;quot;switch_rot&amp;quot;, 1&lt;br /&gt;
&lt;br /&gt;
====IceWM====&lt;br /&gt;
To make IceWM cycle workspaces using the {{ibmkey|Forward|#494949}} and {{ibmkey|Backward|#494949}} keys, change these two options in {{path|~/.icewm/preferences}} (Provided you assigned keysyms F19 and F20 with xmodmap):&lt;br /&gt;
 # &amp;quot;Previous workspace&amp;quot; shortcut&lt;br /&gt;
 KeySysWorkspacePrev=&amp;quot;F19&amp;quot;&lt;br /&gt;
 # &amp;quot;Next workspace&amp;quot; shortcut&lt;br /&gt;
 KeySysWorkspaceNext=&amp;quot;F20&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Gnome/metacity ====&lt;br /&gt;
&lt;br /&gt;
On {{Debian}} Lenny, using Gnome 2.22.2, once the acpid and acpi-support packages are installed, most Fn keys do the right thing out of the box.&lt;br /&gt;
&lt;br /&gt;
For more advanced configuration, follow the [https://wiki.ubuntu.com/Keybindings Ubuntu guide].&lt;br /&gt;
&lt;br /&gt;
===Other Uses===&lt;br /&gt;
====Console tools configuraton====&lt;br /&gt;
To make the {{ibmkey|Forward|#494949}} and {{ibmkey|Backward|#494949}} keys useful in console, add this to your keymap ({{path|/etc/console/boottime.kmap.gz}} in {{Debian}}):&lt;br /&gt;
 keycode 158 = Decr_Console&lt;br /&gt;
 keycode 159 = Incr_Console&lt;br /&gt;
&lt;br /&gt;
Alternatively you can load this script (perhaps on system startup) to enable Backward/Forward button console (VT) switch:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 echo keycode 158 = Decr_Console | loadkeys&lt;br /&gt;
 echo keycode 159 = Incr_Console | loadkeys&lt;br /&gt;
&lt;br /&gt;
It should work with any distro.&lt;br /&gt;
&lt;br /&gt;
====Cycling through tabs====&lt;br /&gt;
In Gnome and Xfce4, Ctrl-PageUp/Ctrl-PageDown move to the previous/following open tab in all applications that have tabbed user interfaces (terminal emulator, web browser, ...). To make use of the {{ibmkey|Forward|#494949}} and {{ibmkey|Backward|#494949}} keys for this task, there're two possibilities.&lt;br /&gt;
&lt;br /&gt;
For both ways, you should map the keycodes 233 and 234 to XF86Back and XF86Forward as described in [[#xmodmap_configuration|xmodmap configuration]].&lt;br /&gt;
&lt;br /&gt;
=====Using xautomation=====&lt;br /&gt;
xautomation can be found [http://hoopajoo.net/projects/xautomation.html here].&lt;br /&gt;
&lt;br /&gt;
Create two files with permissions 755:&lt;br /&gt;
&lt;br /&gt;
{{path|/usr/local/bin/tp_back}}:&lt;br /&gt;
&amp;lt;bash&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
/usr/bin/xte 'keydown Control_L' 'keydown Page_Up' 'keyup Page_Up' 'keyup Control_L'&lt;br /&gt;
&amp;lt;/bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{path|/usr/local/bin/tp_forward}}:&lt;br /&gt;
&amp;lt;bash&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
/usr/bin/xte 'keydown Control_L' 'keydown Page_Down' 'keyup Page_Down' 'keyup Control_L'&lt;br /&gt;
&amp;lt;/bash&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use your desktop's keyboard shortcut editor to assign XF86Back as a shortcut for tp_back and XF86Forward as a shortcut for tp_forward.&lt;br /&gt;
&lt;br /&gt;
This should work in all distros and with all window managers (you might have to use other key combinations than Ctrl-PageUp and Ctrl-PageDown).&lt;br /&gt;
&lt;br /&gt;
=====Redirecting XF86Back/XF86Forward=====&lt;br /&gt;
Create {{path|/etc/X11/xkb/compat/thinkpad}}:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// $XFree86$&lt;br /&gt;
//  XFree86 special keysyms&lt;br /&gt;
default partial xkb_compatibility &amp;quot;basic&amp;quot;  {&lt;br /&gt;
    interpret.repeat= True;&lt;br /&gt;
&lt;br /&gt;
    interpret  XF86Back {&lt;br /&gt;
        action = Redirect(Key=&amp;lt;PGUP&amp;gt;, modifiers=Control);&lt;br /&gt;
    };&lt;br /&gt;
    interpret  XF86Forward {&lt;br /&gt;
        action = Redirect(Key=&amp;lt;PGDN&amp;gt;, modifiers=Control);&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit {{path|/etc/X11/xkb/compat/complete}} and add &amp;lt;tt&amp;gt;'''augment &amp;quot;thinkpad&amp;quot;'''&amp;lt;/tt&amp;gt; so that it looks similar to the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// $XKeyboardConfig: xkbdesc/compat/complete,v 1.3 2005/10/17 00:42:11 svu Exp $&lt;br /&gt;
// $Xorg: complete,v 1.3 2000/08/17 19:54:34 cpqbld Exp $&lt;br /&gt;
default xkb_compatibility &amp;quot;complete&amp;quot;  {&lt;br /&gt;
    include &amp;quot;basic&amp;quot;&lt;br /&gt;
    augment &amp;quot;iso9995&amp;quot;&lt;br /&gt;
    augment &amp;quot;mousekeys&amp;quot;&lt;br /&gt;
    augment &amp;quot;accessx(full)&amp;quot;&lt;br /&gt;
    augment &amp;quot;misc&amp;quot;&lt;br /&gt;
    augment &amp;quot;xfree86&amp;quot;&lt;br /&gt;
    augment &amp;quot;level5&amp;quot;&lt;br /&gt;
    augment &amp;quot;thinkpad&amp;quot;&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==External Sources==&lt;br /&gt;
*[http://www-307.ibm.com/pc/support/site.wss/document.do?lndocid=MIGR-51537 IBMs page on configuring the ThinkPad buttons (ThinkPad, Access IBM, Mail, Search, and Home buttons) under Linux]&lt;br /&gt;
*[http://dqd.com/~mayoff/notes/thinkpad/dqdnavkeys/ Rob Mayoffs page on using IBM Keyboard Navigation Keys in Linux Mozilla and Firefox]&lt;br /&gt;
*[http://snarfed.org/space/thinkpad+keys+in+firefox Ryan Barretts blog article about using the browser keys in Firefox]&lt;br /&gt;
*[http://chaotika.org/~bluesceada/?page=soft&amp;amp;sub=thinkpad#acpibutn DennisG's help to get the ibm-acpi buttons do useful things] on a {{Z61e}} and possibly {{Z61m}}, {{Z61t}} and {{Z61p}}&lt;br /&gt;
*[https://help.ubuntu.com/community/KeyboardShortcuts/#Replacing%20keys%20with%20other%20keys using xbindkeys and xmacro to override key bindings]&lt;br /&gt;
{{footnotes|&lt;br /&gt;
#Note that the associated functionality for Fn-F* key combinations is not consistent amongst all ThinkPads. We are maintaining [[Default meanings of special keys|a table of associated meanings]].&lt;br /&gt;
#if there are more than one tool listed, one is sufficient&lt;br /&gt;
#'full' means you can completely reassign any action to be triggered by the key, 'additional actions' means you can trigger actions in addition to the standard function of the key, which can not be changed.&lt;br /&gt;
#Thanks go to Ryan Barrett for writing the [http://snarfed.org/space/thinkpad+keys+in+firefox little howto] on [http://snarfed.org/space/start his blog].&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* http://www.freedesktop.org/wiki/Software/XKeyboardConfig&lt;br /&gt;
&lt;br /&gt;
[[Category:HOWTOs]]&lt;/div&gt;</summary>
		<author><name>Dskrvk</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Example_of_an_update_on_a_drive_with_unsupported_firmware&amp;diff=56697</id>
		<title>Example of an update on a drive with unsupported firmware</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Example_of_an_update_on_a_drive_with_unsupported_firmware&amp;diff=56697"/>
		<updated>2016-01-09T23:58:39Z</updated>

		<summary type="html">&lt;p&gt;Dskrvk: /* Helpful Links (source of the information) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Download the files ==&lt;br /&gt;
To be able to flash with the new firmware, you need to download the [http://www-307.ibm.com/pc/support/site.wss/document.do?lndocid=MIGR-62282 iso from IBM]. You will also need the appropriate [http://www-307.ibm.com/pc/support/site.wss/document.do?lndocid=MIGR-41008 floppy disk file]. Yes, this is done using a floppy disk!&lt;br /&gt;
&lt;br /&gt;
I had a 60GB Hitatchi TravelStar HTS548060M9AT00, which is listed as HTS5480xxM9AT00 on the IBM pages, so I downloaded the Floppy disk FWHD3413.exe. Then I burned the iso and I executed FWHD3413.exe to get a bootable floppy disk. Upon booting from the CD, it showed me that I had Firmware revision MGBOA53A and that there was no new firmware.&lt;br /&gt;
&lt;br /&gt;
== Prepare the files ==&lt;br /&gt;
&lt;br /&gt;
Next, I took the floppy with the idea I could update the files on it to get the newest firmware, so I copied over FW.exe and FW.PRO from the CD. &lt;br /&gt;
&lt;br /&gt;
=== FW.PRO ===&lt;br /&gt;
&lt;br /&gt;
Now I only needed my firmware update tool and the according Firmware. So I opened FW.PRO and I searched for the according section which looked like this:&lt;br /&gt;
&lt;br /&gt;
 ;   HGST :  HTS5480**M9AT00&lt;br /&gt;
 ;&lt;br /&gt;
 ; HTS548040M9AT00 40.0GB&lt;br /&gt;
 &amp;quot;HTS548040M9AT00&amp;quot;,&amp;quot;MG2OA50A&amp;quot;,&amp;quot;MG2OA5PA&amp;quot;,&amp;quot;MG2IA5PA.bin&amp;quot;,&amp;quot;hfui12L.exe&amp;quot;,&amp;quot;IA5PA&amp;quot;,&amp;quot;/u MRLA5PA.tbl&amp;quot;&lt;br /&gt;
 &amp;quot;HTS548040M9AT00&amp;quot;,&amp;quot;MG2OA55A&amp;quot;,&amp;quot;MG2OA5PA&amp;quot;,&amp;quot;MG2IA5PA.bin&amp;quot;,&amp;quot;hfui12L.exe&amp;quot;,&amp;quot;IA5PA&amp;quot;,&amp;quot;/u MRLA5PA.tbl&amp;quot;&lt;br /&gt;
 &amp;quot;HTS548040M9AT00&amp;quot;,&amp;quot;MG2OA5BA&amp;quot;,&amp;quot;MG2OA5PA&amp;quot;,&amp;quot;MG2IA5PA.bin&amp;quot;,&amp;quot;hfui12L.exe&amp;quot;,&amp;quot;IA5PA&amp;quot;,&amp;quot;/u MRLA5PA.tbl&amp;quot;&lt;br /&gt;
 &amp;quot;HTS548040M9AT00&amp;quot;,&amp;quot;MG2OA5DA&amp;quot;,&amp;quot;MG2OA5PA&amp;quot;,&amp;quot;MG2IA5PA.bin&amp;quot;,&amp;quot;hfui12L.exe&amp;quot;,&amp;quot;IA5PA&amp;quot;,&amp;quot;/u MRLA5PA.tbl&amp;quot;&lt;br /&gt;
 &amp;quot;HTS548040M9AT00&amp;quot;,&amp;quot;MG2OA5HA&amp;quot;,&amp;quot;MG2OA5PA&amp;quot;,&amp;quot;MG2IA5PA.bin&amp;quot;,&amp;quot;hfui12L.exe&amp;quot;,&amp;quot;IA5PA&amp;quot;,&amp;quot;/u MRLA5PA.tbl&amp;quot;&lt;br /&gt;
 ;&lt;br /&gt;
 ; HTS548060M9AT00 60.0GB&lt;br /&gt;
 &amp;quot;HTS548060M9AT00&amp;quot;,&amp;quot;MGBOA50A&amp;quot;,&amp;quot;MGBOA5PA&amp;quot;,&amp;quot;MGBIA5PA.bin&amp;quot;,&amp;quot;hfui12L.exe&amp;quot;,&amp;quot;IA5PA&amp;quot;,&amp;quot;/u MRLA5PA.tbl&amp;quot;&lt;br /&gt;
 &amp;quot;HTS548060M9AT00&amp;quot;,&amp;quot;MGBOA55A&amp;quot;,&amp;quot;MGBOA5PA&amp;quot;,&amp;quot;MGBIA5PA.bin&amp;quot;,&amp;quot;hfui12L.exe&amp;quot;,&amp;quot;IA5PA&amp;quot;,&amp;quot;/u MRLA5PA.tbl&amp;quot;&lt;br /&gt;
 &amp;quot;HTS548060M9AT00&amp;quot;,&amp;quot;MGBOA5BA&amp;quot;,&amp;quot;MGBOA5PA&amp;quot;,&amp;quot;MGBIA5PA.bin&amp;quot;,&amp;quot;hfui12L.exe&amp;quot;,&amp;quot;IA5PA&amp;quot;,&amp;quot;/u MRLA5PA.tbl&amp;quot;&lt;br /&gt;
 &amp;quot;HTS548060M9AT00&amp;quot;,&amp;quot;MGBOA5DA&amp;quot;,&amp;quot;MGBOA5PA&amp;quot;,&amp;quot;MGBIA5PA.bin&amp;quot;,&amp;quot;hfui12L.exe&amp;quot;,&amp;quot;IA5PA&amp;quot;,&amp;quot;/u MRLA5PA.tbl&amp;quot;&lt;br /&gt;
 &amp;quot;HTS548060M9AT00&amp;quot;,&amp;quot;MGBOA5HA&amp;quot;,&amp;quot;MGBOA5PA&amp;quot;,&amp;quot;MGBIA5PA.bin&amp;quot;,&amp;quot;hfui12L.exe&amp;quot;,&amp;quot;IA5PA&amp;quot;,&amp;quot;/u MRLA5PA.tbl&amp;quot;&lt;br /&gt;
 ;&lt;br /&gt;
&lt;br /&gt;
There wasn't any section for my MGBOA53A firmware, so I created it. I just copied the line above it and changed it a little bit. I changed the firmware revision to my revision and /u to /f to force the update:&lt;br /&gt;
&lt;br /&gt;
 &amp;quot;HTS548060M9AT00&amp;quot;,&amp;quot;MGBOA53A&amp;quot;,&amp;quot;MGBOA5PA&amp;quot;,&amp;quot;MGBIA5PA.bin&amp;quot;,&amp;quot;hfui12L.exe&amp;quot;,&amp;quot;OA5PA&amp;quot;,&amp;quot;/f MRLA5PA.tbl&amp;quot;&lt;br /&gt;
&lt;br /&gt;
After having done this, I saved the file and I copied all mentioned files in the above section from the CD to the floppy. These were MGBIA5PA.bin, hfui12L.exe and MRLA5PA.tbl&lt;br /&gt;
&lt;br /&gt;
=== SOMETHING.tbl ===&lt;br /&gt;
&lt;br /&gt;
Next, I had to change MRLA5PA.tbl because the firmware update exe look for the correct information inside of it. My firmware revision was missing too and I needed a correct checksum so that hfui12L.exe would update my drive's firmware. This is the original file: &lt;br /&gt;
&lt;br /&gt;
 ;*****************************************************************************&lt;br /&gt;
 ;  Revup parameter table for Moraga-LP Family&lt;br /&gt;
 ;                                                                   2008/03/14&lt;br /&gt;
 ;                                                               Rev A5?A-&amp;gt;A5PA&lt;br /&gt;
 ;*****************************************************************************&lt;br /&gt;
 ;&lt;br /&gt;
 #Parameter Table&lt;br /&gt;
 ;(Format: Table name, Offset[hex], Length[dec])&lt;br /&gt;
 A50A -&amp;gt; A5PA RAM&lt;br /&gt;
 ZONE  Offset   0  Length  912&lt;br /&gt;
 SRVM  Offset   0  Length 1536&lt;br /&gt;
 CHNL  Offset   0  Length  200&lt;br /&gt;
 CHNL  Offset  C9  Length 3895&lt;br /&gt;
 ;&lt;br /&gt;
 A55A -&amp;gt; A5PA RAM&lt;br /&gt;
 ZONE  Offset   0  Length  912&lt;br /&gt;
 SRVM  Offset   0  Length 1536&lt;br /&gt;
 CHNL  Offset   0  Length 4096&lt;br /&gt;
 ;&lt;br /&gt;
 A5BA -&amp;gt; A5PA RAM&lt;br /&gt;
 ZONE  Offset   0  Length  912&lt;br /&gt;
 SRVM  Offset   0  Length 1536&lt;br /&gt;
 CHNL  Offset   0  Length 4096&lt;br /&gt;
 ;&lt;br /&gt;
 A5DA -&amp;gt; A5PA RAM&lt;br /&gt;
 ZONE  Offset   0  Length  912&lt;br /&gt;
 SRVM  Offset   0  Length 1536&lt;br /&gt;
 CHNL  Offset   0  Length 4096&lt;br /&gt;
 ;&lt;br /&gt;
 A5HA -&amp;gt; A5PA RAM&lt;br /&gt;
 ZONE  Offset   0  Length  912&lt;br /&gt;
 SRVM  Offset   0  Length 1536&lt;br /&gt;
 CHNL  Offset   0  Length 4096&lt;br /&gt;
 ;&lt;br /&gt;
 #Checksum Table&lt;br /&gt;
 ; BIN checksum&lt;br /&gt;
 ;moB?axxx.br&lt;br /&gt;
 ;moA?axxx.br&lt;br /&gt;
 ;mo4?axxx.br&lt;br /&gt;
 ;mo3?axxx.br&lt;br /&gt;
 ;mo2?axxx.br&lt;br /&gt;
 ;mo1?axxx.br&lt;br /&gt;
 ;-----------------------------------------------------------------------------&lt;br /&gt;
 ; Apple model&lt;br /&gt;
 ;-----------------------------------------------------------------------------&lt;br /&gt;
 ; BIN checksum&lt;br /&gt;
 00000000&lt;br /&gt;
 00000000&lt;br /&gt;
 00000000&lt;br /&gt;
 00000000&lt;br /&gt;
 00000000&lt;br /&gt;
 00000000&lt;br /&gt;
 ;-----------------------------------------------------------------------------&lt;br /&gt;
 ; IBM model&lt;br /&gt;
 ;-----------------------------------------------------------------------------&lt;br /&gt;
 ; BIN checksum&lt;br /&gt;
 FA29DE0D&lt;br /&gt;
 F76F94DE&lt;br /&gt;
 7DF5F7B7&lt;br /&gt;
 FD2BFC0E&lt;br /&gt;
 E26DB1B2&lt;br /&gt;
 0C33B80A&lt;br /&gt;
 ;-----------------------------------------------------------------------------&lt;br /&gt;
 ; OEM generic model&lt;br /&gt;
 ;-----------------------------------------------------------------------------&lt;br /&gt;
 ; BIN checksum&lt;br /&gt;
 00000000&lt;br /&gt;
 00000000&lt;br /&gt;
 00000000&lt;br /&gt;
 00000000&lt;br /&gt;
 00000000&lt;br /&gt;
 00000000&lt;br /&gt;
&lt;br /&gt;
Again, I had to add a section for my firmware revision. Because it was exactly the same for all revisions except for one I took one of those and put it between A50A and A55A. This is a copy of A55A with only the revision number changed:&lt;br /&gt;
&lt;br /&gt;
 A53A -&amp;gt; A5PA RAM&lt;br /&gt;
 ZONE  Offset   0  Length  912&lt;br /&gt;
 SRVM  Offset   0  Length 1536&lt;br /&gt;
 CHNL  Offset   0  Length 4096&lt;br /&gt;
 ;&lt;br /&gt;
&lt;br /&gt;
Then, hfui12L.exe checks the checksum and the firmware we want to upload doesn't match the OEM checksum, right? So I copied the checksum from the IBM to the OEM section: &lt;br /&gt;
&lt;br /&gt;
 ;-----------------------------------------------------------------------------&lt;br /&gt;
 ; IBM model&lt;br /&gt;
 ;-----------------------------------------------------------------------------&lt;br /&gt;
 ; BIN checksum&lt;br /&gt;
 FA29DE0D&lt;br /&gt;
 F76F94DE&lt;br /&gt;
 7DF5F7B7&lt;br /&gt;
 FD2BFC0E&lt;br /&gt;
 E26DB1B2&lt;br /&gt;
 0C33B80A&lt;br /&gt;
 ;-----------------------------------------------------------------------------&lt;br /&gt;
 ; OEM generic model&lt;br /&gt;
 ;-----------------------------------------------------------------------------&lt;br /&gt;
 ; BIN checksum&lt;br /&gt;
 FA29DE0D&lt;br /&gt;
 F76F94DE&lt;br /&gt;
 7DF5F7B7&lt;br /&gt;
 FD2BFC0E&lt;br /&gt;
 E26DB1B2&lt;br /&gt;
 0C33B80A&lt;br /&gt;
&lt;br /&gt;
== Update the firmware ==&lt;br /&gt;
&lt;br /&gt;
After all this I booted from the floppy and I updated the firmware. I got some error code and this:&lt;br /&gt;
&lt;br /&gt;
 Updating Drive 0&lt;br /&gt;
 ...reading microcode&lt;br /&gt;
 ...downloading microcode&lt;br /&gt;
 !!!!! FAIL !!!!!&lt;br /&gt;
&lt;br /&gt;
So I thought it had failed, I rebooted and the 2010 Error was gone. Everything works perfectly!&lt;br /&gt;
&lt;br /&gt;
== Helpful Links (source of the information) ==&lt;br /&gt;
&lt;br /&gt;
[http://hdsurvivor.blogspot.com/2007/08/lenovo-hard-drive-upgrade-and-error.html This guy] did it a little bit differently, he didn't have to change all the firmware codes to get it working.&lt;br /&gt;
&lt;br /&gt;
I found another part of the answer in the [http://forum.thinkpads.com/viewtopic.php?p=83225#p83225 forum.thinkpads.com] and a link to another successful flash on [http://www.notebookforums.com/post753388.html#post753388 notebookforums.com].&lt;br /&gt;
&lt;br /&gt;
I hope this helps you.&lt;br /&gt;
&lt;br /&gt;
[[Category:HOWTOs]]&lt;/div&gt;</summary>
		<author><name>Dskrvk</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=How_to_enable_the_integrated_fingerprint_reader&amp;diff=56671</id>
		<title>How to enable the integrated fingerprint reader</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=How_to_enable_the_integrated_fingerprint_reader&amp;diff=56671"/>
		<updated>2015-12-02T14:10:16Z</updated>

		<summary type="html">&lt;p&gt;Dskrvk: fix ThinkFinger link&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sub-howtos for enabling the [[integrated fingerprint reader]] on ThinkPads:&lt;br /&gt;
&lt;br /&gt;
* [[How to enable integrated fingerprint reader with fprint]] &amp;lt;- Try this first&lt;br /&gt;
* [[How to enable the integrated fingerprint reader with ThinkFinger]]&lt;br /&gt;
* [[How to enable integrated fingerprint reader with BioAPI]]&lt;br /&gt;
&lt;br /&gt;
==Free software==&lt;br /&gt;
&lt;br /&gt;
===fprint===&lt;br /&gt;
The most current effort to support fingerprint readers is the [http://reactivated.net/fprint/wiki/Main_Page fprint project].  The fprint software comprises the libraries &amp;lt;tt&amp;gt;libfprint&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;libpam-fprint&amp;lt;/tt&amp;gt; (which provides authentication via PAM) and the daemon &amp;lt;tt&amp;gt;fprintd&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
It seems that lately this project has stalled; no support for newer chips has emerged for some time.&lt;br /&gt;
&lt;br /&gt;
====Fingerprint GUI====&lt;br /&gt;
Makes use of libfprint.&lt;br /&gt;
&lt;br /&gt;
Feb 2011: The following works as smoothly on Ubuntu and T410s: https://launchpad.net/~fingerprint/+archive/fingerprint-gui&lt;br /&gt;
&lt;br /&gt;
Be aware the above packages (and the Fingerprint GUI project) include non-free drivers as indicated on [http://www.n-view.net/Appliance/fingerprint/about.php the project About page].&lt;br /&gt;
&lt;br /&gt;
===ThinkFinger===&lt;br /&gt;
An earlier effort was the [http://thinkfinger.sourceforge.net ThinkFinger project]. It only supports the first-generation reader and has not been updated since 2007. See the [[How to enable the integrated fingerprint reader with ThinkFinger]] for detailed instructions. It was included in Debian Lenny but has since been removed from Debian.&lt;br /&gt;
&lt;br /&gt;
== Non-free software ==&lt;br /&gt;
A closed source driver for the UPEK device is available.  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/downloads/linux/ http://www.upek.com/support/downloads/linux/]. It however tends to be less stable than the above open-source drivers.&lt;br /&gt;
&lt;br /&gt;
==Links==&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://www.qrivy.net/~michael/blua/ A branch of the BioAPI reference implementation]&lt;br /&gt;
* [http://www.pdfserver.net/fingerprint A GUI using the BioAPI driver on thinkpads. Windows-like GDM login]&lt;br /&gt;
* [http://www.n-view.net/Appliance/fingerprint/ Fingerprint GUI Project. Allows to use the fingerprint scanner for Login (GDM) and authentication in (sudo, su). Seems to work with T410 and Ubuntu 10.04]&lt;br /&gt;
&lt;br /&gt;
[[Category:HOWTOs]]&lt;/div&gt;</summary>
		<author><name>Dskrvk</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=How_to_enable_the_integrated_fingerprint_reader_with_ThinkFinger&amp;diff=56670</id>
		<title>How to enable the integrated fingerprint reader with ThinkFinger</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=How_to_enable_the_integrated_fingerprint_reader_with_ThinkFinger&amp;diff=56670"/>
		<updated>2015-12-02T14:08:34Z</updated>

		<summary type="html">&lt;p&gt;Dskrvk: /* Using init scripts */ add category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''NB:''' ThinkFinger has been inactive for two years. It was [http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=546005 removed from Debian] because of this.&lt;br /&gt;
&lt;br /&gt;
See [[How to enable the integrated fingerprint reader]] for up-to-date instructions on using the fingerprint reader on ThinkPads.&lt;br /&gt;
&lt;br /&gt;
This page deals with an (apparently dead) project called [http://thinkfinger.sourceforge.net ThinkFinger] which had similar goals to [[fprint]] and [[BioAPI]].&lt;br /&gt;
&lt;br /&gt;
N.B.: The fingerprint reader is not a very secure device and may give a false sense of security. There has been quite a bit of research by a hacker named Starbug, a member of the Chaos Computer Club, Berlin, Germany. He outlined in two very good talks how to forge each and every available fingerprint sensor available at the cost of a few euros, using materials from your local hardware store, a digicam and a laser printer! Here are some links:&lt;br /&gt;
* [http://www.ccc.de/updates/2007/umsonst-im-supermarkt?language=en  Fingerprint recognition in supermarkets]&lt;br /&gt;
* [ftp://ftp.ccc.de/pub/documentation/Fingerabdruck_Hack/fingerabdruck.mpg Video tutorial for forging fingerprints]&lt;br /&gt;
&lt;br /&gt;
== Installing ThinkFinger ==&lt;br /&gt;
&lt;br /&gt;
=== From source ===&lt;br /&gt;
Download &amp;lt;tt&amp;gt;thinkfinger-0.3.tar.gz&amp;lt;/tt&amp;gt; from the [http://thinkfinger.sourceforge.net/ homepage] and unpack it somewhere, make sure you have the gcc compiler, libtool, pkg-config, libusb-dev and libpam0g-dev installed, then:&lt;br /&gt;
&lt;br /&gt;
{{cmduser|cd thinkfinger-0.3}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code style=&amp;quot;white-space:nowrap;color:#495988;background-color:white;&amp;quot;&amp;gt;&amp;lt;nowiki&amp;gt;$&amp;lt;/nowiki&amp;gt; ./configure --prefix=/usr --sysconfdir=/etc --with-securedir=/lib/security --with-birdir=/etc/pam_thinkfinger&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{cmduser|make}}&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|make install}}&lt;br /&gt;
&lt;br /&gt;
{{NOTE|/lib/security is the directory, where PAM assumes its modules on Debian and openSUSE, it may vary for your distro!}}&lt;br /&gt;
&lt;br /&gt;
&amp;quot;make install&amp;quot; doesn't create the birdir we specified (where ThinkFinger will store users' biometric info), so create it:&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|mkdir /etc/pam_thinkfinger}}&lt;br /&gt;
&lt;br /&gt;
If everything went OK assert that you find pam_thinkfinger.so in /lib/security typing:&lt;br /&gt;
&lt;br /&gt;
{{cmduser|ls /lib/security}}&lt;br /&gt;
&lt;br /&gt;
=== From package ===&lt;br /&gt;
&lt;br /&gt;
==== Debian ====&lt;br /&gt;
[http://packages.debian.org/source/experimental/thinkfinger Packages] arrived in Debian experimental on Aug 2nd, 2007 (cf. [http://bugs.debian.org/409563 bug #409563]). To access the experimental packages via apt, add the following lines to your sources.list:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# experimental&lt;br /&gt;
deb ftp://mirrors.kernel.org/debian/ experimental main contrib non-free&lt;br /&gt;
deb-src ftp://mirrors.kernel.org/debian/ experimental main contrib non-free&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where of course you may replace mirrors.kernel.org with your mirror of choice. Just make sure that it hosts the experimental repositories.&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|aptitude update}}&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|aptitude install libthinkfinger0 libpam-thinkfinger thinkfinger-tools}}&lt;br /&gt;
&lt;br /&gt;
should then get you up and running.&lt;br /&gt;
&lt;br /&gt;
To make everything work you'll have to have permission to work the device ({{cmduser|sudo adduser myself plugdev}} worked for me), and you'll also have to follow instructions below about adding the device to your PAM methods.&lt;br /&gt;
&lt;br /&gt;
==== Ubuntu ====&lt;br /&gt;
&lt;br /&gt;
===== Gutsy =====&lt;br /&gt;
&lt;br /&gt;
From https://wiki.ubuntu.com/ThinkFinger&lt;br /&gt;
&lt;br /&gt;
Add PPA repositories to your sources.list:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
deb     http://ppa.launchpad.net/jldugger/ubuntu gutsy main restricted universe multiverse&lt;br /&gt;
deb-src http://ppa.launchpad.net/jldugger/ubuntu gutsy main restricted universe multiverse&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Install necessary packages:&lt;br /&gt;
&lt;br /&gt;
{{cmduser|sudo apt-get install thinkfinger-tools  libpam-thinkfinger}}&lt;br /&gt;
&lt;br /&gt;
===== Hardy =====&lt;br /&gt;
&lt;br /&gt;
Hardy includes the latest thinkfinger and it is up to date with subversion.  Install packages:&lt;br /&gt;
&lt;br /&gt;
{{cmduser|sudo apt-get install thinkfinger-tools libpam-thinkfinger}}&lt;br /&gt;
&lt;br /&gt;
Update the pam configuration files:&lt;br /&gt;
&lt;br /&gt;
{{cmduser|sudo /usr/lib/pam-thinkfinger/pam-thinkfinger-enable}}&lt;br /&gt;
&lt;br /&gt;
Enroll your fingerprint (creates $HOME/.thinkfinger.bir).  If this gives an error about claiming the USB device then a reboot was claimed to work, but in fact it may just be a permissions problem.  {{NOTE|Do not try to enroll using 'sudo' - it will cause hidden permission problems}}&lt;br /&gt;
&lt;br /&gt;
{{cmduser|tf-tool --acquire}}&lt;br /&gt;
&lt;br /&gt;
Check fingerprint enrollment&lt;br /&gt;
&lt;br /&gt;
{{cmduser|tf-tool --verify}}&lt;br /&gt;
&lt;br /&gt;
You can expect everything to work correctly.  Note that you still have to enter your username if prompted but will be able&lt;br /&gt;
to swipe your finger instead of the password.  The prompt will usually be &amp;quot;Password or swipe finger&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Graphical login&lt;br /&gt;
* Text console login&lt;br /&gt;
* sudo&lt;br /&gt;
* screen lock/screen saver&lt;br /&gt;
* Administrative password prompt (eg for update or package managers).  (Note no &amp;quot;or swipe finger&amp;quot; in prompt).&lt;br /&gt;
&lt;br /&gt;
===== Intrepid =====&lt;br /&gt;
After installing from the normal repositories coming with Ubuntu 8.10, you would have to press enter after sweeping finger. (This bug: [https://bugs.launchpad.net/ubuntu/+source/thinkfinger/+bug/256429 https://bugs.launchpad.net/ubuntu/+source/thinkfinger/+bug/256429])&lt;br /&gt;
Therefore Jon Oberheide made an update that can be found here: &lt;br /&gt;
[https://launchpad.net/~jon-oberheide/+archive https://launchpad.net/~jon-oberheide/+archive]&lt;br /&gt;
(As of 2/3/09, this no longer seems to be the case. Just proceed to the install step.)&lt;br /&gt;
&lt;br /&gt;
Add the PPA repositories to your source.list (/etc/apt/source.list):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
deb http://ppa.launchpad.net/jon-oberheide/ubuntu intrepid main&lt;br /&gt;
deb-src http://ppa.launchpad.net/jon-oberheide/ubuntu intrepid main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Update installer:&lt;br /&gt;
&lt;br /&gt;
{{cmduser|sudo apt-get update}}&lt;br /&gt;
&lt;br /&gt;
And install:&lt;br /&gt;
&lt;br /&gt;
{{cmduser|sudo apt-get install thinkfinger-tools}}&lt;br /&gt;
&lt;br /&gt;
===== Jaunty =====&lt;br /&gt;
&lt;br /&gt;
The same package by Jon Oberheide is necessary, as with Intrepid, though the package thinkfinger-tools is installed by default.&lt;br /&gt;
&lt;br /&gt;
Add key:&lt;br /&gt;
&lt;br /&gt;
{{cmduser|sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com F2A12FABE936A7BBDC4EA33351DB180D1323E149}}&lt;br /&gt;
&lt;br /&gt;
Add the PPA repositories to your source.list (/etc/apt/source.list):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
deb http://ppa.launchpad.net/jon-oberheide/ppa/ubuntu jaunty main&lt;br /&gt;
deb-src http://ppa.launchpad.net/jon-oberheide/ppa/ubuntu jaunty main&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Update installer:&lt;br /&gt;
&lt;br /&gt;
{{cmduser|sudo apt-get update}}&lt;br /&gt;
&lt;br /&gt;
And install:&lt;br /&gt;
&lt;br /&gt;
{{cmduser|sudo apt-get install thinkfinger-tools libpam-thinkfinger}}&lt;br /&gt;
&lt;br /&gt;
===== Karmic =====&lt;br /&gt;
&lt;br /&gt;
The syntax of udev rules is changed due to Karmic's new udev package. The correct rules should be:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# SGS Thomson Microelectronics Fingerprint Reader&lt;br /&gt;
ENV{ID_VENDOR_ID}==&amp;quot;0483&amp;quot;, ENV{ID_MODEL_ID}==&amp;quot;2016&amp;quot;, SYMLINK+=&amp;quot;input/thinkfinger-%k&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;fingerprint&amp;quot;, ENV{GENERATED}=&amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# the also-needed uinput device&lt;br /&gt;
KERNEL==&amp;quot;uinput&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;fingerprint&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Otherwise udev would accidentally change the ownership of /dev/null so that gdm would fail to start.&lt;br /&gt;
&lt;br /&gt;
===== Lucid =====&lt;br /&gt;
&lt;br /&gt;
From a working Karmic, upgrade to Lucid gave me a somewhat broken ThinkFinger.&lt;br /&gt;
&lt;br /&gt;
The scanner still works, but (in X windows) you need to hit &amp;quot;Enter&amp;quot; after doing a scan.&lt;br /&gt;
The scanner works fine while in terminal mode.&lt;br /&gt;
&lt;br /&gt;
This is almost definitely because of the xorg version, see this message with no response for more info:&lt;br /&gt;
http://article.gmane.org/gmane.linux.drivers.thinkfinger/567&lt;br /&gt;
&lt;br /&gt;
{{HINT|There is a PPA with working ThinkFinger for Lucid. At least it works fine on my Z61m. [http://www.thinkwiki.org/wiki/Installing_Ubuntu_10.04_(Lucid_Lynx)_on_a_ThinkPad_Z61m#Setup_Fingerprint_Reader See here] }}&lt;br /&gt;
&lt;br /&gt;
{{HINT|ThinkFinger can be installed through Ubuntu Software Centre/Synaptic Package Manager/Terminal without special repositories enabled in Lucid. Search &amp;quot;ThinkFinger and install thinkfinger-tools (Synaptic/Software Centre), or type &amp;quot;sudo apt-get install thinkfinger-tools&amp;quot; (Terminal). }}&lt;br /&gt;
&lt;br /&gt;
==== Fedora/Fedora Core ====&lt;br /&gt;
{{cmdroot|yum install thinkfinger}}&lt;br /&gt;
&lt;br /&gt;
==== Gentoo ====&lt;br /&gt;
{{cmdroot|emerge sys-auth/thinkfinger}}&lt;br /&gt;
&lt;br /&gt;
==== OpenSUSE ====&lt;br /&gt;
openSUSE 10.2 includes the package &amp;quot;libthinkfinger&amp;quot; (version 0.1-7) - you will find newer packages [http://beta1.suse.com/private/thoenig/10.2/thinkfinger/ here].&lt;br /&gt;
&lt;br /&gt;
== Testing the driver ==&lt;br /&gt;
&lt;br /&gt;
Now the driver is installed and should be working. You can try it (as root) with&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|tf-tool --acquire}}&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|tf-tool --verify}}&lt;br /&gt;
&lt;br /&gt;
This will ask you to swipe your finger three times, save the fingerprint to /tmp/test.bir and then verify your fingerprint with the bir-file.&lt;br /&gt;
&lt;br /&gt;
== Configuring PAM to use ThinkFinger ==&lt;br /&gt;
Now you can configure PAM to use ThinkFinger:&lt;br /&gt;
&lt;br /&gt;
Open {{path|/etc/pam.d/common-auth}} (In FC6, F7, and Gentoo, this file is {{path|/etc/pam.d/system-auth}}):&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|nano -w /etc/pam.d/common-auth}}&lt;br /&gt;
&lt;br /&gt;
Add this line before any pam_unix or pam_unix2 directives:&lt;br /&gt;
 auth     sufficient     pam_thinkfinger.so&lt;br /&gt;
&lt;br /&gt;
If your PAM uses the pam_unix and not the pam_unix2 module, you need to pass a specific argument in&lt;br /&gt;
the /etc/pam.d/common-auth directive to make it consider the password entered at the pam_thinkfinger prompt.&lt;br /&gt;
 auth     required     pam_unix.so try_first_pass&lt;br /&gt;
&lt;br /&gt;
For instance, {{path|/etc/pam.d/common-auth}} looks like this:&lt;br /&gt;
 auth    sufficient      pam_thinkfinger.so&lt;br /&gt;
 auth    required        pam_unix.so nullok_secure try_first_pass&lt;br /&gt;
&lt;br /&gt;
On openSUSE 10.2, it looks like this now:&lt;br /&gt;
 auth    required        pam_env.so&lt;br /&gt;
 auth    sufficient      pam_thinkfinger.so&lt;br /&gt;
 auth    required        pam_unix2.so&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 8.10 - Intrepid Ibex you should just add the following line the the /etc/pam.d/common-auth file so it looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
....&lt;br /&gt;
# here are the per-package modules (the &amp;quot;Primary&amp;quot; block)&lt;br /&gt;
auth	sufficient	pam_thinkfinger.so&lt;br /&gt;
auth	[success=1 default=ignore]	pam_unix.so try_first_pass nullok_secure&lt;br /&gt;
# here's the fallback if no module succeeds&lt;br /&gt;
....&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On Ubuntu 9.04, you don't need to edit manually, just type:&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|sudo /usr/lib/pam-thinkfinger/pam-thinkfinger-enable}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now we are ready to add users to thinkfinger. You can add a fingerprint for a user with:&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|tf-tool --acquire $USERNAME}}&lt;br /&gt;
&lt;br /&gt;
{{NOTE|This may not work for you. Please read the Intrepid Ibex point in the discussion to this page.}}&lt;br /&gt;
&lt;br /&gt;
Now the user should be able to login with his finger instead of the password.&lt;br /&gt;
&lt;br /&gt;
If you would like to use thinkfinger for su, you have to enroll the fingerprint for root user with:&lt;br /&gt;
&lt;br /&gt;
{{cmdroot|tf-tool --acquire root}}&lt;br /&gt;
&lt;br /&gt;
{{NOTE|You should see the &amp;quot;Password or swipe finger:&amp;quot; prompt when trying to sudo or su. If you don't, you probably do not have the &amp;quot;User level driver support&amp;quot; compiled into your kernel or the &amp;quot;uinput&amp;quot; module loaded!}}&lt;br /&gt;
&lt;br /&gt;
== xscreensaver/gnome-screensaver ==&lt;br /&gt;
{{NOTE|In Fedora 7, the package has been modified in such a way as to make doing this unnecessary.}}&lt;br /&gt;
&lt;br /&gt;
If you'd like to be able to unlock your screen using the fingerprint reader, you must have current versions of xscreesaver (&amp;gt;~5.03) or gnome-screensaver (&amp;gt;~2.18.2). Then you must give yourself access to the fingerprint reader and your bir-file, because unlike login/gdm/su/sudo, both gnome-screensaver and xscreensaver do not run as root. The following procedure will make the fingerprint reader accessible to members of the &amp;quot;fingerprint&amp;quot; group.&lt;br /&gt;
&lt;br /&gt;
Make the group: {{cmdroot|groupadd fingerprint}}&lt;br /&gt;
&lt;br /&gt;
Save the following as {{path|/etc/udev/rules.d/60-thinkfinger.rules}} and run {{cmdroot|sudo /sbin/udevtrigger}}. If you are using a Debian-based distribution, it is likely you are affected by the following [http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=489831 bug] where you need to replace {{path|udevtrigger}} with {{path|udevadm trigger}} (with the space!) in order for the following to work. You may need to reboot for this to take effect.&lt;br /&gt;
 #&lt;br /&gt;
 # udev rules file for the thinkfinger fingerprint scanner&lt;br /&gt;
 # &lt;br /&gt;
 # gives access to the fingerprint reader to those in the &amp;quot;fingerprint&amp;quot; group&lt;br /&gt;
 #&lt;br /&gt;
 # Taken from:&lt;br /&gt;
 #  http://www.thinkwiki.org/wiki/How_to_enable_the_fingerprint_reader_with_ThinkFinger&lt;br /&gt;
 # which was taken and modified from:&lt;br /&gt;
 #  http://article.gmane.org/gmane.linux.drivers.thinkfinger/329&lt;br /&gt;
 #&lt;br /&gt;
 &lt;br /&gt;
 # SGS Thomson Microelectronics Fingerprint Reader&lt;br /&gt;
 SYSFS{idVendor}==&amp;quot;0483&amp;quot;, SYSFS{idProduct}==&amp;quot;2016&amp;quot;, SYMLINK+=&amp;quot;input/thinkfinger-%k&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;fingerprint&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 # the also-needed uinput device&lt;br /&gt;
 KERNEL==&amp;quot;uinput&amp;quot;, MODE=&amp;quot;0660&amp;quot;, GROUP=&amp;quot;fingerprint&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, add the following lines at the end of {{path|/etc/pam.d/gnome-screensaver}}:&lt;br /&gt;
 auth    sufficient      pam_thinkfinger.so&lt;br /&gt;
 auth    required        pam_unix.so try_first_pass nullok_secure&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Per user:&lt;br /&gt;
&lt;br /&gt;
# Add him to the group: {{cmdroot|gpasswd -a $USERNAME fingerprint}}&lt;br /&gt;
{{NOTE|The following steps do not need to be done in Ubuntu Intrepid as the bir files are handled differently.}}&lt;br /&gt;
# Make him owner of his bir-file: {{cmdroot|chown $USERNAME:root /etc/pam_thinkfinger/$USERNAME.bir}}&lt;br /&gt;
# Give him read-only access to his bir-file: {{cmdroot|chmod 400 /etc/pam_thinkfinger/$USERNAME.bir}}&lt;br /&gt;
# Give &amp;quot;execute only&amp;quot; access to everyone for the /etc/pam_thinkfinger/ directory: {{cmdroot|chmod o+x /etc/pam_thinkfinger}} (WARNING: this opens up security a little).&lt;br /&gt;
&lt;br /&gt;
== GNOME ==&lt;br /&gt;
&lt;br /&gt;
{{NOTE|1=This problem should be solved if you're using sudo &amp;gt;= 1.6.9p9. Links: [http://savannah.nongnu.org/bugs/?19132], [http://www.sudo.ws/bugs/show_bug.cgi?id=180], [https://bugs.launchpad.net/ubuntu/+source/gksu/+bug/86843]}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
gksu/gksudo doesn't work correctly. It just stays invisible. When starting a su privileged application such as synaptics you will not get prompted for the password. Nevertheless you can swipe your finger and it should authenticate you. Starting synaptics twice makes gksudo visible.&lt;br /&gt;
&lt;br /&gt;
There are two possibilities to solve it:&lt;br /&gt;
* Changing the string &amp;quot;Password or swipe finger:&amp;quot; to a plain &amp;quot;Password:&amp;quot; (like sudo normally would do) in the file pam/pam_thinkfinger.c of the thinkfinger source directory. Of course, in the console you will then only see a &amp;quot;Password:&amp;quot; instead of &amp;quot;Password or swipe finger:&amp;quot; but this is still more usefull than having gksu/gksudo crashing everytime.&lt;br /&gt;
* Patching libgksu with the following patch. This is also a nasty hack until a better solution is implemented.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--- libgksu-2.0.3/libgksu/libgksu.c.orig	2007-06-17 16:00:24.000000000 +0200&lt;br /&gt;
+++ libgksu-2.0.3/libgksu/libgksu.c		2007-06-17 16:00:47.000000000 +0200&lt;br /&gt;
@@ -2663,7 +2663,7 @@&lt;br /&gt;
        */&lt;br /&gt;
       for (counter = 0; counter &amp;lt; 50; counter++)&lt;br /&gt;
 	{&lt;br /&gt;
-	  if (strncmp (buffer, &amp;quot;GNOME_SUDO_PASS&amp;quot;, 15) == 0)&lt;br /&gt;
+	  if (strncmp (buffer, &amp;quot;GNOME_SUDO_PASS&amp;quot;, 15) == 0 || strncmp (buffer, &amp;quot;Password or swi&amp;quot;, 15) == 0)&lt;br /&gt;
 	    break;&lt;br /&gt;
 &lt;br /&gt;
 	  read_line (parent_pipe[0], buffer, 256);&lt;br /&gt;
@@ -2675,7 +2675,7 @@&lt;br /&gt;
       if (context-&amp;gt;debug)&lt;br /&gt;
 	fprintf (stderr, &amp;quot;brute force GNOME_SUDO_PASS ended...\n&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
-      if (strncmp(buffer, &amp;quot;GNOME_SUDO_PASS&amp;quot;, 15) == 0)&lt;br /&gt;
+      if (strncmp(buffer, &amp;quot;GNOME_SUDO_PASS&amp;quot;, 15) == 0 || strncmp(buffer, &amp;quot;Password or swi&amp;quot;, 15) == 0)&lt;br /&gt;
 	{&lt;br /&gt;
 	  gchar *password = NULL;&lt;br /&gt;
 	  gboolean prompt_grab;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== KDE ==&lt;br /&gt;
&lt;br /&gt;
Integration in KDE and kdm seems not to be easily possible now. There is a filed [https://bugs.kde.org/show_bug.cgi?id=116682 bug] at kde.org where you can vote for this.&lt;br /&gt;
&lt;br /&gt;
Moreover, kdm in openSUSE 10.3 and in Kubuntu 8.10 crashes when pam_thinkfinger is enabled. A possible &amp;quot;workaround&amp;quot; is downgrading to thinkfinger 0.2.2. &lt;br /&gt;
&lt;br /&gt;
Another workaround is to use Fprint from [http://www.reactivated.net/fprint/wiki/Main_Page] which works quite nicely on my X61s and Kubuntu Hardy.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
This Howto was copied from [[Installing Ubuntu 6.06 on a ThinkPad T43#Fingerprint_Reader]] and then slightly modified.&lt;br /&gt;
&lt;br /&gt;
== Fix for the fingerprint reader getting too hot ==&lt;br /&gt;
&lt;br /&gt;
If you notice that your fingerprint reader occasionally gets very hot then you might be interested in this section. Thanks to Tino Keitelon the linux-thinkpad mailing list for the solution.&lt;br /&gt;
&lt;br /&gt;
=== Collect info ===&lt;br /&gt;
First we need to determine if the reader is not on autosuspend mode.&lt;br /&gt;
Open a terminal and run:&lt;br /&gt;
&lt;br /&gt;
 for i in `find /sys/devices/*/*/usb* -name level` ; do echo -n &amp;quot;$i: &amp;quot; ; cat $i ; done&lt;br /&gt;
&lt;br /&gt;
We care about the devices that are with &amp;quot;on&amp;quot; state and we need to determine if one of those is the reader. So for each of those run something like:&lt;br /&gt;
&lt;br /&gt;
 cat /sys/devices/pci0000\:00/0000\:00\:1a.0/usb1/1-2/idVendor &lt;br /&gt;
 0483&lt;br /&gt;
 &lt;br /&gt;
 cat /sys/devices/pci0000\:00/0000\:00\:1a.0/usb1/1-2/idProduct &lt;br /&gt;
 2016&lt;br /&gt;
&lt;br /&gt;
Use the corresponding path of the devices that you got with &amp;quot;on&amp;quot; state and then compare the output with the output of the lsusb command. An example:&lt;br /&gt;
&lt;br /&gt;
 lsusb output: Bus 001 Device 004: ID 0483:2016 SGS Thomson Microelectronics Fingerprint Reader&lt;br /&gt;
&lt;br /&gt;
Which matches the output above (0483:2016).&lt;br /&gt;
&lt;br /&gt;
=== Enable autosuspend ===&lt;br /&gt;
Once you have determined the path of your reader then become root with su - and:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;auto&amp;quot; &amp;gt; /sys/&amp;lt;path-to-device&amp;gt;/power/level&lt;br /&gt;
&lt;br /&gt;
Alternatively, if you're using Ubuntu:&lt;br /&gt;
&lt;br /&gt;
 echo auto | sudo tee /sys/&amp;lt;path-to-device&amp;gt;/power/level&lt;br /&gt;
&lt;br /&gt;
After this, the fingerprint reader should be in &amp;quot;autosuspend&amp;quot; and will not get hot anymore. And it will still work as normal.&lt;br /&gt;
&lt;br /&gt;
=== Making the changes permanent ===&lt;br /&gt;
The above will only work for the current session (until the next reboot). If you want to make the change persistent, do one of the following:&lt;br /&gt;
&lt;br /&gt;
==== Using udev (recommended) ====&lt;br /&gt;
The simplest way to do this is to create a udev rule (requires no additional tools):&lt;br /&gt;
&lt;br /&gt;
Put the following in {{path|/etc/udev/rules.d/69-fingerprint-sleep.rules}}&lt;br /&gt;
&lt;br /&gt;
 ATTR{idVendor}==&amp;quot;0483&amp;quot;, ATTR{idProduct}==&amp;quot;2016&amp;quot;, SUBSYSTEMS==&amp;quot;usb&amp;quot;, ACTION==&amp;quot;add&amp;quot;, ATTR{power/level}=&amp;quot;auto&amp;quot;&lt;br /&gt;
&lt;br /&gt;
(exchange 0483 and 2016 with what you found above if the numbers are different)&lt;br /&gt;
&lt;br /&gt;
==== Using sysfsutils ====&lt;br /&gt;
Alternatively, if you have [http://linux-diag.sourceforge.net/Sysfsutils.html sysfsutils] installed, edit the file {{path|/etc/sysfs.conf}} and add the line&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;path-to-device&amp;gt;/power/level = auto&lt;br /&gt;
&lt;br /&gt;
Following the above example, that would be &lt;br /&gt;
&lt;br /&gt;
 devices/pci0000\:00/0000\:00\:1a.0/usb1/1-2/power/level = auto&lt;br /&gt;
&lt;br /&gt;
==== Using init scripts ====&lt;br /&gt;
If, for some reason, neither of the two above methods don't work, you can install an init script:&lt;br /&gt;
&lt;br /&gt;
 sudo gedit /etc/init.d/ReaderNoMoreHot&lt;br /&gt;
&lt;br /&gt;
Paste the following into it:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 #&lt;br /&gt;
 echo &amp;quot;auto&amp;quot; &amp;gt; /sys/&amp;lt;path-to-device&amp;gt;/power/level&lt;br /&gt;
&lt;br /&gt;
Save and close. Then:&lt;br /&gt;
&lt;br /&gt;
 sudo chmod 755 /etc/init.d/ReaderNoMoreHot&lt;br /&gt;
 sudo update-rc.d ReaderNoMoreHot defaults 90&lt;br /&gt;
&lt;br /&gt;
--[[User:Lunatico|Lunatico]] 19:19, 1 August 2008 (CEST), extended by --[[User:Michaelthomas h|Michaelthomas h]] 23:36, 9 August 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
For the init script above, you can use the following more elaborate script, which does all the work for you of identifying the &amp;lt;path-to-device&amp;gt;. This can be useful since the USB device id can change under various circumstances (kernel upgrade etc).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# find the fingerprint reader and change its power level to autosuspend&lt;br /&gt;
&lt;br /&gt;
usbname=&amp;quot;SGS Thomson Microelectronics Fingerprint Reader&amp;quot;&lt;br /&gt;
usbid=$(lsusb |grep &amp;quot;$usbname&amp;quot; |cut -d' ' -f6);&lt;br /&gt;
[[ -z $usbid ]] &amp;amp;&amp;amp; echo &amp;quot;USB Device \&amp;quot;$usbname\&amp;quot; not found&amp;quot; &amp;amp;&amp;amp; exit 1&lt;br /&gt;
&lt;br /&gt;
unset failed_bool&lt;br /&gt;
find /sys/devices/*/*/usb* -name idVendor -print | (&lt;br /&gt;
  while read vfile; do&lt;br /&gt;
    dir=$(dirname $vfile);&lt;br /&gt;
    vendor=$(&amp;lt;$vfile);&lt;br /&gt;
    product=$(&amp;lt;$dir/idProduct);&lt;br /&gt;
    if [[ $vendor:$product = $usbid ]]; then&lt;br /&gt;
      plevel_file=$dir/power/level&lt;br /&gt;
      old_level=$(&amp;lt;$plevel_file);&lt;br /&gt;
      [[ $old_level = auto ]] || echo auto &amp;gt;$plevel_file || failed_bool=1&lt;br /&gt;
      break;&lt;br /&gt;
    fi;&lt;br /&gt;
  done&lt;br /&gt;
  if [[ $failed_bool ]]; then&lt;br /&gt;
    echo &amp;quot;Failed to set the fingerprint reader's power level to 'auto'.&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
  fi&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is an alternate script. The code is cleaner and it's about 20x faster (updated for jaunty):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# find the fingerprint reader and change its power level to autosuspend&lt;br /&gt;
&lt;br /&gt;
find_manuf=STMicroelectronics&lt;br /&gt;
find_prod=&amp;quot;Biometric Coprocessor&amp;quot;&lt;br /&gt;
&lt;br /&gt;
for devdir in /sys/class/usb_*/*/device; do&lt;br /&gt;
  [[ -r $devdir/manufacturer ]] || continue&lt;br /&gt;
  manuf=$(&amp;lt;$devdir/manufacturer)&lt;br /&gt;
  [[ $manuf = $find_manuf ]] || continue;&lt;br /&gt;
  prod=$(&amp;lt;$devdir/product)&lt;br /&gt;
  [[ $prod = $find_prod ]] || continue;&lt;br /&gt;
  # if we get here then we have the right device!&lt;br /&gt;
  plevel_file=$devdir/power/level&lt;br /&gt;
  old_level=$(&amp;lt;$plevel_file);&lt;br /&gt;
  # if it is already set properly then exit silently:&lt;br /&gt;
  [[ $old_level = auto ]] &amp;amp;&amp;amp; exit 0&lt;br /&gt;
  # if we successfully change it then exit silently:&lt;br /&gt;
  echo auto &amp;gt;$plevel_file &amp;amp;&amp;amp; exit 0&lt;br /&gt;
  echo &amp;quot;Failed to set the fingerprint reader's power level to 'auto'.&amp;quot;&lt;br /&gt;
  exit 1&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
# if we make it through the for loop without exiting, the search failed&lt;br /&gt;
echo &amp;quot;Could not find the $find_manuf $find_prod (fingerprint reader)&amp;quot;&lt;br /&gt;
exit 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:HOWTOs]]&lt;/div&gt;</summary>
		<author><name>Dskrvk</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=How_to_enable_integrated_fingerprint_reader_with_BioAPI&amp;diff=56669</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=56669"/>
		<updated>2015-12-02T14:07:12Z</updated>

		<summary type="html">&lt;p&gt;Dskrvk: /* Bioapi error #3 */ add category&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 [[How to enable the integrated fingerprint reader with ThinkFinger|the apropriate 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 with BioAPI]] 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;
Gentoo now includes needed ebuilds. Just run&lt;br /&gt;
&lt;br /&gt;
''ACCEPT_KEYWORDS=~x86 emerge pam_bioapi''&lt;br /&gt;
&lt;br /&gt;
You can also 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;
&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;
{{HINT|&lt;br /&gt;
For Ubuntu you'll need at least these packages, or building will fail:&lt;br /&gt;
* build-essential&lt;br /&gt;
* automake&lt;br /&gt;
* libqt3-headers&lt;br /&gt;
}}&lt;br /&gt;
* Get the bioapi source and extract the files to a directory of your choice:&lt;br /&gt;
:{{cmduser|wget http://bioapi-linux.googlecode.com/files/bioapi_1.2.3.tar.gz}}&lt;br /&gt;
:{{cmduser|tar xzf bioapi_1.2.3.tar.gz}}&lt;br /&gt;
* Edit the configure file to patch a bug.  At line 25975, change&lt;br /&gt;
:&amp;lt;code&amp;gt;bnv_qt_LIBS=&amp;quot;-l$bnv_qt_lib_dir $LIBS&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
:to&lt;br /&gt;
:&amp;lt;code&amp;gt;bnv_qt_LIBS=&amp;quot;-L$bnv_qt_lib_dir $LIBS&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
* There is a bug in &amp;lt;code&amp;gt;framework/mds_util_api/mds_app_util.c&amp;lt;/code&amp;gt;.  At line 31, change &amp;lt;code&amp;gt;#elif&amp;lt;/code&amp;gt; to &amp;lt;code&amp;gt;#else&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Optional: By default, bioapi will install several files in {{path|/usr/local/bin}}, 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;
* Compile bioapi:&lt;br /&gt;
:{{cmduser|cd bioapi-1.2.3}}&lt;br /&gt;
:{{cmduser|1=./configure}}&lt;br /&gt;
:{{cmduser|make}}&lt;br /&gt;
:and then as root&lt;br /&gt;
:{{cmdroot|make install}}&lt;br /&gt;
* If configure fails when checking the Qt installation, you may need to manually specify the Qt lib directory and Qt lib name.  For example:&lt;br /&gt;
:{{cmduser|1=./configure --with-Qt-lib-dir=/usr/lib/qt3 --with-Qt-lib=qt-mt}}&lt;br /&gt;
:or you can compile without the graphical Qt tools:&lt;br /&gt;
:{{cmduser|1=./configure --with-Qt-dir=no}}&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 [http://code.google.com/p/pam-bioapi/ 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;
&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/solutions/pc_and_networking/sdks/linux/DownloadBSP.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, Debian or Ubuntu Dapper, use&lt;br /&gt;
:{{cmdroot|sh install.sh /usr/lib}}&lt;br /&gt;
{{HINT|&lt;br /&gt;
For me it didn't work this way, but following did:&lt;br /&gt;
:sh install.sh /usr/local/lib&lt;br /&gt;
greetings, tec}}&lt;br /&gt;
{{HINT|On my debian install I had to &amp;quot;cp libtfmessbsp.so /usr/lib&amp;quot; to avoid a errormessage during &amp;quot;sh install.sh /usr/lib&amp;quot;: &amp;quot;Could not find file:/usr/lib/libtfmessbsp.so&amp;quot;}}&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;
On {{Fedora}} this is done with&lt;br /&gt;
:{{cmdroot|groupadd bioapi}}&lt;br /&gt;
:{{cmdroot|groupadd 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;
In {{Fedora}} {{cmd|lsusb|}} is not installed by default. To intall it just type: &lt;br /&gt;
:{{cmdroot|yum install usbutils}}&lt;br /&gt;
&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;
:then add the line&lt;br /&gt;
 #include &amp;lt;stdlib.h&amp;gt;&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;
There's work in progress. pam_bioapi and biometrics-manager can be downloaded [http://download.savannah.gnu.org/releases/pam-bioapi/ 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 'configure: error: cannot find required header: security/pam_modules.h' and are on a Debian-like system, do &amp;quot;apt-get install libpam0g-dev&amp;quot; and try again.&lt;br /&gt;
*If you get 'configure: error: cannot find required header: sqlite3.h' and are on a Debian-like system, do &amp;quot;apt-get install libsqlite3-dev&amp;quot; and try again.&lt;br /&gt;
*If you get 'make: msgfmt: command not found' and are on a Debian-like system, do &amp;quot;apt-get install gettext&amp;quot; and try again.&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;
{{NOTE|su/sudo will call for your fingerprint even if you are remote via ssh.  Pressing *CTLR-c* (or closing graphic window) will allow you the desired password option.}}&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;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
To enable normal password authorization to work with remote SSH in {{SUSE}} 10.3, edit the &amp;lt;tt&amp;gt;/etc/pam.d/sshd&amp;lt;/tt&amp;gt; file. Remove all entries and replace them with:&lt;br /&gt;
&lt;br /&gt;
 auth    required        pam_env.so&lt;br /&gt;
 auth    required        pam_unix2.so&lt;br /&gt;
 auth    required        pam_nologin.so&lt;br /&gt;
 account required        pam_unix2.so&lt;br /&gt;
 password required       pam_pwcheck.so  nullok&lt;br /&gt;
 password required       pam_unix2.so    nullok use_first_pass use_authtok&lt;br /&gt;
 session required        pam_limits.so&lt;br /&gt;
 session required        pam_unix2.so&lt;br /&gt;
&lt;br /&gt;
{{NOTE|These entries are what common-auth normally does. Since we've changed common-auth around for bioapi, these need to be specified manually. -Ransak}}&lt;br /&gt;
&lt;br /&gt;
----&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;
* On Ubuntu simply do: &lt;br /&gt;
 echo &amp;quot;DISPLAY=$DISPLAY&amp;quot; &amp;gt;&amp;gt; /var/lib/kdm/kdm_env&lt;br /&gt;
* If you have created /etc/pam.d/bioapi then modify:&lt;br /&gt;
 auth sufficient pam_bioapi.so {5550454b-2054-464d-2f45-535320425350} /etc/bioapi/pam/ /var/lib/kdm/kdm_env&lt;br /&gt;
&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://dl.getdropbox.com/u/869/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://dl.getdropbox.com/u/869/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;br /&gt;
&lt;br /&gt;
==Common problems==&lt;br /&gt;
===Bioapi error #3===&lt;br /&gt;
This is sometimes caused by improper permissions. The full error message is &amp;quot;BioAPI Error Code: 3 (0x3)&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
However, at least on Gentoo, recent upgrades to glibc and gcc 4.1.1 caused Bioapi to break down due to some sort of incompatibility with bioapi registry. Reinstalling does '''not''' repair the issue automatically. However, you can still fix the issue manually, by removing /var/bioapi. You need to reinstall tfm-fingerprint driver after reinstalling bioapi so that the driver is properly re-registered. As root, type&lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|emerge -C bioapi}}&lt;br /&gt;
:{{cmdroot|rm -rf /var/bioapi}}&lt;br /&gt;
:{{cmdroot|emerge -av1 bioapi tfm-fingerprint}}&lt;br /&gt;
&lt;br /&gt;
[[Category:HOWTOs]]&lt;/div&gt;</summary>
		<author><name>Dskrvk</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=How_to_enable_integrated_fingerprint_reader_with_fprint&amp;diff=56668</id>
		<title>How to enable integrated fingerprint reader with fprint</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=How_to_enable_integrated_fingerprint_reader_with_fprint&amp;diff=56668"/>
		<updated>2015-12-02T14:05:12Z</updated>

		<summary type="html">&lt;p&gt;Dskrvk: /* Ubuntu 12.04 LTS */ add category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Is your fingerprint reader recognized? ==&lt;br /&gt;
&lt;br /&gt;
Log in to the desktop.  Open a terminal.  In the terminal run &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
lsusb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and look for the &amp;quot;Upek Biometric ... Fingerprint Sensor&amp;quot; device.&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu 12.04 LTS ===&lt;br /&gt;
&lt;br /&gt;
Install the needed software.&lt;br /&gt;
&lt;br /&gt;
Note that the &amp;lt;tt&amp;gt;libpam-fprint&amp;lt;/tt&amp;gt; package shipped with Ubuntu 12.04 is deprecated.  Use &amp;lt;tt&amp;gt;libpam-fprintd&amp;lt;/tt&amp;gt; instead.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo add-apt-repository ppa:fingerprint/fprint&lt;br /&gt;
sudo apt-get install libpam-fprintd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The needed lines in &amp;lt;tt&amp;gt;common-auth&amp;lt;/tt&amp;gt; should now be present.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ grep fprint /etc/pam.d/common-auth&lt;br /&gt;
auth	[success=2 default=ignore]	pam_fprintd.so &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now run&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
fprintd-enroll&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and swipe your right index finger five times as instructed.&lt;br /&gt;
Now you should be able to authenticate by swiping your right index finger.&lt;br /&gt;
&lt;br /&gt;
If you have an encrypted home directory then logging in from GDM by fingerprint does not work: the home directory cannot be decrypted.  The solution is to log in from GDM with a password.  (You encrypted your home directory so that even if someone has physical access to your computer, and it's turned off, then she can't read your files without taking it to the NSA.  But if she's a bit clever and handy she can fool the fingerprint reader using a fingerprint lifted from the computer case.)&lt;br /&gt;
The problem is that GDM follows the default authentication procedure which starts with an attempt to read a fingerprint.  Only once this fails or times out is a password requested.  That is not convenient.  &lt;br /&gt;
&lt;br /&gt;
To eliminate fingerprint authentication from the display manager login do the following.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo cp /etc/pam.d/common-auth /etc/pam.d/common-auth-nofinger&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit &amp;lt;tt&amp;gt;/etc/pam.d/common-auth-nofinger&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Remove the line &amp;quot;&amp;lt;tt&amp;gt;auth	[success=3 default=ignore] pam_fprintd.so&amp;lt;/tt&amp;gt;&amp;quot;; save and quit.&lt;br /&gt;
&lt;br /&gt;
Edit &amp;lt;tt&amp;gt;/etc/pam.d/lightdm&amp;lt;/tt&amp;gt; (or &amp;lt;tt&amp;gt;/etc/pam.d/gdm&amp;lt;/tt&amp;gt;, if that's what you're using) so that it &amp;quot;@includes&amp;quot; &amp;lt;tt&amp;gt;/etc/pam.d/common-auth-nofinger&amp;lt;/tt&amp;gt; rather than &amp;lt;tt&amp;gt;/etc/pam.d/common-auth&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[Category: Ubuntu 12.04]]&lt;br /&gt;
[[Category:HOWTOs]]&lt;/div&gt;</summary>
		<author><name>Dskrvk</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=How_to_enable_the_integrated_fingerprint_reader&amp;diff=56667</id>
		<title>How to enable the integrated fingerprint reader</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=How_to_enable_the_integrated_fingerprint_reader&amp;diff=56667"/>
		<updated>2015-12-02T14:02:16Z</updated>

		<summary type="html">&lt;p&gt;Dskrvk: /* Links */ add category&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sub-howtos for enabling the [[integrated fingerprint reader]] on ThinkPads:&lt;br /&gt;
&lt;br /&gt;
* [[How to enable integrated fingerprint reader with fprint]] &amp;lt;- Try this first&lt;br /&gt;
* [[How to enable integrated fingerprint reader with ThinkFinger]]&lt;br /&gt;
* [[How to enable integrated fingerprint reader with BioAPI]]&lt;br /&gt;
&lt;br /&gt;
==Free software==&lt;br /&gt;
&lt;br /&gt;
===fprint===&lt;br /&gt;
The most current effort to support fingerprint readers is the [http://reactivated.net/fprint/wiki/Main_Page fprint project].  The fprint software comprises the libraries &amp;lt;tt&amp;gt;libfprint&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;libpam-fprint&amp;lt;/tt&amp;gt; (which provides authentication via PAM) and the daemon &amp;lt;tt&amp;gt;fprintd&amp;lt;/tt&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
It seems that lately this project has stalled; no support for newer chips has emerged for some time.&lt;br /&gt;
&lt;br /&gt;
====Fingerprint GUI====&lt;br /&gt;
Makes use of libfprint.&lt;br /&gt;
&lt;br /&gt;
Feb 2011: The following works as smoothly on Ubuntu and T410s: https://launchpad.net/~fingerprint/+archive/fingerprint-gui&lt;br /&gt;
&lt;br /&gt;
Be aware the above packages (and the Fingerprint GUI project) include non-free drivers as indicated on [http://www.n-view.net/Appliance/fingerprint/about.php the project About page].&lt;br /&gt;
&lt;br /&gt;
===ThinkFinger===&lt;br /&gt;
An earlier effort was the [http://thinkfinger.sourceforge.net ThinkFinger project]. It only supports the first-generation reader and has not been updated since 2007. See the [[How to enable the integrated fingerprint reader with ThinkFinger]] for detailed instructions. It was included in Debian Lenny but has since been removed from Debian.&lt;br /&gt;
&lt;br /&gt;
== Non-free software ==&lt;br /&gt;
A closed source driver for the UPEK device is available.  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/downloads/linux/ http://www.upek.com/support/downloads/linux/]. It however tends to be less stable than the above open-source drivers.&lt;br /&gt;
&lt;br /&gt;
==Links==&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://www.qrivy.net/~michael/blua/ A branch of the BioAPI reference implementation]&lt;br /&gt;
* [http://www.pdfserver.net/fingerprint A GUI using the BioAPI driver on thinkpads. Windows-like GDM login]&lt;br /&gt;
* [http://www.n-view.net/Appliance/fingerprint/ Fingerprint GUI Project. Allows to use the fingerprint scanner for Login (GDM) and authentication in (sudo, su). Seems to work with T410 and Ubuntu 10.04]&lt;br /&gt;
&lt;br /&gt;
[[Category:HOWTOs]]&lt;/div&gt;</summary>
		<author><name>Dskrvk</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=DisplayPort&amp;diff=56666</id>
		<title>DisplayPort</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=DisplayPort&amp;diff=56666"/>
		<updated>2015-11-17T17:58:19Z</updated>

		<summary type="html">&lt;p&gt;Dskrvk: /* Audio Support */ add W520, formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
{| width=&amp;quot;100%&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;
DisplayPort is a digital video connector, available on select ThinkPads&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* [[Wikipedia:DisplayPort| Wikipedia article on DisplayPort]]&lt;br /&gt;
&lt;br /&gt;
==ThinkPads featuring this technology==&lt;br /&gt;
* Full size DisplayPort (DP) connector&lt;br /&gt;
** {{L412}}, {{L512}}&lt;br /&gt;
** {{R500}}&lt;br /&gt;
** {{T400s}}, {{T410}}, {{T410i}}, {{T410s}}, {{T410si}}, {{T420}}, {{T420s}}, {{T500}}, {{T510}}, {{T510i}}, {{T520}}&lt;br /&gt;
** {{W500}}, {{W510}}, {{W520}}, {{W700}}, {{W700ds}}, {{W701}}, {{W701ds}}&lt;br /&gt;
** {{X301}},{{X220}}&lt;br /&gt;
* Mini DisplayPort (mDP) connector&lt;br /&gt;
** {{T430}}, {{T430s}}, {{T431}}, {{T440}}, {{T440s}}, {{T530}}&lt;br /&gt;
** {{X230}}, {{X230s}}, {{X240}}&lt;br /&gt;
&lt;br /&gt;
==Port Replicators and Docks featuring this technology==&lt;br /&gt;
Note, some have multiple Displayports&lt;br /&gt;
* [[ThinkPad Mini Dock Series 3]]&lt;br /&gt;
* [[ThinkPad Mini Dock Plus Series 3 - 170W]]&lt;br /&gt;
* [[ThinkPad Mini Dock Plus Series 3 - 135W]]&lt;br /&gt;
* [[ThinkPad Mini Dock Plus Series 3 - 90W]]&lt;br /&gt;
* [[X200 UltraBase]]&lt;br /&gt;
* [[W700 Mini Dock]]&lt;br /&gt;
* [[W700 Mini Dock 2.0]]&lt;br /&gt;
&lt;br /&gt;
== DVI Pass-through ==&lt;br /&gt;
&lt;br /&gt;
Certain ThinkPad models have a DisplayPort connection which offers DVI pass-through.&lt;br /&gt;
&lt;br /&gt;
Check [http://www-307.ibm.com/pc/support/site.wss/MIGR-72148.html ThinkPad Digital Video Interface (DVI) and DVI Pass-Through] for more information, and to see if a specific model and configuration is supported.&lt;br /&gt;
&lt;br /&gt;
== Audio Support ==&lt;br /&gt;
&lt;br /&gt;
There are reports that DisplayPort on some (possibly all) current thinkpads does not support audio. While there are adapters to convert DisplayPort to HDMI, the lack of audio makes it impossible to, for example, watch a DVD or Blu-Ray on an HDTV using the DisplayPort. [http://forums.lenovo.com/t5/W-Series-ThinkPad-Laptops/Displayport-to-HDMI-with-audio/td-p/68575 See this thread for more information]&lt;br /&gt;
&lt;br /&gt;
Audio over DisplayPort when used in conjunction with a DisplayPort to HDMI conversion cable is [http://forums.lenovo.com/t5/T400-T500-and-newer-T-series/T410-T510-DisplayPort-features-audio/td-p/191530/page/3 confirmed] to work on T410 and T510 both on integrated and discrete graphics options on Windows systems.&lt;br /&gt;
&lt;br /&gt;
Audio support works out of the box on T410 and others when configured properly.  A few minutes configuring the digital audio and or dolby 5.1 audio to use the dislplay port and it works.  [[User:Lathama|Lathama]] ([[User talk:Lathama|talk]]) 22:46, 30 August 2013 (CEST)&lt;br /&gt;
&lt;br /&gt;
=== T410s ===&lt;br /&gt;
&lt;br /&gt;
The T410s supports audio pass-through via DisplayPort on recent Linux systems.&lt;br /&gt;
&lt;br /&gt;
With the Intel HD Audio modul selected recent linux kernels detect the DisplayPort&lt;br /&gt;
audio as a separate output device:&lt;br /&gt;
&lt;br /&gt;
On 2.6.36-rc1 the following devices can be found in {{path|/proc/asound/*}}&lt;br /&gt;
&lt;br /&gt;
  Codec: Intel IbexPeak HDMI&lt;br /&gt;
  Device: name=&amp;quot;INTEL HDMI 0&amp;quot;, type=&amp;quot;HDMI&amp;quot;, device=3&lt;br /&gt;
  Device: name=&amp;quot;INTEL HDMI 1&amp;quot;, type=&amp;quot;HDMI&amp;quot;, device=7&lt;br /&gt;
&lt;br /&gt;
If you want to pass Audio via DisplayPort you just have to switch to the Intel HDMI audio output device&lt;br /&gt;
for the application in PulseAudio (didn't test with pure ALSA).&lt;br /&gt;
&lt;br /&gt;
=== W510 ===&lt;br /&gt;
&lt;br /&gt;
The more recent versions of the W510 with the Quadro FX 880M support audio and video out through DisplayPort. Tested with a DisplayPort to HDMI with Audio converter. Used alsa (no PulseAudio) and mplayer, 2.6.35-ARCH, using &amp;lt;code&amp;gt;mplayer -afm hwdts,hwac3 -ao alsa:noblock:device=hw=1.7&amp;lt;/code&amp;gt; and nvidia driver version 256.53. Had to unmute with &amp;lt;code&amp;gt;alsamixer -c1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== W520 ===&lt;br /&gt;
&lt;br /&gt;
Verified audio is working with a port adapter, nvidia driver version 352.41, alsa, PulseAudio (possibly unnecessary). The BIOS setting for graphics is &amp;quot;Discrete graphics&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== X220 ===&lt;br /&gt;
&lt;br /&gt;
Pulseaudio detects and and stream audio out of the DisplayPort. Tested talking to a DisplayPort monitor, just needed to select one of the HDMI profiles in pavucontrol (Pulseaudio Volume Control) on the Configuration tab.&lt;br /&gt;
&lt;br /&gt;
== Problems ==&lt;br /&gt;
&lt;br /&gt;
=== T420s and T520 ===&lt;br /&gt;
The BIOS for the {{T420s}} (and presumably also the {{T420}}) settings for _Graphics Device_ default to '''NVIDIA Optimus''' and the '''OS Detection for NVIDIA Optimus''' is set to '''Disabled''' which is not a good set of defaults for Linux since Optimus is only supported by Windows 7. To get the NVidia drivers working for Linux I had to set the '''Graphics Device''' to '''Discrete Graphics'''. This was as of 2011-11-26 using '''driver version 290.10'''. Then run '''sudo nvidia-xconfig'''. Both TwinView and Xinerama worked fine.&lt;br /&gt;
&lt;br /&gt;
The T520 also requires '''Discrete Graphics''' to use DisplayPort.&lt;br /&gt;
&lt;br /&gt;
=== Twinview using Displayport and DVI broken ===&lt;br /&gt;
On my T410 mini-dock series 3, the displayport works unless I try to use it while using the DVI out as well.&lt;br /&gt;
DVI+VGA works, but nvidia-settings dies horribly. Tried with 195.* and 260* drivers.&lt;br /&gt;
&lt;br /&gt;
I am using a displayport -&amp;gt; DVI adapter (displayport++ allows this).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; FIX:&amp;lt;/b&amp;gt;&lt;br /&gt;
Using Nouveau drivers instead of the nvidia binary blob allows my displayport to work in concert with the DVI out of my dock.&lt;br /&gt;
This allows dual digital external displays.  Attempting to activate the laptop monitor as well leads to problems.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt; ANOTHER FIX: &amp;lt;/b&amp;gt;&lt;br /&gt;
Version 275* from the nvidia website allows me to use Displayport and DVI at the same time as well.&lt;br /&gt;
&lt;br /&gt;
== External Sources ==&lt;br /&gt;
* [http://www-307.ibm.com/pc/support/site.wss/MIGR-72148.html ThinkPad Digital Video Interface (DVI) and DVI Pass-Through]&lt;br /&gt;
* [http://www-307.ibm.com/pc/support/site.wss/MIGR-70321.html DisplayPort Monitor Cables - Overview]&lt;/div&gt;</summary>
		<author><name>Dskrvk</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Maintenance&amp;diff=56665</id>
		<title>Maintenance</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Maintenance&amp;diff=56665"/>
		<updated>2015-11-17T17:43:04Z</updated>

		<summary type="html">&lt;p&gt;Dskrvk: /* External Sources */ add HOWTOs category&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;
Here you can find general hints about keeping your ThinkPad in good shape. Look at your [[:Category:Models|models category page]] for IBMs official maintenance guide for that model.&lt;br /&gt;
|}&lt;br /&gt;
==Assembly/Disassembly instructions==&lt;br /&gt;
Lenovo has a website dedicated to servicing ThinkPads, but it only covers the more recent models. For older models check the HMM (Hardware Maintenance Manual) for your ThinkPad.&lt;br /&gt;
* http://www.lenovoservicetraining.com/&lt;br /&gt;
&lt;br /&gt;
==Battery treatment==&lt;br /&gt;
{| border=1 cellspacing=0 cellpadding=2 style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
|+Battery life expanding guide&lt;br /&gt;
|- style=&amp;quot;background:#efefef;white-space:nowrap;&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot; | Battery Type !! NiCd !! NiMH !! Lithium ion&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot; | General&lt;br /&gt;
|&lt;br /&gt;
*always do complete discharge/charge cycles&lt;br /&gt;
*avoid exposing the battery (or notebook) to excessive heat&lt;br /&gt;
|&lt;br /&gt;
*always do complete discharge/charge cycles&lt;br /&gt;
*avoid exposing the battery (or notebook) to excessive heat&lt;br /&gt;
|&lt;br /&gt;
*avoid deep discharges except when resetting fuel gauge or reconditioning a battery;  partial dis-/recharges are better for the battery lifetime (note: fuel gauge will slowly get inaccurate over time)&lt;br /&gt;
*remove battery when on AC (due to heat)&lt;br /&gt;
*avoid exposing the battery (or notebook) to excessive heat&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot; | Charging&lt;br /&gt;
|&lt;br /&gt;
*discharge before charging&lt;br /&gt;
|&lt;br /&gt;
*discharge before charging&lt;br /&gt;
|&lt;br /&gt;
*avoid charging if battery is nearly full, unless you will need its full capacity soon; keep it on the 30%-85% charged range&lt;br /&gt;
*keep notebook off while charging due to heat&lt;br /&gt;
*fully discharge, then fully charge battery when needed to recalibrate fuel gauge;  newer battery pack models require this less often, old ones might need it as often as every 30 cycles&lt;br /&gt;
|- style=&amp;quot;vertical-align:top;&amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#ffdead;&amp;quot; | Storage&lt;br /&gt;
| &lt;br /&gt;
*almost discharged&lt;br /&gt;
*cool and dry&lt;br /&gt;
|&lt;br /&gt;
*almost discharged&lt;br /&gt;
*cool and dry&lt;br /&gt;
|&lt;br /&gt;
*never fully charged or discharged, ideally at about 40%&lt;br /&gt;
*cool and dry, but '''do not freeze''' them: 10-15C is recommended&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Battery health===&lt;br /&gt;
Batteries, especially of the modern Li-Ion type, wear out quicker when they hold a large charge or are subject to higher temperatures (see above).&lt;br /&gt;
&lt;br /&gt;
If you use your laptop at a desk, reduce battery wear by maintaining an appropriate charge level.  When  possible, remove Li-ion batteries while operating from AC as the notebook gets hot enough inside for that to damage the battery in the long run, even if charging is stopped.&lt;br /&gt;
&lt;br /&gt;
On recent ThinkPads, charging thresholds can be configured in the bundled software.  Under Linux, this is supported on recent models by the [[tp_smapi]] driver (and even without &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt;, if you have a dual-boot setup, you can set the thresholds under Windows and they will be remembered as long as you don't power off your machine with AC disconnected; suspend to RAM is OK). Have a look at [[How to use UltraBay batteries]].&lt;br /&gt;
&lt;br /&gt;
If you have spare Li-ion battery packs, store them at 40% charge in a cool place (15C being a recommended temperature, do not let the batteries freeze).  If storing inside a refrigerator, beware of humidity, and be careful with cold spots that can easily freeze the battery if anything goes wrong.&lt;br /&gt;
&lt;br /&gt;
===The problem with 600 series batteries===&lt;br /&gt;
ThinkPad 600 power management causes batteries to die before they should. Read more about this on the [[Problem with ThinkPad 600 batteries|associated problem page]].&lt;br /&gt;
&lt;br /&gt;
===Reviving batteries===&lt;br /&gt;
Some people experience sudden drops in their batteries capacity.  A way to get these batteries back to full capacity is to run the &amp;quot;Battery Rundown&amp;quot; function of IBMs &amp;quot;PC Doctor for DOS&amp;quot;.  The program is downloadable from IBMs support site as three floppy disk images.  Make sure you get the specific version of program made for your ThinkPad model.  For those who do not have a floppy, David Smith prepared a [http://www.mypchelp.com/~dsmith/ibmutil/ibm_t22_pcdiag.iso bootable CD image] (dead link, a copy is also available [http://server6.org/~marker/software/ibm_t22_pcdiag.iso here]) from the T22 floppy images. For newer ThinkPads there is an official [http://www-307.ibm.com/pc/support/site.wss/document.do?sitestyle=lenovo&amp;amp;lndocid=MIGR-56222 bootable CD image]. (Although the instructions on this page (as of May 2008) include details for Linux and refer to a CD image, it is actually provided as a Windows executable. On Linux systems, [http://winehq.org Wine] can execute this file and extract the CD image.) Once extracted, you must mount the iso as a loop device (as root) like so:&lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|mount -o loop 1ety48ww.iso /mnt/floppy}}&lt;br /&gt;
&lt;br /&gt;
Then copy the .IMA file out of that mounted iso:&lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|cd /mnt/floppy}}&lt;br /&gt;
:{{cmdroot|cp 1ETY48WW.IMA /boot}}&lt;br /&gt;
&lt;br /&gt;
(Or to some other suitable directory.) After this, you can follow the same directions that apply for [[BIOS Upgrade|BIOS upgrade]]s.&lt;br /&gt;
&lt;br /&gt;
{{NOTE|This will do nothing to improve the performance of a dying battery. It serves only to recalibrate the battery charge controller. The &amp;quot;Battery Rundown&amp;quot; function of IBMs &amp;quot;PC Doctor for DOS&amp;quot; has no intelligence. It merely runs a series of dumb operations to consume battery power, and it cannot detect whether a battery is present or not. If you leave the mains connected while running &amp;quot;Battery Rundown&amp;quot;, it will have no effect, as the battery will simply keep charging. The [[tp_smapi]] module, if installed, will report the number of charge cycles the battery has had since it was manufactured. If that number is high, the battery's poor performance is almost certainly due to its age.}}&lt;br /&gt;
&lt;br /&gt;
I have recently made an interesting discovery, I have an R40 with two main batteries, both of them have aproximately about under 200 cycles and are nowadays 4 years old, projected capacity for R40/R32 main battery is 57Wh, and both my batteries were about 30Wh, then I left my notebook with one of them about a day in a standby mode, as long as it powered off itself because of low battery power, when I turned it on I saw the battery capacity at about 42Wh, then, I did this too for the second battery and I got even about 46Wh, I think I could go even higher with letting the battery discharge completely from 100% in standby, I think this has something to do with low power consumption in standby mode, it may work for you too.&lt;br /&gt;
&lt;br /&gt;
===See also===&lt;br /&gt;
* [[Battery safety]]&lt;br /&gt;
&lt;br /&gt;
===External sources===&lt;br /&gt;
* [http://www-307.ibm.com/pc/support/site.wss/document.do?lndocid=PFAN-3QNQJN IBM Support - Extending battery life]&lt;br /&gt;
* [http://www-307.ibm.com/pc/support/site.wss/document.do?sitestyle=ibm&amp;amp;lndocid=MIGR-51038 IBM Support - Battery troubleshooting]&lt;br /&gt;
* [http://www.pc.ibm.com/ww/thinkpad/batterylife/ IBM Benchmark]&lt;br /&gt;
* [http://batteryuniversity.com Battery University]&lt;br /&gt;
* [http://www.batteryuniversity.com/parttwo-34.htm Battery University's info about prolonging lithium ion batteries]&lt;br /&gt;
* [http://www.buchmann.ca/Chap10-page6.asp prolonging lithium ion batteries in Buchmanns Battery FAQ]&lt;br /&gt;
* [http://www.electronics-lab.com/articles/Li_Ion_reconstruct Electronics Labs information about lithium ion batteries]&lt;br /&gt;
&lt;br /&gt;
==Cleaning the Display==&lt;br /&gt;
If you discover markings that look like they originate from the TrackPoint or keyboard, or for information on how to avoid these, look at [[Problem with key and trackpoint markings on the display|this page]].&lt;br /&gt;
&lt;br /&gt;
===External Sources===&lt;br /&gt;
* [http://www-307.ibm.com/pc/support/site.wss/document.do?sitestyle=lenovo&amp;amp;lndocid=MIGR-4A2P54 Lenovo Support - LCD care and cleaning instructions]&lt;br /&gt;
* [http://www-307.ibm.com/pc/support/site.wss/document.do?sitestyle=lenovo&amp;amp;lndocid=MIGR-52190 Lenovo Support - System cleaning instructions]&lt;br /&gt;
&lt;br /&gt;
==Cleaning the Interior==&lt;br /&gt;
{{WARN|The following instructions are not appropriate for all ThinkPad models. Please consult the hardware maintenance guide or on-line disassembly instructions for your model.}}&lt;br /&gt;
Most ThinkPad models (particularly the A-series and the T-series) tend to accumulate a lot of interior dust which they draw from their ventilation fan.  A good dusting every few months is advised. The procedure is as follows.&lt;br /&gt;
&lt;br /&gt;
===ThinkPad T4x series===&lt;br /&gt;
See IBM's keyboard removal [http://www-307.ibm.com/pc/support/site.wss/document.do?sitestyle=lenovo&amp;amp;lndocid=MIGR-46515 instructions] and [http://www-307.ibm.com/pc/support/site.wss/document.do?sitestyle=lenovo&amp;amp;lndocid=MIGR-50227 movie].&lt;br /&gt;
&lt;br /&gt;
===ThinkPad T6x series===&lt;br /&gt;
See IBM's keyboard removal&lt;br /&gt;
[http://www-307.ibm.com/pc/support/site.wss/document.do?sitestyle=lenovo&amp;amp;lndocid=MIGR-62800 instructions] and&lt;br /&gt;
[http://www-307.ibm.com/pc/support/site.wss/document.do?sitestyle=lenovo&amp;amp;lndocid=MIGR-63912 movie].&lt;br /&gt;
&lt;br /&gt;
===Other models (which?)===&lt;br /&gt;
#Unplug the computer.&lt;br /&gt;
#Remove the battery.&lt;br /&gt;
#Turn the ThinkPad over and find two to three screws with upraised double-arrows pointing to them.&lt;br /&gt;
#Unscrew these screws and set them aside.&lt;br /&gt;
#Press the silver area underneath where the battery used to be.  The front of the keyboard will pop up.&lt;br /&gt;
#Turn the ThinkPad right side up and gently remove the keyboard, pulling it toward you.&lt;br /&gt;
#There is one connector between the ThinkPad and the keyboard.  Disconnect it, and set the keyboard aside.&lt;br /&gt;
#If there is a small black plastic separator under the keyboard, remove it and set it aside.&lt;br /&gt;
#The fan should be visible in the upper left.  That entire area will likely be dusty.  With a can of compressed air (and ''only'' with a can of compressed air), dust that area and the surrounding area.&lt;br /&gt;
#Replace the small black plastic separator, then reconnect the keyboard.&lt;br /&gt;
#Slide the keyboard back into place, then press down on the Fn and right-arrow keys until it pops into place.&lt;br /&gt;
#Replace the keyboard screws and battery.&lt;br /&gt;
&lt;br /&gt;
==Dealing with spilling accidents==&lt;br /&gt;
#Don't panic.&lt;br /&gt;
#Don't flip or tilt the computer to prevent the liquid from spreading all over the inside of the case.&lt;br /&gt;
#Shut down the OS and turn off the power:&lt;br /&gt;
##Unplug the computer.&lt;br /&gt;
##Remove the battery.&lt;br /&gt;
#Tilt the computer so that everything that leaked into the case can flow out the same way.&lt;br /&gt;
#Allow the computer to dry before switching it on again.&lt;br /&gt;
#For minor accidents this might already be sufficient. For major flooding you should either bring the computer to a dealer who knows how to open and clean it from inside. Or you can read the Hardware Maintenance Manual, open, clean, and dry the computer yourself. &lt;br /&gt;
&lt;br /&gt;
See also [http://www.moneysense.ca/spending/technology/columnist.jsp?content=986628 Act quickly, carefully if you spill on laptops] on MoneySense.ca (link broken as of 2006-09-18, the article is still available via [http://web.archive.org/web/20050221034011/http://www.moneysense.ca/spending/technology/columnist.jsp?content=986628 web.archive.org]).&lt;br /&gt;
&lt;br /&gt;
==Harddisk Backup / Upgrade==&lt;br /&gt;
*[[How to copy a Linux installation]]&lt;br /&gt;
*[[Harddrive Upgrade|How to upgrade your Thinkpad hard drive]]&lt;br /&gt;
*[[How to copy a Windows installation]]&lt;br /&gt;
===External Sources===&lt;br /&gt;
*[http://gamma.nic.fi/~point/win2copy.htm Guide on copying Windows 2000/XP to another partition]&lt;br /&gt;
&lt;br /&gt;
==Recovering BIOS passwords.==&lt;br /&gt;
Password recovery procedure for IBM ThinkPads using R24RF08 and IBMpass.&lt;br /&gt;
&lt;br /&gt;
(Note: An updated tutorial can always be found [http://www.allservice.ro/forum/viewtopic.php?t=47&amp;amp;start=0 HERE])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''1. Introduction.'''&lt;br /&gt;
&lt;br /&gt;
The IBM ThinkPad uses a small eeprom ([[AT24RF08|ATMEL 24RF08]]) to store different OEM&lt;br /&gt;
issues like serial number, UUID, etc. The supervisor password (SVP) is also stored in this eeprom.&lt;br /&gt;
The 24RF08 is not an ordinary eeprom: it features read protection, which the BIOS uses to lock down&lt;br /&gt;
access to the eeprom contents.  Also, the password is written in a special scan code, which needs to&lt;br /&gt;
be translated to ASCII to be of any use.&lt;br /&gt;
&lt;br /&gt;
To recover the password, one can use two different programs: R24RF08 (eeprom reader) and IBMpass&lt;br /&gt;
(password revealer) available at [http://www.allservice.ro/store/utils http://www.allservice.ro/store/utils]. Diagrams are included in the reader kit.&lt;br /&gt;
&lt;br /&gt;
Models for which R24RF08 and IBMpass are enough to recover the password: 240, 240X, 390E, 390X, 570, 570E,&lt;br /&gt;
600e, 600X, 770Z, A20m, A21e, A21m, a22m, A30, A30p, A31, A31p, G40, G41, R30, R31, R32, R40, R50, R51, &lt;br /&gt;
Transnote, T20, T21, T22, T23, T30, T40, T40p, T41, T41p, T42, T42p, X20, X21, X22, X23, X24, X30, X31, X40, X41, X61.&lt;br /&gt;
&lt;br /&gt;
ThinkPads featuring TPCA technology (i.e. a [[Tpm|TPM trusted platform module chip]]), especially T4x, X3x, X4x, X61 and X61T need the W24RF08 eeprom writer program to complete the password recovery procedure, if the passphrase function is enabled in BIOS setup.&lt;br /&gt;
&lt;br /&gt;
Other models such as the 380XD or 600 use 24C01 or 93C46 eeproms, which can be read without special tools.&lt;br /&gt;
The method is the same like for the models based on 24RF08, only the software to dump the eeprom is different. &lt;br /&gt;
&lt;br /&gt;
Newer T43/T43p, R52, R60, T60/p, X60 and Z60 ThinkPads can be unlocked using PC8394 programming tools that consist in RPC8394 and WPC8394 (reader and writer for TPM chips). &lt;br /&gt;
The software is available as well at [http://www.allservice.ro/forum/viewtopic.php?p=1061#1061 www.allservice.ro]. IBMpass 2.0 works for any TP model without exceptions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''2. Locating the ATMEL 24RF08 eeprom. Soldering.'''&lt;br /&gt;
&lt;br /&gt;
No need to unsolder the 24RF08 eeprom, just solder 3 wires to SDA, SCL and GND pins of the&lt;br /&gt;
eeprom. There are two eeprom layouts (see interface schematics described bellow), corresponding to 8 pin or 14 pin eeproms. Locate the eeprom first according to your model (E.g. T20-23 and T30 have the eeprom underneath TP, and can be accessed by removing the RAM modules cover, no need to dismantle the laptop.) and solder the wires using a soldering iron with a fine tip. Also, you can use 0.15 -0.20 mm enamel coated wires or similar small diameter insulated wires. These wires will be connected later to the interface.&lt;br /&gt;
Tip: You can use clips to connect the wires or you can solder on the PCB traces leading to the&lt;br /&gt;
eeprom pins. Once again, be careful and double, triple check the soldering if necessary till you are positively sure you have done the right job. In case of applying too much solder, use flux-impregnated copper-braid &amp;quot;desoldering wick&amp;quot; - this works exceptionally well.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''3. Choose and build the interface.'''&lt;br /&gt;
&lt;br /&gt;
Since version 2.0, R24RF08 and W24RF08 (eeprom writer) are compatible with a wide range of eeprom programmers. By default, both programs set the COM port signals to use direct logic level to access I2C bus. We provide here 2 schematics that are relevant for direct logic signals and for inverse logic signals (simple-i2cprog.pdf and driven-i2cprog.pdf). Also, depending of the interface you build, you can invert the logics for SDA-In, SDA-Out, and SCL COM port signals by some command line parameters described later in this document.&lt;br /&gt;
a) The file simple-i2cprog.pdf contains the schematic diagram of a simple interface (known as SIPROG)based on 2 zeners and 2 resistors. This is a classic, easy to build circuit and works with soldered or unsoldered eeproms. The purpose of the 2 zeners is to convert RS232 levels (+/- 5V) to TTL levels, needed by the eeprom. It uses direct logic signals to I2C eeprom and is powered by the COM port. However, this interface works with in-system eeproms but is dependant on COM port current and eeprom bus impedance. R24RF08 works natively with this circuit, no need to change the lines signals with command line parameters. This circuit works pretty well with almost all ThinkPads series.&lt;br /&gt;
b) The second interface is described in driven-i2cprog.pdf. The circuit uses MAX 232 as a RS232 to TTL driver and its main purpose is to work with soldered eeproms. The advantage of MAX232 is the TTL outputs that are more reliable and more powerful when work with soldered, in-system eeproms (dependency free from the COM port current). Due of the internal inverters of MAX232 the interface responds to an inverse signal logic level. R24RF08 needs /x, /d, /i switches to be specified in the command line.&lt;br /&gt;
&lt;br /&gt;
What these switches mean:&lt;br /&gt;
/x - invert serial clock, also known as SCL;&lt;br /&gt;
/d - invert serial data output, also known as SDA-Out;&lt;br /&gt;
/i - invert serial data input, also known as SDA-In.&lt;br /&gt;
All those can be used in any combination to meet any interface specification.&lt;br /&gt;
&lt;br /&gt;
Note that the &amp;quot;standard&amp;quot; serial port programmer probably won't work with a USB-Serial adapter, but requires the full nominal voltage of a hardware serial port. [Example: the A22p's serial port works fine here.]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''4. Dump the EEPROM:'''&lt;br /&gt;
&lt;br /&gt;
Prepare your technician PC by connecting the interface to the COM1 port (donâ€™t connect the wires to eeprom yet). Turn on the ThinkPad and press F1 to enter BIOS Setup. When you are prompted for the password and thereâ€™s no other activity like HDD access or so, connect the wires (GND first!, SDA, SCL) to the corresponding wires from the interface (attached before to COM1) and execute R24RF08:&lt;br /&gt;
&lt;br /&gt;
-for SI-PROG interface (as described in 3.a above):&lt;br /&gt;
r24rf08.exe &amp;lt;filename.ext&amp;gt;. where filename.ext is the file where eeprom content will be stored.&lt;br /&gt;
Example: r24rf08 mytp.bin&lt;br /&gt;
&lt;br /&gt;
-for MAX232 driven I2C interface (as described in 3.b above):&lt;br /&gt;
r24rf08.exe &amp;lt;filename.ext&amp;gt; /x /d /i. where /x /d /i are command line parameters (switches) for this kind of interface.&lt;br /&gt;
Example: r24rf08 mytp2.bin /x /d /i&lt;br /&gt;
&lt;br /&gt;
Use exactly the instructed switches to avoid possible damages to your eeprom data!&lt;br /&gt;
The file should be created in the same folder. Finally, disconnect the wires (GND last!) and turn off the ThinkPad by pressing on/off switch.&lt;br /&gt;
&lt;br /&gt;
Dump the EEPROM data at least twice, and do a bytewise compare with `cmp`. Both files should be identical, and 1024 bytes long. Otherwise, you probably have a serial port problem.&lt;br /&gt;
&lt;br /&gt;
Note: the r24rf08.exe program automatically sets the serial port parameters. It also works fine with Wine under Linux - provided that a symlink (com1) exists in the .wine/dos_devices directory, and points to the /dev/ttySX for the actual serial port.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''5. Reveal the password.'''&lt;br /&gt;
&lt;br /&gt;
Now, you have the .bin file but you need to dump in scan code to retrieve the password. IBMpass 2.1 Lite is a free tool that will do the job. Just open the eeprom dump youâ€™ve created before and search for 0x330, 0x340 lines. The password is located on 0x338 (and 0x340 depending on model) in scan code. For 24C01 eeproms the password is located at 0x38, 0x40. If the password won't work for the very first time then your eeprom may use newer IBM scancodes. In this case switch to alternate scan codes to find it. For those who want quick answers the recommended version is IBMpass 1.1. Usage for IBMpass 1.1 (command line only):&lt;br /&gt;
&lt;br /&gt;
ibmpass mytp.bin â€“ use â€œ/aâ€ switch to see in alternate scan code if needed:&lt;br /&gt;
ibmpass mytp.bin /a&lt;br /&gt;
&lt;br /&gt;
For some old models like 570 or 770Z you need to execute the eeprom patcher first. This will reset the read protection on the password offset. To do that just execute patcher.exe before the reading operation, without rebooting the laptop:&lt;br /&gt;
&lt;br /&gt;
-for SI-PROG:&lt;br /&gt;
patcher.exe , then immediately&lt;br /&gt;
r24rf08.exe &amp;lt;filename.ext&amp;gt;&lt;br /&gt;
&lt;br /&gt;
-for Driven-I2C (Max232) you must insert the switches:&lt;br /&gt;
patcher.exe /x /d /i, then immediately&lt;br /&gt;
r24rf08.exe &amp;lt;filename.ext&amp;gt; /x /d /i&lt;br /&gt;
&lt;br /&gt;
W24RF08, the writer version, has included the complete APP reset operation you donâ€™t need to use patcher.&lt;br /&gt;
&lt;br /&gt;
Moreover, there are a new encrypting algos used with some new security chips (AT97SC3201, AT97SC3203) that are very secured. The password is not in scancode and in some cases not even in the eeprom. To unlock the machine, the dump should suffer some changes and the eeprom must be reprogrammed using W24RF08. This operation works for all IBM TCG/TCPA secured laptops w/o exceptions. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Remember, use 3 wires from the interface and 3 wires from eeprom! Connect them after your&lt;br /&gt;
ThinkPad is powered and disconnect them right after you read the content, before you switch off the laptop.&lt;br /&gt;
&lt;br /&gt;
'''6. Password format'''&lt;br /&gt;
&lt;br /&gt;
The thinkpad power-on/supervisor passwords are a maximum of 7 characters, and are NOT case-sensitive. The allowed characters are restricted to A-Z, 0-9, semicolon, _, - (and perhaps a few others).&lt;br /&gt;
If  PassPhrase is enabled then the password can be longer than 7 characters. &lt;br /&gt;
Models like T43/R52/T60/R60/T60/X60/Z60/Z61 need the TPM chip dumped with [http://www.allservice.ro/forum/viewtopic.php?p=1061#1061 PC8394 programming tools] in order to find password/reset the TCPA lock.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===External Sources===&lt;br /&gt;
* [http://www.allservice.ro/forum R24RF08/W24RF08, PC8394 programming tools &amp;amp; IBMpass author's forums]&lt;br /&gt;
* [http://www-307.ibm.com/pc/support/site.wss/document.do?sitestyle=ibm&amp;amp;lndocid=MIGR-59377 IBM Support - Lost or forgotten password]&lt;br /&gt;
* [http://www.allservice.ro/forum/viewforum.php?f=12 Full Service of all ThinkPad models including free password recovery]&lt;br /&gt;
* [http://sodoityourself.com/hacking-ibm-thinkpad-bios-password/ A tutorial on how to do this]&lt;br /&gt;
&lt;br /&gt;
[[Category:HOWTOs]]&lt;/div&gt;</summary>
		<author><name>Dskrvk</name></author>
		
	</entry>
</feed>