<?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=Vogo</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=Vogo"/>
	<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/wiki/Special:Contributions/Vogo"/>
	<updated>2026-05-05T03:36:14Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.31.12</generator>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Talk:How_to_hotswap_Ultrabay_devices&amp;diff=43460</id>
		<title>Talk:How to hotswap Ultrabay devices</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Talk:How_to_hotswap_Ultrabay_devices&amp;diff=43460"/>
		<updated>2009-06-11T16:06:41Z</updated>

		<summary type="html">&lt;p&gt;Vogo: revork ultrabay.sh - not umounted partitions, support for holders&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=HAL script=&lt;br /&gt;
&lt;br /&gt;
If the script works, your lshal output should contain something similar to this. In this case the Ultrabay device was a second HDD (/dev/sdb).&lt;br /&gt;
&lt;br /&gt;
Note that in the example, storage.hotpluggable = true while before it was false, so the script worked.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
udi = '/org/freedesktop/Hal/devices/storage_serial_SATA_HTS726060M9AT00_MRH453M4H11ARB'&lt;br /&gt;
  block.device = '/dev/sdb'  (string)&lt;br /&gt;
  block.is_volume = false  (bool)&lt;br /&gt;
  block.major = 8  (0x8)  (int)&lt;br /&gt;
  block.minor = 16  (0x10)  (int)&lt;br /&gt;
  block.storage_device = '/org/freedesktop/Hal/devices/storage_serial_SATA_HTS726060M9AT00_MRH453M4H11ARB'  (string)&lt;br /&gt;
  info.capabilities = {'storage', 'block'} (string list)&lt;br /&gt;
  info.category = 'storage'  (string)&lt;br /&gt;
  info.parent = '/org/freedesktop/Hal/devices/pci_8086_24ca_scsi_host_0_scsi_device_lun0'  (string)&lt;br /&gt;
  info.product = 'HTS726060M9AT00'  (string)&lt;br /&gt;
  info.udi = '/org/freedesktop/Hal/devices/storage_serial_SATA_HTS726060M9AT00_MRH453M4H11ARB'  (string)&lt;br /&gt;
  info.vendor = 'ATA'  (string)&lt;br /&gt;
  linux.hotplug_type = 3  (0x3)  (int)&lt;br /&gt;
  linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1f.1/host1/target1:0:0/1:0:0:0/block/sdb'  (string)&lt;br /&gt;
  storage.automount_enabled_hint = true  (bool)&lt;br /&gt;
  storage.bus = 'pci'  (string)&lt;br /&gt;
  storage.drive_type = 'disk'  (string)&lt;br /&gt;
  storage.firmware_version = 'MH4O'  (string)&lt;br /&gt;
  storage.hotpluggable = true  (bool)&lt;br /&gt;
  storage.lun = 0  (0x0)  (int)&lt;br /&gt;
  storage.media_check_enabled = false  (bool)&lt;br /&gt;
  storage.model = 'HTS726060M9AT00'  (string)&lt;br /&gt;
  storage.no_partitions_hint = false  (bool)&lt;br /&gt;
  storage.originating_device = '/org/freedesktop/Hal/devices/computer'  (string)&lt;br /&gt;
  storage.partitioning_scheme = 'mbr'  (string)&lt;br /&gt;
  storage.removable = false  (bool)&lt;br /&gt;
  storage.removable.media_available = true  (bool)&lt;br /&gt;
  storage.removable.media_size = 60011642880  (0xdf8f90000)  (uint64)&lt;br /&gt;
  storage.requires_eject = false  (bool)&lt;br /&gt;
  storage.serial = 'SATA_HTS726060M9AT00_MRH453M4H11ARB'  (string)&lt;br /&gt;
  storage.size = 60011642880  (0xdf8f90000)  (uint64)&lt;br /&gt;
  storage.vendor = 'ATA'  (string)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
|+ Known South Bridge PCI IDs&lt;br /&gt;
! ID !! ThinkPad model !! South Bridge chip (for Ultrabay) !! parent device (host_0, lun0 = 2nd ATA controller, master device)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_7111 || T20, T21, T22, X20, X21 || Intel 82371AB/EB/MB PIIX4 IDE || /org/freedesktop/Hal/devices/pci_8086_7111_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_248a || T23, T30, X22, X23, X24, X30|| Intel 82801CAM IDE U100 (rev 2) || /org/freedesktop/Hal/devices/pci_8086_248a_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_24ca || R50, R51, T40, T40p, T41, T41p, T42, T42p, X31, X32, X40 || Intel 82801DBM (ICH4-M) || /org/freedesktop/Hal/devices/pci_8086_24ca_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2653 || R52, T43, T43p, X41, Z60m, Z60t  || Intel 82801FBM (ICH6-M) || /org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27c4 || R60, X60 || Intel 82801GBM (ICH7 Family) || /org/freedesktop/Hal/devices/pci_8086_27c4_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27df || T60, T60p, Z61m, Z61t, Z61p || Intel 82801GBM/GHM (ICH7 Family) || /org/freedesktop/Hal/devices/pci_8086_27df_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2850 || R61, T61, T61p, X300 || Intel 82801H (ICH8 Family) || /org/freedesktop/Hal/devices/pci_8086_2850_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2929 || R400, R500, T400, T500, W500, W700, X200, X301 || Intel 82801I ICH9 Family || /org/freedesktop/Hal/devices/pci_8086_2929_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|}&lt;br /&gt;
==lshal output==&lt;br /&gt;
Please place your lshal output here if you had problems, or if you have a A or W series ThinkPad&lt;br /&gt;
&lt;br /&gt;
= bash script for hotswapping UltraBay =&lt;br /&gt;
&lt;br /&gt;
Here is my script for hotswapping ultrabay, is more complex, supports swap partition on drive in ultrabay, check holders (useful, when you are using luks) and more :)&lt;br /&gt;
&lt;br /&gt;
{{HELP|Please test on difrent models}}&lt;br /&gt;
&lt;br /&gt;
ultrabay.sh&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
SCSI_DEVICE=&amp;quot;&amp;quot;&lt;br /&gt;
FORCE_SLEEP=&amp;quot;1&amp;quot;&lt;br /&gt;
QUIET=&amp;quot;0&amp;quot;&lt;br /&gt;
SYSLOG=&amp;quot;0&amp;quot;&lt;br /&gt;
BEEP=&amp;quot;0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Message()&lt;br /&gt;
{&lt;br /&gt;
    MESSAGE=&amp;quot;${0/*\//}: $*&amp;quot;&lt;br /&gt;
    if [ &amp;quot;$QUIET&amp;quot; = &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
        echo &amp;quot;$MESSAGE&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if [ &amp;quot;$SYSLOG&amp;quot; != &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
        /usr/bin/logger &amp;quot;$MESSAGE&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Exit()&lt;br /&gt;
{&lt;br /&gt;
    case &amp;quot;$1&amp;quot; in&lt;br /&gt;
        &amp;quot;fail&amp;quot;)&lt;br /&gt;
            [ $BEEP != &amp;quot;0&amp;quot; ] &amp;amp;&amp;amp; echo 2 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
            exit 1&lt;br /&gt;
        ;;&lt;br /&gt;
        &amp;quot;success&amp;quot;)&lt;br /&gt;
            [ $BEEP != &amp;quot;0&amp;quot; ] &amp;amp;&amp;amp; echo 12 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
            exit 0&lt;br /&gt;
        ;;&lt;br /&gt;
    esac&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Usage()&lt;br /&gt;
{&lt;br /&gt;
    echo &amp;quot;usage: ${0/*\/} [options]&amp;quot;&lt;br /&gt;
    echo &amp;quot;options:&amp;quot;&lt;br /&gt;
    echo &amp;quot;    -d &amp;lt;path&amp;gt;  SCSI device (required)&amp;quot;&lt;br /&gt;
    echo &amp;quot;    -s         Ignore fail when putting drive to sleep&amp;quot;&lt;br /&gt;
    echo &amp;quot;    -q         No messages&amp;quot;&lt;br /&gt;
    echo &amp;quot;    -l         Use syslog for messages (-q has no efect)&amp;quot;&lt;br /&gt;
    echo &amp;quot;    -b         Use beeb for notification (-q has no efect)&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Block2Device()&lt;br /&gt;
{&lt;br /&gt;
    /bin/readlink -e &amp;quot;/dev/block/$1&amp;quot;    &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
IsSwap()&lt;br /&gt;
{&lt;br /&gt;
    /sbin/swapon -s | grep -q -e &amp;quot;^$1\b&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
IsMounted()&lt;br /&gt;
{&lt;br /&gt;
    mount | grep -q -e &amp;quot;^$1\b&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HasHolders()&lt;br /&gt;
{&lt;br /&gt;
    [ &amp;quot;$(ls &amp;quot;$1/holders&amp;quot;)&amp;quot; ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
IsBusy()&lt;br /&gt;
{&lt;br /&gt;
    DEVICE=$(Block2Device $(cat &amp;quot;$1/dev&amp;quot;)) &lt;br /&gt;
    if IsSwap &amp;quot;$DEVICE&amp;quot; || IsMounted &amp;quot;$DEVICE&amp;quot; || HasHolders &amp;quot;$1&amp;quot;; then&lt;br /&gt;
	Message &amp;quot;device '$DEVICE' is busy&amp;quot;&lt;br /&gt;
	false&lt;br /&gt;
    else&lt;br /&gt;
	true&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SleepDrive()&lt;br /&gt;
{&lt;br /&gt;
    BLOCK=$(cat $SCSI_DEVICE/block/*/dev 2&amp;gt; /dev/null)&lt;br /&gt;
    DEVICE=$(Block2Device &amp;quot;$BLOCK&amp;quot;)&lt;br /&gt;
    if ! /sbin/hdparm -Y &amp;quot;$DEVICE&amp;quot; &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
        Message &amp;quot;cannot put drive to sleep&amp;quot;&lt;br /&gt;
        if [ $FORCE_SLEEP = &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
            true&lt;br /&gt;
        else&lt;br /&gt;
            false&lt;br /&gt;
        fi&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
DeleteScsiDevice()&lt;br /&gt;
{&lt;br /&gt;
    if ! { echo 1 &amp;gt; $SCSI_DEVICE/delete; } &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
        Message &amp;quot;cannot delete device&amp;quot;&lt;br /&gt;
        false&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
GetDock()&lt;br /&gt;
{&lt;br /&gt;
    grep &amp;quot;$1&amp;quot; /sys/devices/platform/dock.*/type | sed -e s%/type:.*%%&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
IsDocked()&lt;br /&gt;
{&lt;br /&gt;
    [ $(cat $(GetDock &amp;quot;$1&amp;quot;)/docked) -ne 0 ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Undock()&lt;br /&gt;
{&lt;br /&gt;
    { echo 0 &amp;gt; $(GetDock &amp;quot;$1&amp;quot;)/undock; } &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    if IsDocked &amp;quot;$1&amp;quot;; then&lt;br /&gt;
        Message &amp;quot;cannot undock UltraBay&amp;quot;&lt;br /&gt;
        false&lt;br /&gt;
    else&lt;br /&gt;
        Message &amp;quot;UltraBay undocked&amp;quot;&lt;br /&gt;
        true&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while getopts &amp;quot;d:qlsb&amp;quot; OPTION; do&lt;br /&gt;
    case $OPTION in&lt;br /&gt;
        d)&lt;br /&gt;
            SCSI_DEVICE=&amp;quot;$OPTARG&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
        s)&lt;br /&gt;
            FORCE_SLEEP=&amp;quot;0&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
        q)&lt;br /&gt;
            QUIET=&amp;quot;1&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
        l)&lt;br /&gt;
            SYSLOG=&amp;quot;1&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
        b)&lt;br /&gt;
            BEEP=&amp;quot;1&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
        ?)&lt;br /&gt;
            Usage&lt;br /&gt;
        ;;&lt;br /&gt;
      esac&lt;br /&gt;
done&lt;br /&gt;
 &lt;br /&gt;
if [ -d &amp;quot;$SCSI_DEVICE&amp;quot; ] &amp;amp;&amp;amp; IsDocked &amp;quot;ata_bay&amp;quot;; then&lt;br /&gt;
    sync&lt;br /&gt;
    for DEV_DIR in $(ls $SCSI_DEVICE/block/*/*/dev $SCSI_DEVICE/block/*/dev | sed -e s/dev$//  2&amp;gt; /dev/null); do&lt;br /&gt;
	IsBusy &amp;quot;$DEV_DIR&amp;quot; || Exit &amp;quot;fail&amp;quot;&lt;br /&gt;
    done&lt;br /&gt;
    sync&lt;br /&gt;
    SleepDrive || Exit &amp;quot;fail&amp;quot;&lt;br /&gt;
    DeleteScsiDevice || Exit &amp;quot;fail&amp;quot;&lt;br /&gt;
    sleep 4&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -d $SCSI_DEVICE ] &amp;amp;&amp;amp; $(IsDocked &amp;quot;ata_bay&amp;quot;); then&lt;br /&gt;
    if Undock &amp;quot;ata_bay&amp;quot;; then&lt;br /&gt;
        Exit &amp;quot;success&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
        Exit &amp;quot;fail&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
Message &amp;quot;UltraBay is already undock&amp;quot;&lt;br /&gt;
Exit &amp;quot;success&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Supported models: {{R400}} - linux-2.6.29&lt;br /&gt;
==comments==&lt;br /&gt;
Interesting, especially the support for swap partitions. but I have two comments, first your calling your script hotswap.sh and then having udev call ultrabay.sh?&lt;br /&gt;
&lt;br /&gt;
Then your hard coding the location of the Ultrabay device. This is not guarenteed to be correct, although it will be in most cases. In particular the A and W-series machines. A-series had support for more then one Ultrabay device, while W-series has support for more then one internal HDD in addition to the Ultrabay device, so the Ultrabay location will shift. That is why the Ultrabay Eject script on the main page gets the eject device information from udev.&lt;br /&gt;
&lt;br /&gt;
==comments==&lt;br /&gt;
Hi, thanks, I fix name of script :)&lt;br /&gt;
Udev calling ultrabay.sh with option -d, so it remove correct device, if you want remove device manualy, is default device useful. But option may be required...&lt;br /&gt;
&lt;br /&gt;
==more comments ;)==&lt;br /&gt;
You might also have a look at the script on the main page, it has a few extra abilities, such as logging to syslog, beeping and putting up popups on the desktop.&lt;br /&gt;
&lt;br /&gt;
Logging to syslog is simple, just call 'logger' with what you want to log. quite should have no effect on this.&lt;br /&gt;
&lt;br /&gt;
For beeps, similar to what windows does you can echo different values to /proc/acpi/ibm/beep, but it only works if sound is not muted. Unfortunately doing so does seem to generate some annoying messages in syslog.&lt;br /&gt;
&lt;br /&gt;
Lastly you can use notify-send to put up messages on the desktop, but before you can do so you have to do an export DISPLADISPLAY=0:0 /usr/bin/knotify4 --passive-popup : Adresář nebo soubor neexistujeY=:0.0&lt;br /&gt;
&lt;br /&gt;
==Syslog and beep==&lt;br /&gt;
OK, scrip now support syslog and beeping :).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Still missing notify-send ;)&lt;br /&gt;
&lt;br /&gt;
I am also thinking that it would be useful in the case of a busy filesystem to tell the user to run something like fuser -mv /dev/sr0&amp;lt;br&amp;gt;&lt;br /&gt;
Or perhaps we should run it ourselves automatically and just tell the user what is the cause of the busy filesystem.&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:Tonko|Tonko]] 21:21, 8 June 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Vogo</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=7443-C1G&amp;diff=43446</id>
		<title>7443-C1G</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=7443-C1G&amp;diff=43446"/>
		<updated>2009-06-10T19:40:33Z</updated>

		<summary type="html">&lt;p&gt;Vogo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==General==&lt;br /&gt;
Model Name:  7443C1G&lt;br /&gt;
&lt;br /&gt;
Description:  ThinkPad {{R400}}&lt;br /&gt;
 &lt;br /&gt;
==Operating System==&lt;br /&gt;
Genuine Windows is authentic Windows software that is properly licensed and legally installed. Learn more about the special benefits reserved for genuine Windows customers by visiting www.microsoft.com/genuine &lt;br /&gt;
&lt;br /&gt;
Operating system provided:  Genuine Windows Vista Business&lt;br /&gt;
&lt;br /&gt;
==Architecture==&lt;br /&gt;
Bus type/architecture:  PCI/PCI Express&lt;br /&gt;
&lt;br /&gt;
Bays:   Ultrabay Enhanced &lt;br /&gt;
&lt;br /&gt;
Indicator light:&lt;br /&gt;
&lt;br /&gt;
Form Factor:  Notebook&lt;br /&gt;
&lt;br /&gt;
==Display==&lt;br /&gt;
External display supported:&lt;br /&gt;
&lt;br /&gt;
Simultaneous external display:&lt;br /&gt;
&lt;br /&gt;
Screen type description:   WXGA TFT&lt;br /&gt;
&lt;br /&gt;
Viewable image size (diagonal):  14.1inches&lt;br /&gt;
&lt;br /&gt;
Screen illumination:  CCFL Backlight&lt;br /&gt;
&lt;br /&gt;
Max colors or grey shades:  16777216&lt;br /&gt;
&lt;br /&gt;
Max resolution:  1280x800&lt;br /&gt;
&lt;br /&gt;
==Graphics Subsystem==&lt;br /&gt;
Video RAM std/max:   -- / --&lt;br /&gt;
&lt;br /&gt;
Graphics chipset:  Intel Graphics Media Accelerator 4500MHD&lt;br /&gt;
&lt;br /&gt;
Graphics type:  --&lt;br /&gt;
&lt;br /&gt;
Video RAM type:  DVMT&lt;br /&gt;
&lt;br /&gt;
Max resolution (with max video RAM):  2048x1536 16777216 colors&lt;br /&gt;
&lt;br /&gt;
Max colors (with max video RAM):  16777216&lt;br /&gt;
&lt;br /&gt;
Graphics bus interface:  PCI Express&lt;br /&gt;
&lt;br /&gt;
==Processor==&lt;br /&gt;
BIOS type:   Flash ROM&lt;br /&gt;
&lt;br /&gt;
Processor manufacturer:   Intel&lt;br /&gt;
&lt;br /&gt;
Processor (CPU):  Intel® Core 2 Duo processor T5870&lt;br /&gt;
&lt;br /&gt;
Processor internal clock speed2:   2GHz&lt;br /&gt;
&lt;br /&gt;
Front Side Bus:  800MHz&lt;br /&gt;
&lt;br /&gt;
==Memory==&lt;br /&gt;
Memory (RAM) std/max:  2x1GB / 4GB&lt;br /&gt;
&lt;br /&gt;
RAM slots total:   2 SODIMM&lt;br /&gt;
&lt;br /&gt;
RAM slots available:   0 SODIMM&lt;br /&gt;
&lt;br /&gt;
RAM speed supported:  1066MHz&lt;br /&gt;
&lt;br /&gt;
RAM type:  PC3-8500 DDR3 SDRAM&lt;br /&gt;
&lt;br /&gt;
==Hard Disk==&lt;br /&gt;
Hard disk size1:  250GB&lt;br /&gt;
&lt;br /&gt;
Hard disk type:  Serial ATA&lt;br /&gt;
&lt;br /&gt;
==Optical device==&lt;br /&gt;
Floppy diskette size:   --&lt;br /&gt;
&lt;br /&gt;
Optical device:   DVD Recordable&lt;br /&gt;
&lt;br /&gt;
Optical device speed8:  24X Max&lt;br /&gt;
&lt;br /&gt;
Device interface:  EIDE&lt;br /&gt;
&lt;br /&gt;
==Audio==&lt;br /&gt;
Integrated speakers:   2&lt;br /&gt;
&lt;br /&gt;
Speaker power rating:   2 Watts&lt;br /&gt;
&lt;br /&gt;
Volume control buttons:&lt;br /&gt;
&lt;br /&gt;
Speaker Quantity:   2 (Internal Speakers)&lt;br /&gt;
&lt;br /&gt;
Audio chipset:  Intel High Definition Audio&lt;br /&gt;
&lt;br /&gt;
Audio data width:  24-bit&lt;br /&gt;
&lt;br /&gt;
==Communications==&lt;br /&gt;
Fax/modem:  56K V.92 designed modem AMOM&lt;br /&gt;
&lt;br /&gt;
Fax/modem speeds:  56Kbps data/14.4Kbps fax&lt;br /&gt;
&lt;br /&gt;
Infrared port:   No&lt;br /&gt;
&lt;br /&gt;
Infrared port speed:   --&lt;br /&gt;
&lt;br /&gt;
Wireless standard:   Intel WiFi Link 5100AGN&lt;br /&gt;
&lt;br /&gt;
Network card:   Integrated Intel 82567LM Gigabit Network Adapter&lt;br /&gt;
&lt;br /&gt;
Network interface:   Gigabit Ethernet- Integrated&lt;br /&gt;
&lt;br /&gt;
==Accessories==&lt;br /&gt;
A/C adapter:&lt;br /&gt;
&lt;br /&gt;
Worldwide A/C compatibility:  Yes&lt;br /&gt;
&lt;br /&gt;
Port replicator:&lt;br /&gt;
&lt;br /&gt;
=Standard Features=&lt;br /&gt;
Pointing device type:  UltraNav (TrackPoint and TouchPad)&lt;br /&gt;
&lt;br /&gt;
Keyboard type:  Full size&lt;br /&gt;
&lt;br /&gt;
Keyboard light:  Yes&lt;br /&gt;
&lt;br /&gt;
==Power Management==&lt;br /&gt;
Heat emissions:   90W&lt;br /&gt;
&lt;br /&gt;
Sound emissions:   40dB&lt;br /&gt;
&lt;br /&gt;
Battery life - min/max:   5.6 Hrs&lt;br /&gt;
&lt;br /&gt;
Battery type(s):   6 Cell Lithium-Ion&lt;br /&gt;
&lt;br /&gt;
Charge time - on/off:  6.0Hrs / 3.5Hrs&lt;br /&gt;
&lt;br /&gt;
==Expansion Options==&lt;br /&gt;
Plug and play support:&lt;br /&gt;
&lt;br /&gt;
Slots total (free) and type:   PCI/PCI Express&lt;br /&gt;
&lt;br /&gt;
Parallel port type:&lt;br /&gt;
&lt;br /&gt;
Ports:&lt;br /&gt;
&lt;br /&gt;
==Weight &amp;amp; Dimensions==&lt;br /&gt;
Weight:  2.4Kg&lt;br /&gt;
&lt;br /&gt;
Height:   34.9mm&lt;br /&gt;
&lt;br /&gt;
Width:    335.5mm &lt;br /&gt;
&lt;br /&gt;
Depth:    238mm&lt;br /&gt;
&lt;br /&gt;
Travel weight:  2.32Kgs&lt;br /&gt;
&lt;br /&gt;
==Security==&lt;br /&gt;
Security features:  Power-on password&lt;br /&gt;
&lt;br /&gt;
Security lock slot&lt;br /&gt;
&lt;br /&gt;
Supervisor password&lt;br /&gt;
&lt;br /&gt;
Hard disk drive password&lt;br /&gt;
&lt;br /&gt;
Integrated fingerprint reader&lt;br /&gt;
&lt;br /&gt;
Client Security Solution&lt;br /&gt;
&lt;br /&gt;
==Limited warranty==&lt;br /&gt;
Type of service:  Customer Carry-in Repair&lt;br /&gt;
&lt;br /&gt;
Warranty period:   One year parts and labor (system battery: one year)&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Supported operating systems:&lt;br /&gt;
&lt;br /&gt;
Communication/networking:   &lt;br /&gt;
&lt;br /&gt;
Device drivers/utilities:&lt;br /&gt;
&lt;br /&gt;
Multimedia applications:&lt;br /&gt;
&lt;br /&gt;
Productivity applications:&lt;br /&gt;
&lt;br /&gt;
Other applications provided:&lt;br /&gt;
&lt;br /&gt;
==Identification under Linux==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ lspci&lt;br /&gt;
00:00.0 Host bridge: Intel Corporation Mobile 4 Series Chipset Memory Controller Hub (rev 07)                                                               &lt;br /&gt;
00:02.0 VGA compatible controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07)                                        &lt;br /&gt;
00:02.1 Display controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07)                                               &lt;br /&gt;
00:03.0 Communication controller: Intel Corporation Mobile 4 Series Chipset MEI Controller (rev 07)                                                         &lt;br /&gt;
00:19.0 Ethernet controller: Intel Corporation 82567LM Gigabit Network Connection (rev 03)                                                                  &lt;br /&gt;
00:1a.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 (rev 03)                                                              &lt;br /&gt;
00:1a.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #5 (rev 03)                                                              &lt;br /&gt;
00:1a.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #6 (rev 03)                                                              &lt;br /&gt;
00:1a.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #2 (rev 03)                                                             &lt;br /&gt;
00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio Controller (rev 03)                                                                   &lt;br /&gt;
00:1c.0 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 1 (rev 03)                                                                      &lt;br /&gt;
00:1c.1 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 2 (rev 03)                                                                      &lt;br /&gt;
00:1c.3 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 4 (rev 03)                                                                      &lt;br /&gt;
00:1d.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 03)                                                              &lt;br /&gt;
00:1d.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 03)&lt;br /&gt;
00:1d.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 03)&lt;br /&gt;
00:1d.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 03)&lt;br /&gt;
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 93)&lt;br /&gt;
00:1f.0 ISA bridge: Intel Corporation ICH9M-E LPC Interface Controller (rev 03)&lt;br /&gt;
00:1f.2 SATA controller: Intel Corporation ICH9M/M-E SATA AHCI Controller (rev 03)&lt;br /&gt;
00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 03)&lt;br /&gt;
03:00.0 Network controller: Intel Corporation PRO/Wireless 5100 AGN [Shiloh] Network Connection&lt;br /&gt;
15:00.0 CardBus bridge: Ricoh Co Ltd RL5c476 II (rev ba)&lt;br /&gt;
15:00.1 FireWire (IEEE 1394): Ricoh Co Ltd R5C832 IEEE 1394 Controller (rev 04)&lt;br /&gt;
15:00.2 SD Host controller: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev 21)&lt;br /&gt;
15:00.3 System peripheral: Ricoh Co Ltd R5C843 MMC Host Controller (rev ff)&lt;br /&gt;
15:00.4 System peripheral: Ricoh Co Ltd R5C592 Memory Stick Bus Host Adapter (rev 11)&lt;br /&gt;
15:00.5 System peripheral: Ricoh Co Ltd xD-Picture Card Controller (rev 11)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat /proc/cpuinfo &lt;br /&gt;
processor       : 0                          &lt;br /&gt;
vendor_id       : GenuineIntel               &lt;br /&gt;
cpu family      : 6                          &lt;br /&gt;
model           : 15                         &lt;br /&gt;
model name      : Intel(R) Core(TM)2 Duo CPU     T5870  @ 2.00GHz&lt;br /&gt;
stepping        : 13                                             &lt;br /&gt;
cpu MHz         : 800.000                                        &lt;br /&gt;
cache size      : 2048 KB                                        &lt;br /&gt;
physical id     : 0                                              &lt;br /&gt;
siblings        : 2                                              &lt;br /&gt;
core id         : 0                                              &lt;br /&gt;
cpu cores       : 2                                              &lt;br /&gt;
apicid          : 0                                              &lt;br /&gt;
initial apicid  : 0                                              &lt;br /&gt;
fpu             : yes                                            &lt;br /&gt;
fpu_exception   : yes                                            &lt;br /&gt;
cpuid level     : 10                                             &lt;br /&gt;
wp              : yes                                            &lt;br /&gt;
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm ida                                                  &lt;br /&gt;
bogomips        : 3991.89                                                     &lt;br /&gt;
clflush size    : 64                                                          &lt;br /&gt;
cache_alignment : 64                                                          &lt;br /&gt;
address sizes   : 36 bits physical, 48 bits virtual                           &lt;br /&gt;
power management:                                                             &lt;br /&gt;
&lt;br /&gt;
processor       : 1&lt;br /&gt;
vendor_id       : GenuineIntel&lt;br /&gt;
cpu family      : 6           &lt;br /&gt;
model           : 15          &lt;br /&gt;
model name      : Intel(R) Core(TM)2 Duo CPU     T5870  @ 2.00GHz&lt;br /&gt;
stepping        : 13&lt;br /&gt;
cpu MHz         : 800.000&lt;br /&gt;
cache size      : 2048 KB&lt;br /&gt;
physical id     : 0&lt;br /&gt;
siblings        : 2&lt;br /&gt;
core id         : 1&lt;br /&gt;
cpu cores       : 2&lt;br /&gt;
apicid          : 1&lt;br /&gt;
initial apicid  : 1&lt;br /&gt;
fpu             : yes&lt;br /&gt;
fpu_exception   : yes&lt;br /&gt;
cpuid level     : 10&lt;br /&gt;
wp              : yes&lt;br /&gt;
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm ida&lt;br /&gt;
bogomips        : 3991.24&lt;br /&gt;
clflush size    : 64&lt;br /&gt;
cache_alignment : 64&lt;br /&gt;
address sizes   : 36 bits physical, 48 bits virtual&lt;br /&gt;
power management:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vogo</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Talk:How_to_hotswap_Ultrabay_devices&amp;diff=43445</id>
		<title>Talk:How to hotswap Ultrabay devices</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Talk:How_to_hotswap_Ultrabay_devices&amp;diff=43445"/>
		<updated>2009-06-10T18:36:27Z</updated>

		<summary type="html">&lt;p&gt;Vogo: little rework ultrabay.sh&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=HAL script=&lt;br /&gt;
&lt;br /&gt;
If the script works, your lshal output should contain something similar to this. In this case the Ultrabay device was a second HDD (/dev/sdb).&lt;br /&gt;
&lt;br /&gt;
Note that in the example, storage.hotpluggable = true while before it was false, so the script worked.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
udi = '/org/freedesktop/Hal/devices/storage_serial_SATA_HTS726060M9AT00_MRH453M4H11ARB'&lt;br /&gt;
  block.device = '/dev/sdb'  (string)&lt;br /&gt;
  block.is_volume = false  (bool)&lt;br /&gt;
  block.major = 8  (0x8)  (int)&lt;br /&gt;
  block.minor = 16  (0x10)  (int)&lt;br /&gt;
  block.storage_device = '/org/freedesktop/Hal/devices/storage_serial_SATA_HTS726060M9AT00_MRH453M4H11ARB'  (string)&lt;br /&gt;
  info.capabilities = {'storage', 'block'} (string list)&lt;br /&gt;
  info.category = 'storage'  (string)&lt;br /&gt;
  info.parent = '/org/freedesktop/Hal/devices/pci_8086_24ca_scsi_host_0_scsi_device_lun0'  (string)&lt;br /&gt;
  info.product = 'HTS726060M9AT00'  (string)&lt;br /&gt;
  info.udi = '/org/freedesktop/Hal/devices/storage_serial_SATA_HTS726060M9AT00_MRH453M4H11ARB'  (string)&lt;br /&gt;
  info.vendor = 'ATA'  (string)&lt;br /&gt;
  linux.hotplug_type = 3  (0x3)  (int)&lt;br /&gt;
  linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1f.1/host1/target1:0:0/1:0:0:0/block/sdb'  (string)&lt;br /&gt;
  storage.automount_enabled_hint = true  (bool)&lt;br /&gt;
  storage.bus = 'pci'  (string)&lt;br /&gt;
  storage.drive_type = 'disk'  (string)&lt;br /&gt;
  storage.firmware_version = 'MH4O'  (string)&lt;br /&gt;
  storage.hotpluggable = true  (bool)&lt;br /&gt;
  storage.lun = 0  (0x0)  (int)&lt;br /&gt;
  storage.media_check_enabled = false  (bool)&lt;br /&gt;
  storage.model = 'HTS726060M9AT00'  (string)&lt;br /&gt;
  storage.no_partitions_hint = false  (bool)&lt;br /&gt;
  storage.originating_device = '/org/freedesktop/Hal/devices/computer'  (string)&lt;br /&gt;
  storage.partitioning_scheme = 'mbr'  (string)&lt;br /&gt;
  storage.removable = false  (bool)&lt;br /&gt;
  storage.removable.media_available = true  (bool)&lt;br /&gt;
  storage.removable.media_size = 60011642880  (0xdf8f90000)  (uint64)&lt;br /&gt;
  storage.requires_eject = false  (bool)&lt;br /&gt;
  storage.serial = 'SATA_HTS726060M9AT00_MRH453M4H11ARB'  (string)&lt;br /&gt;
  storage.size = 60011642880  (0xdf8f90000)  (uint64)&lt;br /&gt;
  storage.vendor = 'ATA'  (string)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
|+ Known South Bridge PCI IDs&lt;br /&gt;
! ID !! ThinkPad model !! South Bridge chip (for Ultrabay) !! parent device (host_0, lun0 = 2nd ATA controller, master device)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_7111 || T20, T21, T22, X20, X21 || Intel 82371AB/EB/MB PIIX4 IDE || /org/freedesktop/Hal/devices/pci_8086_7111_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_248a || T23, T30, X22, X23, X24, X30|| Intel 82801CAM IDE U100 (rev 2) || /org/freedesktop/Hal/devices/pci_8086_248a_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_24ca || R50, R51, T40, T40p, T41, T41p, T42, T42p, X31, X32, X40 || Intel 82801DBM (ICH4-M) || /org/freedesktop/Hal/devices/pci_8086_24ca_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2653 || R52, T43, T43p, X41, Z60m, Z60t  || Intel 82801FBM (ICH6-M) || /org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27c4 || R60, X60 || Intel 82801GBM (ICH7 Family) || /org/freedesktop/Hal/devices/pci_8086_27c4_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27df || T60, T60p, Z61m, Z61t, Z61p || Intel 82801GBM/GHM (ICH7 Family) || /org/freedesktop/Hal/devices/pci_8086_27df_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2850 || R61, T61, T61p, X300 || Intel 82801H (ICH8 Family) || /org/freedesktop/Hal/devices/pci_8086_2850_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2929 || R400, R500, T400, T500, W500, W700, X200, X301 || Intel 82801I ICH9 Family || /org/freedesktop/Hal/devices/pci_8086_2929_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|}&lt;br /&gt;
==lshal output==&lt;br /&gt;
Please place your lshal output here if you had problems, or if you have a A or W series ThinkPad&lt;br /&gt;
&lt;br /&gt;
= bash script for hotswapping UltraBay =&lt;br /&gt;
&lt;br /&gt;
Here is my script for hotswapping ultrabay, is more complex, supports swap partition on drive in ultrabay and more :)&lt;br /&gt;
&lt;br /&gt;
{{HELP|Please test on difrent models}}&lt;br /&gt;
&lt;br /&gt;
ultrabay.sh&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
SCSI_DEVICE=&amp;quot;&amp;quot;&lt;br /&gt;
FORCE_SLEEP=&amp;quot;1&amp;quot;&lt;br /&gt;
QUIET=&amp;quot;0&amp;quot;&lt;br /&gt;
SYSLOG=&amp;quot;0&amp;quot;&lt;br /&gt;
BEEP=&amp;quot;0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Message()&lt;br /&gt;
{&lt;br /&gt;
    MESSAGE=&amp;quot;${0/*\//}: $*&amp;quot;&lt;br /&gt;
    if [ &amp;quot;$QUIET&amp;quot; = &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
	echo &amp;quot;$MESSAGE&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if [ &amp;quot;$SYSLOG&amp;quot; != &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
	/usr/bin/logger &amp;quot;$MESSAGE&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Exit()&lt;br /&gt;
{&lt;br /&gt;
    case &amp;quot;$1&amp;quot; in&lt;br /&gt;
	&amp;quot;fail&amp;quot;)&lt;br /&gt;
	    [ $BEEP != &amp;quot;0&amp;quot; ] &amp;amp;&amp;amp; echo 2 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
	    exit 1&lt;br /&gt;
	;;&lt;br /&gt;
	&amp;quot;success&amp;quot;)&lt;br /&gt;
	    [ $BEEP != &amp;quot;0&amp;quot; ] &amp;amp;&amp;amp; echo 12 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
	    exit 0&lt;br /&gt;
	;;&lt;br /&gt;
    esac&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Usage()&lt;br /&gt;
{&lt;br /&gt;
    echo &amp;quot;usage: ${0/*\/} [options]&amp;quot;&lt;br /&gt;
    echo &amp;quot;options:&amp;quot;&lt;br /&gt;
    echo &amp;quot;    -d &amp;lt;path&amp;gt;  SCSI device (required)&amp;quot;&lt;br /&gt;
    echo &amp;quot;    -s         Ignore fail when putting drive to sleep&amp;quot;&lt;br /&gt;
    echo &amp;quot;    -q         No messages&amp;quot;&lt;br /&gt;
    echo &amp;quot;    -l         Use syslog for messages (-q has no efect)&amp;quot;&lt;br /&gt;
    echo &amp;quot;    -b         Use beeb for notification (-q has no efect)&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Block2Device()&lt;br /&gt;
{&lt;br /&gt;
    /bin/readlink -e &amp;quot;/dev/block/$1&amp;quot;	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
IsSwap()&lt;br /&gt;
{&lt;br /&gt;
    /sbin/swapon -s | grep -q -e &amp;quot;^$1\b&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
IsMounted()&lt;br /&gt;
{&lt;br /&gt;
    mount | grep -q -e &amp;quot;^$DEVICE\b&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ReleaseDevice()&lt;br /&gt;
{&lt;br /&gt;
    if IsMounted &amp;quot;$1&amp;quot;; then&lt;br /&gt;
	if ! umount &amp;quot;$1&amp;quot; &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
	    Message &amp;quot;cannot umount $DEVICE&amp;quot;&lt;br /&gt;
	    false&lt;br /&gt;
	fi&lt;br /&gt;
    elif IsSwap &amp;quot;$1&amp;quot;; then&lt;br /&gt;
	if ! /sbin/swapoff &amp;quot;$1&amp;quot; &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
	    Message &amp;quot;cannot disable swapping on $DEVICE&amp;quot;&lt;br /&gt;
	    false&lt;br /&gt;
	fi&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SleepDrive()&lt;br /&gt;
{&lt;br /&gt;
    if ! /sbin/hdparm -Y &amp;quot;$1&amp;quot; &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
        Message &amp;quot;cannot put drive to sleep&amp;quot;&lt;br /&gt;
        if [ $FORCE_SLEEP = &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
            true&lt;br /&gt;
        else&lt;br /&gt;
            false&lt;br /&gt;
        fi&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
DeleteScsiDevice()&lt;br /&gt;
{&lt;br /&gt;
    if ! { echo 1 &amp;gt; $SCSI_DEVICE/delete; } &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
	Message &amp;quot;cannot delete device&amp;quot;&lt;br /&gt;
	false&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
GetDock()&lt;br /&gt;
{&lt;br /&gt;
    grep &amp;quot;$1&amp;quot; /sys/devices/platform/dock.*/type | sed -e s%/type:.*%%&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
IsDocked()&lt;br /&gt;
{&lt;br /&gt;
    [ $(cat $(GetDock &amp;quot;$1&amp;quot;)/docked) -ne 0 ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Undock()&lt;br /&gt;
{&lt;br /&gt;
    { echo 0 &amp;gt; $(GetDock &amp;quot;$1&amp;quot;)/undock; } &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    if IsDocked &amp;quot;$1&amp;quot;; then&lt;br /&gt;
	Message &amp;quot;cannot undock UltraBay&amp;quot;&lt;br /&gt;
	false&lt;br /&gt;
    else&lt;br /&gt;
	Message &amp;quot;UltraBay undocked&amp;quot;&lt;br /&gt;
	true&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
while getopts &amp;quot;d:qlsb&amp;quot; OPTION; do&lt;br /&gt;
    case $OPTION in&lt;br /&gt;
	d)&lt;br /&gt;
	    SCSI_DEVICE=&amp;quot;$OPTARG&amp;quot;&lt;br /&gt;
	;;&lt;br /&gt;
	s)&lt;br /&gt;
	    FORCE_SLEEP=&amp;quot;0&amp;quot;&lt;br /&gt;
	;;&lt;br /&gt;
	q)&lt;br /&gt;
	    QUIET=&amp;quot;1&amp;quot;&lt;br /&gt;
	;;&lt;br /&gt;
	l)&lt;br /&gt;
	    SYSLOG=&amp;quot;1&amp;quot;&lt;br /&gt;
	;;&lt;br /&gt;
	b)&lt;br /&gt;
	    BEEP=&amp;quot;1&amp;quot;&lt;br /&gt;
	;;&lt;br /&gt;
        ?)&lt;br /&gt;
	    Usage&lt;br /&gt;
        ;;&lt;br /&gt;
      esac&lt;br /&gt;
done&lt;br /&gt;
 &lt;br /&gt;
if [ -d &amp;quot;$SCSI_DEVICE&amp;quot; ] &amp;amp;&amp;amp; IsDocked &amp;quot;ata_bay&amp;quot;; then&lt;br /&gt;
    sync&lt;br /&gt;
    for BLOCK in $(/bin/cat $SCSI_DEVICE/block/*/*/dev $SCSI_DEVICE/block/*/dev 2&amp;gt; /dev/null); do&lt;br /&gt;
	DEVICE=$(Block2Device &amp;quot;$BLOCK&amp;quot;) &amp;amp;&amp;amp; ReleaseDevice &amp;quot;$DEVICE&amp;quot; || FAIL=&amp;quot;1&amp;quot;&lt;br /&gt;
    done&lt;br /&gt;
    [ $FAIL ] &amp;amp;&amp;amp; Exit &amp;quot;fail&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    sync&lt;br /&gt;
    BLOCK=$(cat $SCSI_DEVICE/block/*/dev 2&amp;gt; /dev/null) &amp;amp;&amp;amp;&lt;br /&gt;
    DEVICE=$(Block2Device &amp;quot;$BLOCK&amp;quot;) &amp;amp;&amp;amp; SleepDrive &amp;quot;$DEVICE&amp;quot; || Exit &amp;quot;fail&amp;quot;&lt;br /&gt;
    sleep 0.5&lt;br /&gt;
    DeleteScsiDevice &amp;quot;$SCSI_DEVICE&amp;quot; || Exit &amp;quot;fail&amp;quot;&lt;br /&gt;
    sleep 4&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -d $SCSI_DEVICE ] &amp;amp;&amp;amp; $(IsDocked &amp;quot;ata_bay&amp;quot;); then&lt;br /&gt;
    if Undock &amp;quot;ata_bay&amp;quot;; then&lt;br /&gt;
	Exit &amp;quot;success&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
	Exit &amp;quot;fail&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
Message &amp;quot;UltraBay is already undock&amp;quot;&lt;br /&gt;
Exit &amp;quot;success&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Supported models: {{R400}} - linux-2.6.29&lt;br /&gt;
==comments==&lt;br /&gt;
Interesting, especially the support for swap partitions. but I have two comments, first your calling your script hotswap.sh and then having udev call ultrabay.sh?&lt;br /&gt;
&lt;br /&gt;
Then your hard coding the location of the Ultrabay device. This is not guarenteed to be correct, although it will be in most cases. In particular the A and W-series machines. A-series had support for more then one Ultrabay device, while W-series has support for more then one internal HDD in addition to the Ultrabay device, so the Ultrabay location will shift. That is why the Ultrabay Eject script on the main page gets the eject device information from udev.&lt;br /&gt;
&lt;br /&gt;
==comments==&lt;br /&gt;
Hi, thanks, I fix name of script :)&lt;br /&gt;
Udev calling ultrabay.sh with option -d, so it remove correct device, if you want remove device manualy, is default device useful. But option may be required...&lt;br /&gt;
&lt;br /&gt;
==more comments ;)==&lt;br /&gt;
You might also have a look at the script on the main page, it has a few extra abilities, such as logging to syslog, beeping and putting up popups on the desktop.&lt;br /&gt;
&lt;br /&gt;
Logging to syslog is simple, just call 'logger' with what you want to log. quite should have no effect on this.&lt;br /&gt;
&lt;br /&gt;
For beeps, similar to what windows does you can echo different values to /proc/acpi/ibm/beep, but it only works if sound is not muted. Unfortunately doing so does seem to generate some annoying messages in syslog.&lt;br /&gt;
&lt;br /&gt;
Lastly you can use notify-send to put up messages on the desktop, but before you can do so you have to do an export DISPLADISPLAY=0:0 /usr/bin/knotify4 --passive-popup : Adresář nebo soubor neexistujeY=:0.0&lt;br /&gt;
&lt;br /&gt;
==Syslog and beep==&lt;br /&gt;
OK, scrip now support syslog and beeping :).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Still missing notify-send ;)&lt;br /&gt;
&lt;br /&gt;
I am also thinking that it would be useful in the case of a busy filesystem to tell the user to run something like fuser -mv /dev/sr0&amp;lt;br&amp;gt;&lt;br /&gt;
Or perhaps we should run it ourselves automatically and just tell the user what is the cause of the busy filesystem.&amp;lt;br&amp;gt;&lt;br /&gt;
--[[User:Tonko|Tonko]] 21:21, 8 June 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Vogo</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Talk:How_to_hotswap_Ultrabay_devices&amp;diff=43418</id>
		<title>Talk:How to hotswap Ultrabay devices</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Talk:How_to_hotswap_Ultrabay_devices&amp;diff=43418"/>
		<updated>2009-06-08T21:02:39Z</updated>

		<summary type="html">&lt;p&gt;Vogo: remove twice prefixes for logger&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=HAL script=&lt;br /&gt;
&lt;br /&gt;
If the script works, your lshal output should contain something similar to this. In this case the Ultrabay device was a second HDD (/dev/sdb).&lt;br /&gt;
&lt;br /&gt;
Note that in the example, storage.hotpluggable = true while before it was false, so the script worked.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
udi = '/org/freedesktop/Hal/devices/storage_serial_SATA_HTS726060M9AT00_MRH453M4H11ARB'&lt;br /&gt;
  block.device = '/dev/sdb'  (string)&lt;br /&gt;
  block.is_volume = false  (bool)&lt;br /&gt;
  block.major = 8  (0x8)  (int)&lt;br /&gt;
  block.minor = 16  (0x10)  (int)&lt;br /&gt;
  block.storage_device = '/org/freedesktop/Hal/devices/storage_serial_SATA_HTS726060M9AT00_MRH453M4H11ARB'  (string)&lt;br /&gt;
  info.capabilities = {'storage', 'block'} (string list)&lt;br /&gt;
  info.category = 'storage'  (string)&lt;br /&gt;
  info.parent = '/org/freedesktop/Hal/devices/pci_8086_24ca_scsi_host_0_scsi_device_lun0'  (string)&lt;br /&gt;
  info.product = 'HTS726060M9AT00'  (string)&lt;br /&gt;
  info.udi = '/org/freedesktop/Hal/devices/storage_serial_SATA_HTS726060M9AT00_MRH453M4H11ARB'  (string)&lt;br /&gt;
  info.vendor = 'ATA'  (string)&lt;br /&gt;
  linux.hotplug_type = 3  (0x3)  (int)&lt;br /&gt;
  linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1f.1/host1/target1:0:0/1:0:0:0/block/sdb'  (string)&lt;br /&gt;
  storage.automount_enabled_hint = true  (bool)&lt;br /&gt;
  storage.bus = 'pci'  (string)&lt;br /&gt;
  storage.drive_type = 'disk'  (string)&lt;br /&gt;
  storage.firmware_version = 'MH4O'  (string)&lt;br /&gt;
  storage.hotpluggable = true  (bool)&lt;br /&gt;
  storage.lun = 0  (0x0)  (int)&lt;br /&gt;
  storage.media_check_enabled = false  (bool)&lt;br /&gt;
  storage.model = 'HTS726060M9AT00'  (string)&lt;br /&gt;
  storage.no_partitions_hint = false  (bool)&lt;br /&gt;
  storage.originating_device = '/org/freedesktop/Hal/devices/computer'  (string)&lt;br /&gt;
  storage.partitioning_scheme = 'mbr'  (string)&lt;br /&gt;
  storage.removable = false  (bool)&lt;br /&gt;
  storage.removable.media_available = true  (bool)&lt;br /&gt;
  storage.removable.media_size = 60011642880  (0xdf8f90000)  (uint64)&lt;br /&gt;
  storage.requires_eject = false  (bool)&lt;br /&gt;
  storage.serial = 'SATA_HTS726060M9AT00_MRH453M4H11ARB'  (string)&lt;br /&gt;
  storage.size = 60011642880  (0xdf8f90000)  (uint64)&lt;br /&gt;
  storage.vendor = 'ATA'  (string)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
|+ Known South Bridge PCI IDs&lt;br /&gt;
! ID !! ThinkPad model !! South Bridge chip (for Ultrabay) !! parent device (host_0, lun0 = 2nd ATA controller, master device)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_7111 || T20, T21, T22, X20, X21 || Intel 82371AB/EB/MB PIIX4 IDE || /org/freedesktop/Hal/devices/pci_8086_7111_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_248a || T23, T30, X22, X23, X24, X30|| Intel 82801CAM IDE U100 (rev 2) || /org/freedesktop/Hal/devices/pci_8086_248a_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_24ca || R50, R51, T40, T40p, T41, T41p, T42, T42p, X31, X32, X40 || Intel 82801DBM (ICH4-M) || /org/freedesktop/Hal/devices/pci_8086_24ca_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2653 || R52, T43, T43p, X41, Z60m, Z60t  || Intel 82801FBM (ICH6-M) || /org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27c4 || R60, X60 || Intel 82801GBM (ICH7 Family) || /org/freedesktop/Hal/devices/pci_8086_27c4_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27df || T60, T60p, Z61m, Z61t, Z61p || Intel 82801GBM/GHM (ICH7 Family) || /org/freedesktop/Hal/devices/pci_8086_27df_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2850 || R61, T61, T61p, X300 || Intel 82801H (ICH8 Family) || /org/freedesktop/Hal/devices/pci_8086_2850_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2929 || R400, R500, T400, T500, W500, W700, X200, X301 || Intel 82801I ICH9 Family || /org/freedesktop/Hal/devices/pci_8086_2929_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|}&lt;br /&gt;
==lshal output==&lt;br /&gt;
Please place your lshal output here if you had problems, or if you have a A or W series ThinkPad&lt;br /&gt;
&lt;br /&gt;
= bash script for hotswapping UltraBay =&lt;br /&gt;
&lt;br /&gt;
Here is my script for hotswapping ultrabay, is more complex, supports swap partition on drive in ultrabay and more :)&lt;br /&gt;
&lt;br /&gt;
{{HELP|Please test on difrent models}}&lt;br /&gt;
&lt;br /&gt;
ultrabay.sh&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
FORCE_SLEEP=&amp;quot;1&amp;quot;&lt;br /&gt;
QUIET=&amp;quot;0&amp;quot;&lt;br /&gt;
SYSLOG=&amp;quot;0&amp;quot;&lt;br /&gt;
BEEP=&amp;quot;0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Message()&lt;br /&gt;
{&lt;br /&gt;
    MESSAGE=&amp;quot;${0/*\//}: $*&amp;quot;&lt;br /&gt;
    if [ $QUIET = &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
	echo &amp;quot;$MESSAGE&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if [ $SYSLOG != &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
	/usr/bin/logger &amp;quot;$MESSAGE&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Exit()&lt;br /&gt;
{&lt;br /&gt;
    case &amp;quot;$1&amp;quot; in&lt;br /&gt;
	&amp;quot;fail&amp;quot;)&lt;br /&gt;
	    [ $BEEP != &amp;quot;0&amp;quot; ] &amp;amp;&amp;amp; echo 2 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
	    exit 1&lt;br /&gt;
	;;&lt;br /&gt;
	&amp;quot;success&amp;quot;)&lt;br /&gt;
	    [ $BEEP != &amp;quot;0&amp;quot; ] &amp;amp;&amp;amp; echo 12 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
	    exit 0&lt;br /&gt;
	;;&lt;br /&gt;
    esac&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Usage()&lt;br /&gt;
{&lt;br /&gt;
    echo &amp;quot;usage: ${0/*\/} [options]&amp;quot;&lt;br /&gt;
    echo &amp;quot;options:&amp;quot;&lt;br /&gt;
    echo &amp;quot;    -q --quiet           No messages&amp;quot;&lt;br /&gt;
    echo &amp;quot;    -l --syslog          Use syslog for messages (--quiet has no effect)&amp;quot;&lt;br /&gt;
    echo &amp;quot;    -b --beep            Use beep for notification&amp;quot;&lt;br /&gt;
    echo &amp;quot;    -n --no-force-sleep  Ignore fail when putting drive to sleep&amp;quot;&lt;br /&gt;
    echo &amp;quot;    -d --device &amp;lt;path&amp;gt;   SCSI device (required)&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Block2Device()&lt;br /&gt;
{&lt;br /&gt;
    /bin/readlink -e &amp;quot;/dev/block/$1&amp;quot;	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
IsSwap()&lt;br /&gt;
{&lt;br /&gt;
    /sbin/swapon -s | grep -q -e &amp;quot;^$1\b&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
IsMounted()&lt;br /&gt;
{&lt;br /&gt;
    mount | grep -q -e &amp;quot;^$DEVICE\b&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ReleaseDevice()&lt;br /&gt;
{&lt;br /&gt;
    if IsMounted &amp;quot;$1&amp;quot;; then&lt;br /&gt;
	if ! umount &amp;quot;$1&amp;quot; &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
	    Message &amp;quot;cannot umount $DEVICE&amp;quot;&lt;br /&gt;
	    false&lt;br /&gt;
	fi&lt;br /&gt;
    elif IsSwap &amp;quot;$1&amp;quot;; then&lt;br /&gt;
	if ! /sbin/swapoff &amp;quot;$1&amp;quot; &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
	    Message &amp;quot;cannot disable swapping on $DEVICE&amp;quot;&lt;br /&gt;
	    false&lt;br /&gt;
	fi&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SleepDrive()&lt;br /&gt;
{&lt;br /&gt;
    if ! /sbin/hdparm -Y &amp;quot;$1&amp;quot; &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
	Message &amp;quot;cannot put drive to sleep&amp;quot;&lt;br /&gt;
	if [ $FORCE_SLEEP = &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
	    true&lt;br /&gt;
	else&lt;br /&gt;
	    false&lt;br /&gt;
	fi&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
DeleteScsiDevice()&lt;br /&gt;
{&lt;br /&gt;
    if ! { echo 1 &amp;gt; $SCSI_DEVICE/delete; } &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
	Message &amp;quot;cannot delete device&amp;quot;&lt;br /&gt;
	false&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
GetDock()&lt;br /&gt;
{&lt;br /&gt;
    grep &amp;quot;$1&amp;quot; /sys/devices/platform/dock.*/type | sed -e s%/type:.*%%&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
IsDocked()&lt;br /&gt;
{&lt;br /&gt;
    [ $(cat $(GetDock &amp;quot;$1&amp;quot;)/docked) -ne 0 ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Undock()&lt;br /&gt;
{&lt;br /&gt;
    { echo 0 &amp;gt; $(GetDock &amp;quot;$1&amp;quot;)/undock; } &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    if IsDocked &amp;quot;$1&amp;quot;; then&lt;br /&gt;
	Message &amp;quot;cannot undock UltraBay&amp;quot;&lt;br /&gt;
	false&lt;br /&gt;
    else&lt;br /&gt;
	Message &amp;quot;UltraBay undocked&amp;quot;&lt;br /&gt;
	true&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SCSI_DEVICE=&amp;quot;&amp;quot;&lt;br /&gt;
for PARAM in $*; do&lt;br /&gt;
    if [ &amp;quot;$PARAM_DEVICE&amp;quot; ]; then&lt;br /&gt;
	SCSI_DEVICE=&amp;quot;$PARAM&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
	case &amp;quot;$PARAM&amp;quot; in&lt;br /&gt;
    	    &amp;quot;--quiet&amp;quot;|&amp;quot;-q&amp;quot;)&lt;br /&gt;
		QUIET=&amp;quot;1&amp;quot;&lt;br /&gt;
	    ;;&lt;br /&gt;
	    &amp;quot;--no-force-sleep&amp;quot;|&amp;quot;-n&amp;quot;)&lt;br /&gt;
	        FORCE-SLEEP=&amp;quot;0&amp;quot;&lt;br /&gt;
	    ;;&lt;br /&gt;
	    &amp;quot;--device&amp;quot;|&amp;quot;-d&amp;quot;)&lt;br /&gt;
	        PARAM_DEVICE=&amp;quot;1&amp;quot;&lt;br /&gt;
	    ;;&lt;br /&gt;
	    &amp;quot;--syslog&amp;quot;|&amp;quot;-l&amp;quot;)&lt;br /&gt;
	        SYSLOG=&amp;quot;1&amp;quot;&lt;br /&gt;
	    ;;&lt;br /&gt;
	    &amp;quot;--beep&amp;quot;|&amp;quot;-b&amp;quot;)&lt;br /&gt;
		BEEP=&amp;quot;1&amp;quot;&lt;br /&gt;
	    ;;&lt;br /&gt;
	    *)&lt;br /&gt;
		Usage&lt;br /&gt;
	    ;;&lt;br /&gt;
	esac&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
[ -z &amp;quot;$SCSI_DEVICE&amp;quot; ] &amp;amp;&amp;amp; Usage&lt;br /&gt;
 &lt;br /&gt;
if [ -d &amp;quot;$SCSI_DEVICE&amp;quot; ] &amp;amp;&amp;amp; IsDocked &amp;quot;ata_bay&amp;quot;; then&lt;br /&gt;
    sync&lt;br /&gt;
    for BLOCK in $(/bin/cat $SCSI_DEVICE/block/*/*/dev $SCSI_DEVICE/block/*/dev 2&amp;gt; /dev/null); do&lt;br /&gt;
	DEVICE=$(Block2Device &amp;quot;$BLOCK&amp;quot;) &amp;amp;&amp;amp; ReleaseDevice &amp;quot;$DEVICE&amp;quot; || FAIL=&amp;quot;1&amp;quot;&lt;br /&gt;
    done&lt;br /&gt;
    [ $FAIL ] &amp;amp;&amp;amp; Exit &amp;quot;fail&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    sync&lt;br /&gt;
    BLOCK=$(cat $SCSI_DEVICE/block/*/dev 2&amp;gt; /dev/null) &amp;amp;&amp;amp;&lt;br /&gt;
    DEVICE=$(Block2Device &amp;quot;$BLOCK&amp;quot;) &amp;amp;&amp;amp; SleepDrive &amp;quot;$DEVICE&amp;quot; || Exit &amp;quot;fail&amp;quot; &lt;br /&gt;
    sleep 3&lt;br /&gt;
    DeleteScsiDevice &amp;quot;$SCSI_DEVICE&amp;quot; || Exit &amp;quot;fail&amp;quot;&lt;br /&gt;
    sleep 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -d $SCSI_DEVICE ] &amp;amp;&amp;amp; $(IsDocked &amp;quot;ata_bay&amp;quot;); then&lt;br /&gt;
    if Undock &amp;quot;ata_bay&amp;quot;; then&lt;br /&gt;
	Exit &amp;quot;success&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
	Exit &amp;quot;fail&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
Message &amp;quot;UltraBay is already undock&amp;quot;&lt;br /&gt;
Exit &amp;quot;success&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
UDEV rule&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ENV{BAY_EVENT}==&amp;quot;3&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;scsi&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay.sh -q -l -b -d /sys$DEVPATH&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Supported models: {{R400}} - linux-2.6.29&lt;br /&gt;
==comments==&lt;br /&gt;
Interesting, especially the support for swap partitions. but I have two comments, first your calling your script hotswap.sh and then having udev call ultrabay.sh?&lt;br /&gt;
&lt;br /&gt;
Then your hard coding the location of the Ultrabay device. This is not guarenteed to be correct, although it will be in most cases. In particular the A and W-series machines. A-series had support for more then one Ultrabay device, while W-series has support for more then one internal HDD in addition to the Ultrabay device, so the Ultrabay location will shift. That is why the Ultrabay Eject script on the main page gets the eject device information from udev.&lt;br /&gt;
&lt;br /&gt;
==comments==&lt;br /&gt;
Hi, thanks, I fix name of script :)&lt;br /&gt;
Udev calling ultrabay.sh with option -d, so it remove correct device, if you want remove device manualy, is default device useful. But option may be required...&lt;br /&gt;
&lt;br /&gt;
==more comments ;)==&lt;br /&gt;
You might also have a look at the script on the main page, it has a few extra abilities, such as logging to syslog, beeping and putting up popups on the desktop.&lt;br /&gt;
&lt;br /&gt;
Logging to syslog is simple, just call 'logger' with what you want to log. quite should have no effect on this.&lt;br /&gt;
&lt;br /&gt;
For beeps, similar to what windows does you can echo different values to /proc/acpi/ibm/beep, but it only works if sound is not muted. Unfortunately doing so does seem to generate some annoying messages in syslog.&lt;br /&gt;
&lt;br /&gt;
Lastly you can use notify-send to put up messages on the desktop, but before you can do so you have to do an export DISPLAY=:0.0&lt;br /&gt;
&lt;br /&gt;
==Syslog and beep==&lt;br /&gt;
OK, scrip now support syslog and beeping :).&lt;/div&gt;</summary>
		<author><name>Vogo</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Talk:How_to_hotswap_Ultrabay_devices&amp;diff=43416</id>
		<title>Talk:How to hotswap Ultrabay devices</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Talk:How_to_hotswap_Ultrabay_devices&amp;diff=43416"/>
		<updated>2009-06-08T18:51:24Z</updated>

		<summary type="html">&lt;p&gt;Vogo: /* bash script for hotswapping UltraBay */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=HAL script=&lt;br /&gt;
&lt;br /&gt;
If the script works, your lshal output should contain something similar to this. In this case the Ultrabay device was a second HDD (/dev/sdb).&lt;br /&gt;
&lt;br /&gt;
Note that in the example, storage.hotpluggable = true while before it was false, so the script worked.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
udi = '/org/freedesktop/Hal/devices/storage_serial_SATA_HTS726060M9AT00_MRH453M4H11ARB'&lt;br /&gt;
  block.device = '/dev/sdb'  (string)&lt;br /&gt;
  block.is_volume = false  (bool)&lt;br /&gt;
  block.major = 8  (0x8)  (int)&lt;br /&gt;
  block.minor = 16  (0x10)  (int)&lt;br /&gt;
  block.storage_device = '/org/freedesktop/Hal/devices/storage_serial_SATA_HTS726060M9AT00_MRH453M4H11ARB'  (string)&lt;br /&gt;
  info.capabilities = {'storage', 'block'} (string list)&lt;br /&gt;
  info.category = 'storage'  (string)&lt;br /&gt;
  info.parent = '/org/freedesktop/Hal/devices/pci_8086_24ca_scsi_host_0_scsi_device_lun0'  (string)&lt;br /&gt;
  info.product = 'HTS726060M9AT00'  (string)&lt;br /&gt;
  info.udi = '/org/freedesktop/Hal/devices/storage_serial_SATA_HTS726060M9AT00_MRH453M4H11ARB'  (string)&lt;br /&gt;
  info.vendor = 'ATA'  (string)&lt;br /&gt;
  linux.hotplug_type = 3  (0x3)  (int)&lt;br /&gt;
  linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1f.1/host1/target1:0:0/1:0:0:0/block/sdb'  (string)&lt;br /&gt;
  storage.automount_enabled_hint = true  (bool)&lt;br /&gt;
  storage.bus = 'pci'  (string)&lt;br /&gt;
  storage.drive_type = 'disk'  (string)&lt;br /&gt;
  storage.firmware_version = 'MH4O'  (string)&lt;br /&gt;
  storage.hotpluggable = true  (bool)&lt;br /&gt;
  storage.lun = 0  (0x0)  (int)&lt;br /&gt;
  storage.media_check_enabled = false  (bool)&lt;br /&gt;
  storage.model = 'HTS726060M9AT00'  (string)&lt;br /&gt;
  storage.no_partitions_hint = false  (bool)&lt;br /&gt;
  storage.originating_device = '/org/freedesktop/Hal/devices/computer'  (string)&lt;br /&gt;
  storage.partitioning_scheme = 'mbr'  (string)&lt;br /&gt;
  storage.removable = false  (bool)&lt;br /&gt;
  storage.removable.media_available = true  (bool)&lt;br /&gt;
  storage.removable.media_size = 60011642880  (0xdf8f90000)  (uint64)&lt;br /&gt;
  storage.requires_eject = false  (bool)&lt;br /&gt;
  storage.serial = 'SATA_HTS726060M9AT00_MRH453M4H11ARB'  (string)&lt;br /&gt;
  storage.size = 60011642880  (0xdf8f90000)  (uint64)&lt;br /&gt;
  storage.vendor = 'ATA'  (string)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
|+ Known South Bridge PCI IDs&lt;br /&gt;
! ID !! ThinkPad model !! South Bridge chip (for Ultrabay) !! parent device (host_0, lun0 = 2nd ATA controller, master device)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_7111 || T20, T21, T22, X20, X21 || Intel 82371AB/EB/MB PIIX4 IDE || /org/freedesktop/Hal/devices/pci_8086_7111_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_248a || T23, T30, X22, X23, X24, X30|| Intel 82801CAM IDE U100 (rev 2) || /org/freedesktop/Hal/devices/pci_8086_248a_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_24ca || R50, R51, T40, T40p, T41, T41p, T42, T42p, X31, X32, X40 || Intel 82801DBM (ICH4-M) || /org/freedesktop/Hal/devices/pci_8086_24ca_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2653 || R52, T43, T43p, X41, Z60m, Z60t  || Intel 82801FBM (ICH6-M) || /org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27c4 || R60, X60 || Intel 82801GBM (ICH7 Family) || /org/freedesktop/Hal/devices/pci_8086_27c4_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27df || T60, T60p, Z61m, Z61t, Z61p || Intel 82801GBM/GHM (ICH7 Family) || /org/freedesktop/Hal/devices/pci_8086_27df_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2850 || R61, T61, T61p, X300 || Intel 82801H (ICH8 Family) || /org/freedesktop/Hal/devices/pci_8086_2850_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2929 || R400, R500, T400, T500, W500, W700, X200, X301 || Intel 82801I ICH9 Family || /org/freedesktop/Hal/devices/pci_8086_2929_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|}&lt;br /&gt;
==lshal output==&lt;br /&gt;
Please place your lshal output here if you had problems, or if you have a A or W series ThinkPad&lt;br /&gt;
&lt;br /&gt;
= bash script for hotswapping UltraBay =&lt;br /&gt;
&lt;br /&gt;
Here is my script for hotswapping ultrabay, is more complex, supports swap partition on drive in ultrabay and more :)&lt;br /&gt;
&lt;br /&gt;
{{HELP|Please test on difrent models}}&lt;br /&gt;
&lt;br /&gt;
ultrabay.sh&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
FORCE_SLEEP=&amp;quot;1&amp;quot;&lt;br /&gt;
QUIET=&amp;quot;0&amp;quot;&lt;br /&gt;
SYSLOG=&amp;quot;0&amp;quot;&lt;br /&gt;
BEEP=&amp;quot;0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Message()&lt;br /&gt;
{&lt;br /&gt;
    MESSAGE=&amp;quot;${0/*\//}: $*&amp;quot;&lt;br /&gt;
    if [ $QUIET = &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
	echo &amp;quot;$MESSAGE&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if [ $SYSLOG != &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
	/usr/bin/logger &amp;quot;$MESSAGE&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Exit()&lt;br /&gt;
{&lt;br /&gt;
    case &amp;quot;$1&amp;quot; in&lt;br /&gt;
	&amp;quot;fail&amp;quot;)&lt;br /&gt;
	    [ $BEEP != &amp;quot;0&amp;quot; ] &amp;amp;&amp;amp; echo 2 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
	    exit 1&lt;br /&gt;
	;;&lt;br /&gt;
	&amp;quot;success&amp;quot;)&lt;br /&gt;
	    [ $BEEP != &amp;quot;0&amp;quot; ] &amp;amp;&amp;amp; echo 12 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
	    exit 0&lt;br /&gt;
	;;&lt;br /&gt;
    esac&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Usage()&lt;br /&gt;
{&lt;br /&gt;
    echo &amp;quot;usage: ${0/*\/} [options]&amp;quot;&lt;br /&gt;
    echo &amp;quot;options:&amp;quot;&lt;br /&gt;
    echo &amp;quot;    -q --quiet           No messages&amp;quot;&lt;br /&gt;
    echo &amp;quot;    -l --syslog          Use syslog for messages (--quet has no efect)&amp;quot;&lt;br /&gt;
    echo &amp;quot;    -b --beep            Use beeb for notification&amp;quot;&lt;br /&gt;
    echo &amp;quot;    -n --no-force-sleep  Ignore fail when putting drive to sleep&amp;quot;&lt;br /&gt;
    echo &amp;quot;    -d --device &amp;lt;path&amp;gt;   SCSI device (required)&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Block2Device()&lt;br /&gt;
{&lt;br /&gt;
    /bin/readlink -e &amp;quot;/dev/block/$1&amp;quot;	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
IsSwap()&lt;br /&gt;
{&lt;br /&gt;
    /sbin/swapon -s | grep -q -e &amp;quot;^$1\b&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
IsMounted()&lt;br /&gt;
{&lt;br /&gt;
    mount | grep -q -e &amp;quot;^$DEVICE\b&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ReleaseDevice()&lt;br /&gt;
{&lt;br /&gt;
    if IsMounted &amp;quot;$1&amp;quot;; then&lt;br /&gt;
	if ! umount &amp;quot;$1&amp;quot; &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
	    Message &amp;quot;cannot umount $DEVICE&amp;quot;&lt;br /&gt;
	    false&lt;br /&gt;
	fi&lt;br /&gt;
    elif IsSwap &amp;quot;$1&amp;quot;; then&lt;br /&gt;
	if ! /sbin/swapoff &amp;quot;$1&amp;quot; &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
	    Message &amp;quot;cannot disable swapping on $DEVICE&amp;quot;&lt;br /&gt;
	    false&lt;br /&gt;
	fi&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SleepDrive()&lt;br /&gt;
{&lt;br /&gt;
    if ! /sbin/hdparm -Y &amp;quot;$1&amp;quot; &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
	Message &amp;quot;cannot put drive to sleep&amp;quot;&lt;br /&gt;
	if [ $FORCE_SLEEP = &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
	    true&lt;br /&gt;
	else&lt;br /&gt;
	    false&lt;br /&gt;
	fi&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
DeleteScsiDevice()&lt;br /&gt;
{&lt;br /&gt;
    if ! { echo 1 &amp;gt; $SCSI_DEVICE/delete; } &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
	Message &amp;quot;cannot delete device&amp;quot;&lt;br /&gt;
	false&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
GetDock()&lt;br /&gt;
{&lt;br /&gt;
    grep &amp;quot;$1&amp;quot; /sys/devices/platform/dock.*/type | sed -e s%/type:.*%%&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
IsDocked()&lt;br /&gt;
{&lt;br /&gt;
    [ $(cat $(GetDock &amp;quot;$1&amp;quot;)/docked) -ne 0 ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Undock()&lt;br /&gt;
{&lt;br /&gt;
    { echo 0 &amp;gt; $(GetDock &amp;quot;$1&amp;quot;)/undock; } &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    if IsDocked &amp;quot;$1&amp;quot;; then&lt;br /&gt;
	Message &amp;quot;cannot undock UltraBay&amp;quot;&lt;br /&gt;
	false&lt;br /&gt;
    else&lt;br /&gt;
	Message &amp;quot;UltraBay undocked&amp;quot;&lt;br /&gt;
	true&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SCSI_DEVICE=&amp;quot;&amp;quot;&lt;br /&gt;
for PARAM in $*; do&lt;br /&gt;
    if [ &amp;quot;$PARAM_DEVICE&amp;quot; ]; then&lt;br /&gt;
	SCSI_DEVICE=&amp;quot;$PARAM&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
	case &amp;quot;$PARAM&amp;quot; in&lt;br /&gt;
    	    &amp;quot;--quiet&amp;quot;|&amp;quot;-q&amp;quot;)&lt;br /&gt;
		QUIET=&amp;quot;1&amp;quot;&lt;br /&gt;
	    ;;&lt;br /&gt;
	    &amp;quot;--no-force-sleep&amp;quot;|&amp;quot;-n&amp;quot;)&lt;br /&gt;
	        FORCE-SLEEP=&amp;quot;0&amp;quot;&lt;br /&gt;
	    ;;&lt;br /&gt;
	    &amp;quot;--device&amp;quot;|&amp;quot;-d&amp;quot;)&lt;br /&gt;
	        PARAM_DEVICE=&amp;quot;1&amp;quot;&lt;br /&gt;
	    ;;&lt;br /&gt;
	    &amp;quot;--syslog&amp;quot;|&amp;quot;-l&amp;quot;)&lt;br /&gt;
	        SYSLOG=&amp;quot;1&amp;quot;&lt;br /&gt;
	    ;;&lt;br /&gt;
	    &amp;quot;--beep&amp;quot;|&amp;quot;-b&amp;quot;)&lt;br /&gt;
		BEEP=&amp;quot;1&amp;quot;&lt;br /&gt;
	    ;;&lt;br /&gt;
	    *)&lt;br /&gt;
		Usage&lt;br /&gt;
	    ;;&lt;br /&gt;
	esac&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
[ -z &amp;quot;$SCSI_DEVICE&amp;quot; ] &amp;amp;&amp;amp; Usage&lt;br /&gt;
 &lt;br /&gt;
if [ -d &amp;quot;$SCSI_DEVICE&amp;quot; ] &amp;amp;&amp;amp; IsDocked &amp;quot;ata_bay&amp;quot;; then&lt;br /&gt;
    sync&lt;br /&gt;
    for BLOCK in $(/bin/cat $SCSI_DEVICE/block/*/*/dev $SCSI_DEVICE/block/*/dev 2&amp;gt; /dev/null); do&lt;br /&gt;
	DEVICE=$(Block2Device &amp;quot;$BLOCK&amp;quot;) &amp;amp;&amp;amp; ReleaseDevice &amp;quot;$DEVICE&amp;quot; || FAIL=&amp;quot;1&amp;quot;&lt;br /&gt;
    done&lt;br /&gt;
    [ $FAIL ] &amp;amp;&amp;amp; Exit &amp;quot;fail&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    sync&lt;br /&gt;
    BLOCK=$(cat $SCSI_DEVICE/block/*/dev 2&amp;gt; /dev/null) &amp;amp;&amp;amp;&lt;br /&gt;
    DEVICE=$(Block2Device &amp;quot;$BLOCK&amp;quot;) &amp;amp;&amp;amp; SleepDrive &amp;quot;$DEVICE&amp;quot; || Exit &amp;quot;fail&amp;quot; &lt;br /&gt;
    sleep 3&lt;br /&gt;
    DeleteScsiDevice &amp;quot;$SCSI_DEVICE&amp;quot; || Exit &amp;quot;fail&amp;quot;&lt;br /&gt;
    sleep 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -d $SCSI_DEVICE ] &amp;amp;&amp;amp; $(IsDocked &amp;quot;ata_bay&amp;quot;); then&lt;br /&gt;
    if Undock &amp;quot;ata_bay&amp;quot;; then&lt;br /&gt;
	Exit &amp;quot;success&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
	Exit &amp;quot;fail&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
Message &amp;quot;UltraBay is already undock&amp;quot;&lt;br /&gt;
Exit &amp;quot;success&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
UDEV rule&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ENV{BAY_EVENT}==&amp;quot;3&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;scsi&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay.sh -q -l -b -d /sys$DEVPATH&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Supported models: {{R400}} - linux-2.6.29&lt;br /&gt;
==comments==&lt;br /&gt;
Interesting, especially the support for swap partitions. but I have two comments, first your calling your script hotswap.sh and then having udev call ultrabay.sh?&lt;br /&gt;
&lt;br /&gt;
Then your hard coding the location of the Ultrabay device. This is not guarenteed to be correct, although it will be in most cases. In particular the A and W-series machines. A-series had support for more then one Ultrabay device, while W-series has support for more then one internal HDD in addition to the Ultrabay device, so the Ultrabay location will shift. That is why the Ultrabay Eject script on the main page gets the eject device information from udev.&lt;br /&gt;
&lt;br /&gt;
==comments==&lt;br /&gt;
Hi, thanks, I fix name of script :)&lt;br /&gt;
Udev calling ultrabay.sh with option -d, so it remove correct device, if you want remove device manualy, is default device useful. But option may be required...&lt;br /&gt;
&lt;br /&gt;
==more comments ;)==&lt;br /&gt;
You might also have a look at the script on the main page, it has a few extra abilities, such as logging to syslog, beeping and putting up popups on the desktop.&lt;br /&gt;
&lt;br /&gt;
Logging to syslog is simple, just call 'logger' with what you want to log. quite should have no effect on this.&lt;br /&gt;
&lt;br /&gt;
For beeps, similar to what windows does you can echo different values to /proc/acpi/ibm/beep, but it only works if sound is not muted. Unfortunately doing so does seem to generate some annoying messages in syslog.&lt;br /&gt;
&lt;br /&gt;
Lastly you can use notify-send to put up messages on the desktop, but before you can do so you have to do an export DISPLAY=:0.0&lt;br /&gt;
&lt;br /&gt;
==Syslog and beep==&lt;br /&gt;
OK, scrip now support syslog and beeping :).&lt;/div&gt;</summary>
		<author><name>Vogo</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Talk:How_to_hotswap_Ultrabay_devices&amp;diff=43415</id>
		<title>Talk:How to hotswap Ultrabay devices</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Talk:How_to_hotswap_Ultrabay_devices&amp;diff=43415"/>
		<updated>2009-06-08T18:50:29Z</updated>

		<summary type="html">&lt;p&gt;Vogo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=HAL script=&lt;br /&gt;
&lt;br /&gt;
If the script works, your lshal output should contain something similar to this. In this case the Ultrabay device was a second HDD (/dev/sdb).&lt;br /&gt;
&lt;br /&gt;
Note that in the example, storage.hotpluggable = true while before it was false, so the script worked.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
udi = '/org/freedesktop/Hal/devices/storage_serial_SATA_HTS726060M9AT00_MRH453M4H11ARB'&lt;br /&gt;
  block.device = '/dev/sdb'  (string)&lt;br /&gt;
  block.is_volume = false  (bool)&lt;br /&gt;
  block.major = 8  (0x8)  (int)&lt;br /&gt;
  block.minor = 16  (0x10)  (int)&lt;br /&gt;
  block.storage_device = '/org/freedesktop/Hal/devices/storage_serial_SATA_HTS726060M9AT00_MRH453M4H11ARB'  (string)&lt;br /&gt;
  info.capabilities = {'storage', 'block'} (string list)&lt;br /&gt;
  info.category = 'storage'  (string)&lt;br /&gt;
  info.parent = '/org/freedesktop/Hal/devices/pci_8086_24ca_scsi_host_0_scsi_device_lun0'  (string)&lt;br /&gt;
  info.product = 'HTS726060M9AT00'  (string)&lt;br /&gt;
  info.udi = '/org/freedesktop/Hal/devices/storage_serial_SATA_HTS726060M9AT00_MRH453M4H11ARB'  (string)&lt;br /&gt;
  info.vendor = 'ATA'  (string)&lt;br /&gt;
  linux.hotplug_type = 3  (0x3)  (int)&lt;br /&gt;
  linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1f.1/host1/target1:0:0/1:0:0:0/block/sdb'  (string)&lt;br /&gt;
  storage.automount_enabled_hint = true  (bool)&lt;br /&gt;
  storage.bus = 'pci'  (string)&lt;br /&gt;
  storage.drive_type = 'disk'  (string)&lt;br /&gt;
  storage.firmware_version = 'MH4O'  (string)&lt;br /&gt;
  storage.hotpluggable = true  (bool)&lt;br /&gt;
  storage.lun = 0  (0x0)  (int)&lt;br /&gt;
  storage.media_check_enabled = false  (bool)&lt;br /&gt;
  storage.model = 'HTS726060M9AT00'  (string)&lt;br /&gt;
  storage.no_partitions_hint = false  (bool)&lt;br /&gt;
  storage.originating_device = '/org/freedesktop/Hal/devices/computer'  (string)&lt;br /&gt;
  storage.partitioning_scheme = 'mbr'  (string)&lt;br /&gt;
  storage.removable = false  (bool)&lt;br /&gt;
  storage.removable.media_available = true  (bool)&lt;br /&gt;
  storage.removable.media_size = 60011642880  (0xdf8f90000)  (uint64)&lt;br /&gt;
  storage.requires_eject = false  (bool)&lt;br /&gt;
  storage.serial = 'SATA_HTS726060M9AT00_MRH453M4H11ARB'  (string)&lt;br /&gt;
  storage.size = 60011642880  (0xdf8f90000)  (uint64)&lt;br /&gt;
  storage.vendor = 'ATA'  (string)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
|+ Known South Bridge PCI IDs&lt;br /&gt;
! ID !! ThinkPad model !! South Bridge chip (for Ultrabay) !! parent device (host_0, lun0 = 2nd ATA controller, master device)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_7111 || T20, T21, T22, X20, X21 || Intel 82371AB/EB/MB PIIX4 IDE || /org/freedesktop/Hal/devices/pci_8086_7111_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_248a || T23, T30, X22, X23, X24, X30|| Intel 82801CAM IDE U100 (rev 2) || /org/freedesktop/Hal/devices/pci_8086_248a_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_24ca || R50, R51, T40, T40p, T41, T41p, T42, T42p, X31, X32, X40 || Intel 82801DBM (ICH4-M) || /org/freedesktop/Hal/devices/pci_8086_24ca_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2653 || R52, T43, T43p, X41, Z60m, Z60t  || Intel 82801FBM (ICH6-M) || /org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27c4 || R60, X60 || Intel 82801GBM (ICH7 Family) || /org/freedesktop/Hal/devices/pci_8086_27c4_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27df || T60, T60p, Z61m, Z61t, Z61p || Intel 82801GBM/GHM (ICH7 Family) || /org/freedesktop/Hal/devices/pci_8086_27df_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2850 || R61, T61, T61p, X300 || Intel 82801H (ICH8 Family) || /org/freedesktop/Hal/devices/pci_8086_2850_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2929 || R400, R500, T400, T500, W500, W700, X200, X301 || Intel 82801I ICH9 Family || /org/freedesktop/Hal/devices/pci_8086_2929_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|}&lt;br /&gt;
==lshal output==&lt;br /&gt;
Please place your lshal output here if you had problems, or if you have a A or W series ThinkPad&lt;br /&gt;
&lt;br /&gt;
= bash script for hotswapping UltraBay =&lt;br /&gt;
&lt;br /&gt;
Here is my script for hotswapping ultrabay, is more complex, supports swap partition on drive in ultrabay and more :)&lt;br /&gt;
&lt;br /&gt;
{{HELP|Please test on difrent models}}&lt;br /&gt;
&lt;br /&gt;
ultrabay.sh&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
FORCE_SLEEP=&amp;quot;1&amp;quot;&lt;br /&gt;
QUIET=&amp;quot;0&amp;quot;&lt;br /&gt;
SYSLOG=&amp;quot;0&amp;quot;&lt;br /&gt;
BEEP=&amp;quot;0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Message()&lt;br /&gt;
{&lt;br /&gt;
    MESSAGE=&amp;quot;${0/*\//}: $*&amp;quot;&lt;br /&gt;
    if [ $QUIET = &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
	echo &amp;quot;$MESSAGE&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    if [ $SYSLOG != &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
	/usr/bin/logger &amp;quot;$MESSAGE&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    true&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Exit()&lt;br /&gt;
{&lt;br /&gt;
    case &amp;quot;$1&amp;quot; in&lt;br /&gt;
	&amp;quot;fail&amp;quot;)&lt;br /&gt;
	    [ $BEEP != &amp;quot;0&amp;quot; ] &amp;amp;&amp;amp; echo 2 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
	    exit 1&lt;br /&gt;
	;;&lt;br /&gt;
	&amp;quot;success&amp;quot;)&lt;br /&gt;
	    [ $BEEP != &amp;quot;0&amp;quot; ] &amp;amp;&amp;amp; echo 12 &amp;gt; /proc/acpi/ibm/beep&lt;br /&gt;
	    exit 0&lt;br /&gt;
	;;&lt;br /&gt;
    esac&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Usage()&lt;br /&gt;
{&lt;br /&gt;
    echo &amp;quot;usage: ${0/*\/} [options]&amp;quot;&lt;br /&gt;
    echo &amp;quot;options:&amp;quot;&lt;br /&gt;
    echo &amp;quot;    -q --quiet           No messages&amp;quot;&lt;br /&gt;
    echo &amp;quot;    -l --syslog          Use syslog for messages (--quet has no efect)&amp;quot;&lt;br /&gt;
    echo &amp;quot;    -b --beep            Use beeb for notification&amp;quot;&lt;br /&gt;
    echo &amp;quot;    -n --no-force-sleep  Ignore fail when putting drive to sleep&amp;quot;&lt;br /&gt;
    echo &amp;quot;    -d --device &amp;lt;path&amp;gt;   SCSI device (required)&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Block2Device()&lt;br /&gt;
{&lt;br /&gt;
    /bin/readlink -e &amp;quot;/dev/block/$1&amp;quot;	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
IsSwap()&lt;br /&gt;
{&lt;br /&gt;
    /sbin/swapon -s | grep -q -e &amp;quot;^$1\b&amp;quot;&lt;br /&gt;
}x&lt;br /&gt;
&lt;br /&gt;
IsMounted()&lt;br /&gt;
{&lt;br /&gt;
    mount | grep -q -e &amp;quot;^$DEVICE\b&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ReleaseDevice()&lt;br /&gt;
{&lt;br /&gt;
    if IsMounted &amp;quot;$1&amp;quot;; then&lt;br /&gt;
	if ! umount &amp;quot;$1&amp;quot; &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
	    Message &amp;quot;cannot umount $DEVICE&amp;quot;&lt;br /&gt;
	    false&lt;br /&gt;
	fi&lt;br /&gt;
    elif IsSwap &amp;quot;$1&amp;quot;; then&lt;br /&gt;
	if ! /sbin/swapoff &amp;quot;$1&amp;quot; &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
	    Message &amp;quot;cannot disable swapping on $DEVICE&amp;quot;&lt;br /&gt;
	    false&lt;br /&gt;
	fi&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SleepDrive()&lt;br /&gt;
{&lt;br /&gt;
    if ! /sbin/hdparm -Y &amp;quot;$1&amp;quot; &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
	Message &amp;quot;cannot put drive to sleep&amp;quot;&lt;br /&gt;
	if [ $FORCE_SLEEP = &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
	    true&lt;br /&gt;
	else&lt;br /&gt;
	    false&lt;br /&gt;
	fi&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
DeleteScsiDevice()&lt;br /&gt;
{&lt;br /&gt;
    if ! { echo 1 &amp;gt; $SCSI_DEVICE/delete; } &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
	Message &amp;quot;cannot delete device&amp;quot;&lt;br /&gt;
	false&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
GetDock()&lt;br /&gt;
{&lt;br /&gt;
    grep &amp;quot;$1&amp;quot; /sys/devices/platform/dock.*/type | sed -e s%/type:.*%%&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
IsDocked()&lt;br /&gt;
{&lt;br /&gt;
    [ $(cat $(GetDock &amp;quot;$1&amp;quot;)/docked) -ne 0 ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Undock()&lt;br /&gt;
{&lt;br /&gt;
    { echo 0 &amp;gt; $(GetDock &amp;quot;$1&amp;quot;)/undock; } &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    if IsDocked &amp;quot;$1&amp;quot;; then&lt;br /&gt;
	Message &amp;quot;cannot undock UltraBay&amp;quot;&lt;br /&gt;
	false&lt;br /&gt;
    else&lt;br /&gt;
	Message &amp;quot;UltraBay undocked&amp;quot;&lt;br /&gt;
	true&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SCSI_DEVICE=&amp;quot;&amp;quot;&lt;br /&gt;
for PARAM in $*; do&lt;br /&gt;
    if [ &amp;quot;$PARAM_DEVICE&amp;quot; ]; then&lt;br /&gt;
	SCSI_DEVICE=&amp;quot;$PARAM&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
	case &amp;quot;$PARAM&amp;quot; in&lt;br /&gt;
    	    &amp;quot;--quiet&amp;quot;|&amp;quot;-q&amp;quot;)&lt;br /&gt;
		QUIET=&amp;quot;1&amp;quot;&lt;br /&gt;
	    ;;&lt;br /&gt;
	    &amp;quot;--no-force-sleep&amp;quot;|&amp;quot;-n&amp;quot;)&lt;br /&gt;
	        FORCE-SLEEP=&amp;quot;0&amp;quot;&lt;br /&gt;
	    ;;&lt;br /&gt;
	    &amp;quot;--device&amp;quot;|&amp;quot;-d&amp;quot;)&lt;br /&gt;
	        PARAM_DEVICE=&amp;quot;1&amp;quot;&lt;br /&gt;
	    ;;&lt;br /&gt;
	    &amp;quot;--syslog&amp;quot;|&amp;quot;-l&amp;quot;)&lt;br /&gt;
	        SYSLOG=&amp;quot;1&amp;quot;&lt;br /&gt;
	    ;;&lt;br /&gt;
	    &amp;quot;--beep&amp;quot;|&amp;quot;-b&amp;quot;)&lt;br /&gt;
		BEEP=&amp;quot;1&amp;quot;&lt;br /&gt;
	    ;;&lt;br /&gt;
	    *)&lt;br /&gt;
		Usage&lt;br /&gt;
	    ;;&lt;br /&gt;
	esac&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
[ -z &amp;quot;$SCSI_DEVICE&amp;quot; ] &amp;amp;&amp;amp; Usage&lt;br /&gt;
 &lt;br /&gt;
if [ -d &amp;quot;$SCSI_DEVICE&amp;quot; ] &amp;amp;&amp;amp; IsDocked &amp;quot;ata_bay&amp;quot;; then&lt;br /&gt;
    sync&lt;br /&gt;
    for BLOCK in $(/bin/cat $SCSI_DEVICE/block/*/*/dev $SCSI_DEVICE/block/*/dev 2&amp;gt; /dev/null); do&lt;br /&gt;
	DEVICE=$(Block2Device &amp;quot;$BLOCK&amp;quot;) &amp;amp;&amp;amp; ReleaseDevice &amp;quot;$DEVICE&amp;quot; || FAIL=&amp;quot;1&amp;quot;&lt;br /&gt;
    done&lt;br /&gt;
    [ $FAIL ] &amp;amp;&amp;amp; Exit &amp;quot;fail&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    sync&lt;br /&gt;
    BLOCK=$(cat $SCSI_DEVICE/block/*/dev 2&amp;gt; /dev/null) &amp;amp;&amp;amp;&lt;br /&gt;
    DEVICE=$(Block2Device &amp;quot;$BLOCK&amp;quot;) &amp;amp;&amp;amp; SleepDrive &amp;quot;$DEVICE&amp;quot; || Exit &amp;quot;fail&amp;quot; &lt;br /&gt;
    sleep 3&lt;br /&gt;
    DeleteScsiDevice &amp;quot;$SCSI_DEVICE&amp;quot; || Exit &amp;quot;fail&amp;quot;&lt;br /&gt;
    sleep 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -d $SCSI_DEVICE ] &amp;amp;&amp;amp; $(IsDocked &amp;quot;ata_bay&amp;quot;); then&lt;br /&gt;
    if Undock &amp;quot;ata_bay&amp;quot;; then&lt;br /&gt;
	Exit &amp;quot;success&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
	Exit &amp;quot;fail&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
Message &amp;quot;UltraBay is already undock&amp;quot;&lt;br /&gt;
Exit &amp;quot;success&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
UDEV rule&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ENV{BAY_EVENT}==&amp;quot;3&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;scsi&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay.sh -q -l -b -d /sys$DEVPATH&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Supported models: {{R400}} - linux-2.6.29&lt;br /&gt;
==comments==&lt;br /&gt;
Interesting, especially the support for swap partitions. but I have two comments, first your calling your script hotswap.sh and then having udev call ultrabay.sh?&lt;br /&gt;
&lt;br /&gt;
Then your hard coding the location of the Ultrabay device. This is not guarenteed to be correct, although it will be in most cases. In particular the A and W-series machines. A-series had support for more then one Ultrabay device, while W-series has support for more then one internal HDD in addition to the Ultrabay device, so the Ultrabay location will shift. That is why the Ultrabay Eject script on the main page gets the eject device information from udev.&lt;br /&gt;
&lt;br /&gt;
==comments==&lt;br /&gt;
Hi, thanks, I fix name of script :)&lt;br /&gt;
Udev calling ultrabay.sh with option -d, so it remove correct device, if you want remove device manualy, is default device useful. But option may be required...&lt;br /&gt;
&lt;br /&gt;
==more comments ;)==&lt;br /&gt;
You might also have a look at the script on the main page, it has a few extra abilities, such as logging to syslog, beeping and putting up popups on the desktop.&lt;br /&gt;
&lt;br /&gt;
Logging to syslog is simple, just call 'logger' with what you want to log. quite should have no effect on this.&lt;br /&gt;
&lt;br /&gt;
For beeps, similar to what windows does you can echo different values to /proc/acpi/ibm/beep, but it only works if sound is not muted. Unfortunately doing so does seem to generate some annoying messages in syslog.&lt;br /&gt;
&lt;br /&gt;
Lastly you can use notify-send to put up messages on the desktop, but before you can do so you have to do an export DISPLAY=:0.0&lt;br /&gt;
&lt;br /&gt;
==Syslog and beep==&lt;br /&gt;
OK, scrip now support syslog and beeping :).&lt;/div&gt;</summary>
		<author><name>Vogo</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=7443-C1G&amp;diff=43413</id>
		<title>7443-C1G</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=7443-C1G&amp;diff=43413"/>
		<updated>2009-06-08T17:02:48Z</updated>

		<summary type="html">&lt;p&gt;Vogo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==General==&lt;br /&gt;
Model Name:  7443C1G&lt;br /&gt;
&lt;br /&gt;
Description:  ThinkPad R400&lt;br /&gt;
 &lt;br /&gt;
==Operating System==&lt;br /&gt;
Genuine Windows is authentic Windows software that is properly licensed and legally installed. Learn more about the special benefits reserved for genuine Windows customers by visiting www.microsoft.com/genuine &lt;br /&gt;
&lt;br /&gt;
Operating system provided:  Genuine Windows Vista Business&lt;br /&gt;
&lt;br /&gt;
==Architecture==&lt;br /&gt;
Bus type/architecture:  PCI/PCI Express&lt;br /&gt;
&lt;br /&gt;
Bays:   Ultrabay Enhanced &lt;br /&gt;
&lt;br /&gt;
Indicator light:&lt;br /&gt;
&lt;br /&gt;
Form Factor:  Notebook&lt;br /&gt;
&lt;br /&gt;
==Display==&lt;br /&gt;
External display supported:&lt;br /&gt;
&lt;br /&gt;
Simultaneous external display:&lt;br /&gt;
&lt;br /&gt;
Screen type description:   WXGA TFT&lt;br /&gt;
&lt;br /&gt;
Viewable image size (diagonal):  14.1inches&lt;br /&gt;
&lt;br /&gt;
Screen illumination:  CCFL Backlight&lt;br /&gt;
&lt;br /&gt;
Max colors or grey shades:  16777216&lt;br /&gt;
&lt;br /&gt;
Max resolution:  1280x800&lt;br /&gt;
&lt;br /&gt;
==Graphics Subsystem==&lt;br /&gt;
Video RAM std/max:   -- / --&lt;br /&gt;
&lt;br /&gt;
Graphics chipset:  Intel Graphics Media Accelerator 4500MHD&lt;br /&gt;
&lt;br /&gt;
Graphics type:  --&lt;br /&gt;
&lt;br /&gt;
Video RAM type:  DVMT&lt;br /&gt;
&lt;br /&gt;
Max resolution (with max video RAM):  2048x1536 16777216 colors&lt;br /&gt;
&lt;br /&gt;
Max colors (with max video RAM):  16777216&lt;br /&gt;
&lt;br /&gt;
Graphics bus interface:  PCI Express&lt;br /&gt;
&lt;br /&gt;
==Processor==&lt;br /&gt;
BIOS type:   Flash ROM&lt;br /&gt;
&lt;br /&gt;
Processor manufacturer:   Intel&lt;br /&gt;
&lt;br /&gt;
Processor (CPU):  Intel® Core 2 Duo processor T5870&lt;br /&gt;
&lt;br /&gt;
Processor internal clock speed2:   2GHz&lt;br /&gt;
&lt;br /&gt;
Front Side Bus:  800MHz&lt;br /&gt;
&lt;br /&gt;
==Memory==&lt;br /&gt;
Memory (RAM) std/max:  2x1GB / 4GB&lt;br /&gt;
&lt;br /&gt;
RAM slots total:   2 SODIMM&lt;br /&gt;
&lt;br /&gt;
RAM slots available:   0 SODIMM&lt;br /&gt;
&lt;br /&gt;
RAM speed supported:  1066MHz&lt;br /&gt;
&lt;br /&gt;
RAM type:  PC3-8500 DDR3 SDRAM&lt;br /&gt;
&lt;br /&gt;
==Hard Disk==&lt;br /&gt;
Hard disk size1:  250GB&lt;br /&gt;
&lt;br /&gt;
Hard disk type:  Serial ATA&lt;br /&gt;
&lt;br /&gt;
==Optical device==&lt;br /&gt;
Floppy diskette size:   --&lt;br /&gt;
&lt;br /&gt;
Optical device:   DVD Recordable&lt;br /&gt;
&lt;br /&gt;
Optical device speed8:  24X Max&lt;br /&gt;
&lt;br /&gt;
Device interface:  EIDE&lt;br /&gt;
&lt;br /&gt;
==Audio==&lt;br /&gt;
Integrated speakers:   2&lt;br /&gt;
&lt;br /&gt;
Speaker power rating:   2 Watts&lt;br /&gt;
&lt;br /&gt;
Volume control buttons:&lt;br /&gt;
&lt;br /&gt;
Speaker Quantity:   2 (Internal Speakers)&lt;br /&gt;
&lt;br /&gt;
Audio chipset:  Intel High Definition Audio&lt;br /&gt;
&lt;br /&gt;
Audio data width:  24-bit&lt;br /&gt;
&lt;br /&gt;
==Communications==&lt;br /&gt;
Fax/modem:  56K V.92 designed modem AMOM&lt;br /&gt;
&lt;br /&gt;
Fax/modem speeds:  56Kbps data/14.4Kbps fax&lt;br /&gt;
&lt;br /&gt;
Infrared port:   No&lt;br /&gt;
&lt;br /&gt;
Infrared port speed:   --&lt;br /&gt;
&lt;br /&gt;
Wireless standard:   Intel WiFi Link 5100AGN&lt;br /&gt;
&lt;br /&gt;
Network card:   Integrated Intel 82567LM Gigabit Network Adapter&lt;br /&gt;
&lt;br /&gt;
Network interface:   Gigabit Ethernet- Integrated&lt;br /&gt;
&lt;br /&gt;
==Accessories==&lt;br /&gt;
A/C adapter:&lt;br /&gt;
&lt;br /&gt;
Worldwide A/C compatibility:  Yes&lt;br /&gt;
&lt;br /&gt;
Port replicator:&lt;br /&gt;
&lt;br /&gt;
=Standard Features=&lt;br /&gt;
Pointing device type:  UltraNav (TrackPoint and TouchPad)&lt;br /&gt;
&lt;br /&gt;
Keyboard type:  Full size&lt;br /&gt;
&lt;br /&gt;
Keyboard light:  Yes&lt;br /&gt;
&lt;br /&gt;
==Power Management==&lt;br /&gt;
Heat emissions:   90W&lt;br /&gt;
&lt;br /&gt;
Sound emissions:   40dB&lt;br /&gt;
&lt;br /&gt;
Battery life - min/max:   5.6 Hrs&lt;br /&gt;
&lt;br /&gt;
Battery type(s):   6 Cell Lithium-Ion&lt;br /&gt;
&lt;br /&gt;
Charge time - on/off:  6.0Hrs / 3.5Hrs&lt;br /&gt;
&lt;br /&gt;
==Expansion Options==&lt;br /&gt;
Plug and play support:&lt;br /&gt;
&lt;br /&gt;
Slots total (free) and type:   PCI/PCI Express&lt;br /&gt;
&lt;br /&gt;
Parallel port type:&lt;br /&gt;
&lt;br /&gt;
Ports:&lt;br /&gt;
&lt;br /&gt;
==Weight &amp;amp; Dimensions==&lt;br /&gt;
Weight:  2.4Kg&lt;br /&gt;
&lt;br /&gt;
Height:   34.9mm&lt;br /&gt;
&lt;br /&gt;
Width:    335.5mm &lt;br /&gt;
&lt;br /&gt;
Depth:    238mm&lt;br /&gt;
&lt;br /&gt;
Travel weight:  2.32Kgs&lt;br /&gt;
&lt;br /&gt;
==Security==&lt;br /&gt;
Security features:  Power-on password&lt;br /&gt;
&lt;br /&gt;
Security lock slot&lt;br /&gt;
&lt;br /&gt;
Supervisor password&lt;br /&gt;
&lt;br /&gt;
Hard disk drive password&lt;br /&gt;
&lt;br /&gt;
Integrated fingerprint reader&lt;br /&gt;
&lt;br /&gt;
Client Security Solution&lt;br /&gt;
&lt;br /&gt;
==Limited warranty==&lt;br /&gt;
Type of service:  Customer Carry-in Repair&lt;br /&gt;
&lt;br /&gt;
Warranty period:   One year parts and labor (system battery: one year)&lt;br /&gt;
&lt;br /&gt;
==Software==&lt;br /&gt;
Supported operating systems:&lt;br /&gt;
&lt;br /&gt;
Communication/networking:   &lt;br /&gt;
&lt;br /&gt;
Device drivers/utilities:&lt;br /&gt;
&lt;br /&gt;
Multimedia applications:&lt;br /&gt;
&lt;br /&gt;
Productivity applications:&lt;br /&gt;
&lt;br /&gt;
Other applications provided:&lt;br /&gt;
&lt;br /&gt;
==Identification under Linux==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ lspci&lt;br /&gt;
00:00.0 Host bridge: Intel Corporation Mobile 4 Series Chipset Memory Controller Hub (rev 07)                                                               &lt;br /&gt;
00:02.0 VGA compatible controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07)                                        &lt;br /&gt;
00:02.1 Display controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07)                                               &lt;br /&gt;
00:03.0 Communication controller: Intel Corporation Mobile 4 Series Chipset MEI Controller (rev 07)                                                         &lt;br /&gt;
00:19.0 Ethernet controller: Intel Corporation 82567LM Gigabit Network Connection (rev 03)                                                                  &lt;br /&gt;
00:1a.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 (rev 03)                                                              &lt;br /&gt;
00:1a.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #5 (rev 03)                                                              &lt;br /&gt;
00:1a.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #6 (rev 03)                                                              &lt;br /&gt;
00:1a.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #2 (rev 03)                                                             &lt;br /&gt;
00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio Controller (rev 03)                                                                   &lt;br /&gt;
00:1c.0 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 1 (rev 03)                                                                      &lt;br /&gt;
00:1c.1 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 2 (rev 03)                                                                      &lt;br /&gt;
00:1c.3 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 4 (rev 03)                                                                      &lt;br /&gt;
00:1d.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 03)                                                              &lt;br /&gt;
00:1d.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 03)&lt;br /&gt;
00:1d.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 03)&lt;br /&gt;
00:1d.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 03)&lt;br /&gt;
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 93)&lt;br /&gt;
00:1f.0 ISA bridge: Intel Corporation ICH9M-E LPC Interface Controller (rev 03)&lt;br /&gt;
00:1f.2 SATA controller: Intel Corporation ICH9M/M-E SATA AHCI Controller (rev 03)&lt;br /&gt;
00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 03)&lt;br /&gt;
03:00.0 Network controller: Intel Corporation PRO/Wireless 5100 AGN [Shiloh] Network Connection&lt;br /&gt;
15:00.0 CardBus bridge: Ricoh Co Ltd RL5c476 II (rev ba)&lt;br /&gt;
15:00.1 FireWire (IEEE 1394): Ricoh Co Ltd R5C832 IEEE 1394 Controller (rev 04)&lt;br /&gt;
15:00.2 SD Host controller: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev 21)&lt;br /&gt;
15:00.3 System peripheral: Ricoh Co Ltd R5C843 MMC Host Controller (rev ff)&lt;br /&gt;
15:00.4 System peripheral: Ricoh Co Ltd R5C592 Memory Stick Bus Host Adapter (rev 11)&lt;br /&gt;
15:00.5 System peripheral: Ricoh Co Ltd xD-Picture Card Controller (rev 11)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat /proc/cpuinfo &lt;br /&gt;
processor       : 0                          &lt;br /&gt;
vendor_id       : GenuineIntel               &lt;br /&gt;
cpu family      : 6                          &lt;br /&gt;
model           : 15                         &lt;br /&gt;
model name      : Intel(R) Core(TM)2 Duo CPU     T5870  @ 2.00GHz&lt;br /&gt;
stepping        : 13                                             &lt;br /&gt;
cpu MHz         : 800.000                                        &lt;br /&gt;
cache size      : 2048 KB                                        &lt;br /&gt;
physical id     : 0                                              &lt;br /&gt;
siblings        : 2                                              &lt;br /&gt;
core id         : 0                                              &lt;br /&gt;
cpu cores       : 2                                              &lt;br /&gt;
apicid          : 0                                              &lt;br /&gt;
initial apicid  : 0                                              &lt;br /&gt;
fpu             : yes                                            &lt;br /&gt;
fpu_exception   : yes                                            &lt;br /&gt;
cpuid level     : 10                                             &lt;br /&gt;
wp              : yes                                            &lt;br /&gt;
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm ida                                                  &lt;br /&gt;
bogomips        : 3991.89                                                     &lt;br /&gt;
clflush size    : 64                                                          &lt;br /&gt;
cache_alignment : 64                                                          &lt;br /&gt;
address sizes   : 36 bits physical, 48 bits virtual                           &lt;br /&gt;
power management:                                                             &lt;br /&gt;
&lt;br /&gt;
processor       : 1&lt;br /&gt;
vendor_id       : GenuineIntel&lt;br /&gt;
cpu family      : 6           &lt;br /&gt;
model           : 15          &lt;br /&gt;
model name      : Intel(R) Core(TM)2 Duo CPU     T5870  @ 2.00GHz&lt;br /&gt;
stepping        : 13&lt;br /&gt;
cpu MHz         : 800.000&lt;br /&gt;
cache size      : 2048 KB&lt;br /&gt;
physical id     : 0&lt;br /&gt;
siblings        : 2&lt;br /&gt;
core id         : 1&lt;br /&gt;
cpu cores       : 2&lt;br /&gt;
apicid          : 1&lt;br /&gt;
initial apicid  : 1&lt;br /&gt;
fpu             : yes&lt;br /&gt;
fpu_exception   : yes&lt;br /&gt;
cpuid level     : 10&lt;br /&gt;
wp              : yes&lt;br /&gt;
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm ida&lt;br /&gt;
bogomips        : 3991.24&lt;br /&gt;
clflush size    : 64&lt;br /&gt;
cache_alignment : 64&lt;br /&gt;
address sizes   : 36 bits physical, 48 bits virtual&lt;br /&gt;
power management:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vogo</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=7443-C1G&amp;diff=43412</id>
		<title>7443-C1G</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=7443-C1G&amp;diff=43412"/>
		<updated>2009-06-08T16:57:27Z</updated>

		<summary type="html">&lt;p&gt;Vogo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=General=&lt;br /&gt;
Model Name:  7443C1G&lt;br /&gt;
&lt;br /&gt;
Description:  ThinkPad R400&lt;br /&gt;
 &lt;br /&gt;
=Operating System=&lt;br /&gt;
Genuine Windows is authentic Windows software that is properly licensed and legally installed. Learn more about the special benefits reserved for genuine Windows customers by visiting www.microsoft.com/genuine &lt;br /&gt;
&lt;br /&gt;
Operating system provided:  Genuine Windows Vista Business&lt;br /&gt;
&lt;br /&gt;
=Architecture=&lt;br /&gt;
Bus type/architecture:  PCI/PCI Express&lt;br /&gt;
&lt;br /&gt;
Bays:   Ultrabay Enhanced &lt;br /&gt;
&lt;br /&gt;
Indicator light:&lt;br /&gt;
&lt;br /&gt;
Form Factor:  Notebook&lt;br /&gt;
&lt;br /&gt;
=Display=&lt;br /&gt;
External display supported:&lt;br /&gt;
&lt;br /&gt;
Simultaneous external display:&lt;br /&gt;
&lt;br /&gt;
Screen type description:   WXGA TFT&lt;br /&gt;
&lt;br /&gt;
Viewable image size (diagonal):  14.1inches&lt;br /&gt;
&lt;br /&gt;
Screen illumination:  CCFL Backlight&lt;br /&gt;
&lt;br /&gt;
Max colors or grey shades:  16777216&lt;br /&gt;
&lt;br /&gt;
Max resolution:  1280x800&lt;br /&gt;
&lt;br /&gt;
=Graphics Subsystem=&lt;br /&gt;
Video RAM std/max:   -- / --&lt;br /&gt;
&lt;br /&gt;
Graphics chipset:  Intel Graphics Media Accelerator 4500MHD&lt;br /&gt;
&lt;br /&gt;
Graphics type:  --&lt;br /&gt;
&lt;br /&gt;
Video RAM type:  DVMT&lt;br /&gt;
&lt;br /&gt;
Max resolution (with max video RAM):  2048x1536 16777216 colors&lt;br /&gt;
&lt;br /&gt;
Max colors (with max video RAM):  16777216&lt;br /&gt;
&lt;br /&gt;
Graphics bus interface:  PCI Express&lt;br /&gt;
&lt;br /&gt;
=Processor =&lt;br /&gt;
BIOS type:   Flash ROM&lt;br /&gt;
&lt;br /&gt;
Processor manufacturer:   Intel&lt;br /&gt;
&lt;br /&gt;
Processor (CPU):  Intel® Core 2 Duo processor T5870&lt;br /&gt;
&lt;br /&gt;
Processor internal clock speed2:   2GHz&lt;br /&gt;
&lt;br /&gt;
Front Side Bus:  800MHz&lt;br /&gt;
&lt;br /&gt;
=Memory=&lt;br /&gt;
Memory (RAM) std/max:  2x1GB / 4GB&lt;br /&gt;
&lt;br /&gt;
RAM slots total:   2 SODIMM&lt;br /&gt;
&lt;br /&gt;
RAM slots available:   0 SODIMM&lt;br /&gt;
&lt;br /&gt;
RAM speed supported:  1066MHz&lt;br /&gt;
&lt;br /&gt;
RAM type:  PC3-8500 DDR3 SDRAM&lt;br /&gt;
&lt;br /&gt;
=Hard Disk=&lt;br /&gt;
Hard disk size1:  250GB&lt;br /&gt;
&lt;br /&gt;
Hard disk type:  Serial ATA&lt;br /&gt;
&lt;br /&gt;
=Optical device=&lt;br /&gt;
Floppy diskette size:   --&lt;br /&gt;
&lt;br /&gt;
Optical device:   DVD Recordable&lt;br /&gt;
&lt;br /&gt;
Optical device speed8:  24X Max&lt;br /&gt;
&lt;br /&gt;
Device interface:  EIDE&lt;br /&gt;
&lt;br /&gt;
=Audio=&lt;br /&gt;
Integrated speakers:   2&lt;br /&gt;
&lt;br /&gt;
Speaker power rating:   2 Watts&lt;br /&gt;
&lt;br /&gt;
Volume control buttons:&lt;br /&gt;
&lt;br /&gt;
Speaker Quantity:   2 (Internal Speakers)&lt;br /&gt;
&lt;br /&gt;
Audio chipset:  Intel High Definition Audio&lt;br /&gt;
&lt;br /&gt;
Audio data width:  24-bit&lt;br /&gt;
&lt;br /&gt;
=Communications=&lt;br /&gt;
Fax/modem:  56K V.92 designed modem AMOM&lt;br /&gt;
&lt;br /&gt;
Fax/modem speeds:  56Kbps data/14.4Kbps fax&lt;br /&gt;
&lt;br /&gt;
Infrared port:   No&lt;br /&gt;
&lt;br /&gt;
Infrared port speed:   --&lt;br /&gt;
&lt;br /&gt;
Wireless standard:   Intel WiFi Link 5100AGN&lt;br /&gt;
&lt;br /&gt;
Network card:   Integrated Intel 82567LM Gigabit Network Adapter&lt;br /&gt;
&lt;br /&gt;
Network interface:   Gigabit Ethernet- Integrated&lt;br /&gt;
&lt;br /&gt;
=Accessories=&lt;br /&gt;
A/C adapter:&lt;br /&gt;
&lt;br /&gt;
Worldwide A/C compatibility:  Yes&lt;br /&gt;
&lt;br /&gt;
Port replicator:&lt;br /&gt;
&lt;br /&gt;
=Standard Features=&lt;br /&gt;
Pointing device type:  UltraNav (TrackPoint and TouchPad)&lt;br /&gt;
&lt;br /&gt;
Keyboard type:  Full size&lt;br /&gt;
&lt;br /&gt;
Keyboard light:  Yes&lt;br /&gt;
&lt;br /&gt;
=Power Management=&lt;br /&gt;
Heat emissions:   90W&lt;br /&gt;
&lt;br /&gt;
Sound emissions:   40dB&lt;br /&gt;
&lt;br /&gt;
Battery life - min/max:   5.6 Hrs&lt;br /&gt;
&lt;br /&gt;
Battery type(s):   6 Cell Lithium-Ion&lt;br /&gt;
&lt;br /&gt;
Charge time - on/off:  6.0Hrs / 3.5Hrs&lt;br /&gt;
&lt;br /&gt;
=Expansion Options=&lt;br /&gt;
Plug and play support:&lt;br /&gt;
&lt;br /&gt;
Slots total (free) and type:   PCI/PCI Express&lt;br /&gt;
&lt;br /&gt;
Parallel port type:&lt;br /&gt;
&lt;br /&gt;
Ports:&lt;br /&gt;
&lt;br /&gt;
=Weight &amp;amp; Dimensions=&lt;br /&gt;
Weight:  2.4Kg&lt;br /&gt;
&lt;br /&gt;
Height:   34.9mm&lt;br /&gt;
&lt;br /&gt;
Width:    335.5mm &lt;br /&gt;
&lt;br /&gt;
Depth:    238mm&lt;br /&gt;
&lt;br /&gt;
Travel weight:  2.32Kgs&lt;br /&gt;
&lt;br /&gt;
=Security =&lt;br /&gt;
Security features:  Power-on password&lt;br /&gt;
&lt;br /&gt;
Security lock slot&lt;br /&gt;
&lt;br /&gt;
Supervisor password&lt;br /&gt;
&lt;br /&gt;
Hard disk drive password&lt;br /&gt;
&lt;br /&gt;
Integrated fingerprint reader&lt;br /&gt;
&lt;br /&gt;
Client Security Solution&lt;br /&gt;
&lt;br /&gt;
=Limited warranty=&lt;br /&gt;
Type of service:  Customer Carry-in Repair&lt;br /&gt;
&lt;br /&gt;
Warranty period:   One year parts and labor (system battery: one year)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Software=&lt;br /&gt;
Supported operating systems:&lt;br /&gt;
&lt;br /&gt;
Communication/networking:   &lt;br /&gt;
&lt;br /&gt;
Device drivers/utilities:&lt;br /&gt;
&lt;br /&gt;
Multimedia applications:&lt;br /&gt;
&lt;br /&gt;
Productivity applications:&lt;br /&gt;
&lt;br /&gt;
Other applications provided:&lt;br /&gt;
&lt;br /&gt;
=Identification under Linux=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ lspci&lt;br /&gt;
00:00.0 Host bridge: Intel Corporation Mobile 4 Series Chipset Memory Controller Hub (rev 07)                                                               &lt;br /&gt;
00:02.0 VGA compatible controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07)                                        &lt;br /&gt;
00:02.1 Display controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07)                                               &lt;br /&gt;
00:03.0 Communication controller: Intel Corporation Mobile 4 Series Chipset MEI Controller (rev 07)                                                         &lt;br /&gt;
00:19.0 Ethernet controller: Intel Corporation 82567LM Gigabit Network Connection (rev 03)                                                                  &lt;br /&gt;
00:1a.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 (rev 03)                                                              &lt;br /&gt;
00:1a.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #5 (rev 03)                                                              &lt;br /&gt;
00:1a.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #6 (rev 03)                                                              &lt;br /&gt;
00:1a.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #2 (rev 03)                                                             &lt;br /&gt;
00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio Controller (rev 03)                                                                   &lt;br /&gt;
00:1c.0 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 1 (rev 03)                                                                      &lt;br /&gt;
00:1c.1 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 2 (rev 03)                                                                      &lt;br /&gt;
00:1c.3 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 4 (rev 03)                                                                      &lt;br /&gt;
00:1d.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 03)                                                              &lt;br /&gt;
00:1d.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 03)&lt;br /&gt;
00:1d.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 03)&lt;br /&gt;
00:1d.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 03)&lt;br /&gt;
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 93)&lt;br /&gt;
00:1f.0 ISA bridge: Intel Corporation ICH9M-E LPC Interface Controller (rev 03)&lt;br /&gt;
00:1f.2 SATA controller: Intel Corporation ICH9M/M-E SATA AHCI Controller (rev 03)&lt;br /&gt;
00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 03)&lt;br /&gt;
03:00.0 Network controller: Intel Corporation PRO/Wireless 5100 AGN [Shiloh] Network Connection&lt;br /&gt;
15:00.0 CardBus bridge: Ricoh Co Ltd RL5c476 II (rev ba)&lt;br /&gt;
15:00.1 FireWire (IEEE 1394): Ricoh Co Ltd R5C832 IEEE 1394 Controller (rev 04)&lt;br /&gt;
15:00.2 SD Host controller: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev 21)&lt;br /&gt;
15:00.3 System peripheral: Ricoh Co Ltd R5C843 MMC Host Controller (rev ff)&lt;br /&gt;
15:00.4 System peripheral: Ricoh Co Ltd R5C592 Memory Stick Bus Host Adapter (rev 11)&lt;br /&gt;
15:00.5 System peripheral: Ricoh Co Ltd xD-Picture Card Controller (rev 11)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat /proc/cpuinfo &lt;br /&gt;
processor       : 0                          &lt;br /&gt;
vendor_id       : GenuineIntel               &lt;br /&gt;
cpu family      : 6                          &lt;br /&gt;
model           : 15                         &lt;br /&gt;
model name      : Intel(R) Core(TM)2 Duo CPU     T5870  @ 2.00GHz&lt;br /&gt;
stepping        : 13                                             &lt;br /&gt;
cpu MHz         : 800.000                                        &lt;br /&gt;
cache size      : 2048 KB                                        &lt;br /&gt;
physical id     : 0                                              &lt;br /&gt;
siblings        : 2                                              &lt;br /&gt;
core id         : 0                                              &lt;br /&gt;
cpu cores       : 2                                              &lt;br /&gt;
apicid          : 0                                              &lt;br /&gt;
initial apicid  : 0                                              &lt;br /&gt;
fpu             : yes                                            &lt;br /&gt;
fpu_exception   : yes                                            &lt;br /&gt;
cpuid level     : 10                                             &lt;br /&gt;
wp              : yes                                            &lt;br /&gt;
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm ida                                                  &lt;br /&gt;
bogomips        : 3991.89                                                     &lt;br /&gt;
clflush size    : 64                                                          &lt;br /&gt;
cache_alignment : 64                                                          &lt;br /&gt;
address sizes   : 36 bits physical, 48 bits virtual                           &lt;br /&gt;
power management:                                                             &lt;br /&gt;
&lt;br /&gt;
processor       : 1&lt;br /&gt;
vendor_id       : GenuineIntel&lt;br /&gt;
cpu family      : 6           &lt;br /&gt;
model           : 15          &lt;br /&gt;
model name      : Intel(R) Core(TM)2 Duo CPU     T5870  @ 2.00GHz&lt;br /&gt;
stepping        : 13&lt;br /&gt;
cpu MHz         : 800.000&lt;br /&gt;
cache size      : 2048 KB&lt;br /&gt;
physical id     : 0&lt;br /&gt;
siblings        : 2&lt;br /&gt;
core id         : 1&lt;br /&gt;
cpu cores       : 2&lt;br /&gt;
apicid          : 1&lt;br /&gt;
initial apicid  : 1&lt;br /&gt;
fpu             : yes&lt;br /&gt;
fpu_exception   : yes&lt;br /&gt;
cpuid level     : 10&lt;br /&gt;
wp              : yes&lt;br /&gt;
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm ida&lt;br /&gt;
bogomips        : 3991.24&lt;br /&gt;
clflush size    : 64&lt;br /&gt;
cache_alignment : 64&lt;br /&gt;
address sizes   : 36 bits physical, 48 bits virtual&lt;br /&gt;
power management:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vogo</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=7443-C1G&amp;diff=43411</id>
		<title>7443-C1G</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=7443-C1G&amp;diff=43411"/>
		<updated>2009-06-08T16:54:36Z</updated>

		<summary type="html">&lt;p&gt;Vogo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=General=&lt;br /&gt;
Model Name:  7443C1G&lt;br /&gt;
&lt;br /&gt;
Description:  ThinkPad R400&lt;br /&gt;
 &lt;br /&gt;
=Operating System=&lt;br /&gt;
Genuine Windows is authentic Windows software that is properly licensed and legally installed. Learn more about the special benefits reserved for genuine Windows customers by visiting www.microsoft.com/genuine &lt;br /&gt;
&lt;br /&gt;
Operating system provided:  Genuine Windows Vista Business&lt;br /&gt;
&lt;br /&gt;
=Architecture=&lt;br /&gt;
Bus type/architecture:  PCI/PCI Express&lt;br /&gt;
&lt;br /&gt;
Bays:   Ultrabay Enhanced &lt;br /&gt;
&lt;br /&gt;
Indicator light:&lt;br /&gt;
&lt;br /&gt;
Form Factor:  Notebook&lt;br /&gt;
&lt;br /&gt;
=Display=&lt;br /&gt;
External display supported:&lt;br /&gt;
&lt;br /&gt;
Simultaneous external display:&lt;br /&gt;
&lt;br /&gt;
Screen type description:   WXGA TFT&lt;br /&gt;
&lt;br /&gt;
Viewable image size (diagonal):  14.1inches&lt;br /&gt;
&lt;br /&gt;
Screen illumination:  CCFL Backlight&lt;br /&gt;
&lt;br /&gt;
Max colors or grey shades:  16777216&lt;br /&gt;
&lt;br /&gt;
Max resolution:  1280x800&lt;br /&gt;
&lt;br /&gt;
=Graphics Subsystem=&lt;br /&gt;
Video RAM std/max:   -- / --&lt;br /&gt;
&lt;br /&gt;
Graphics chipset:  Intel Graphics Media Accelerator 4500MHD&lt;br /&gt;
&lt;br /&gt;
Graphics type:  --&lt;br /&gt;
&lt;br /&gt;
Video RAM type:  DVMT&lt;br /&gt;
&lt;br /&gt;
Max resolution (with max video RAM):  2048x1536 16777216 colors&lt;br /&gt;
&lt;br /&gt;
Max colors (with max video RAM):  16777216&lt;br /&gt;
&lt;br /&gt;
Graphics bus interface:  PCI Express&lt;br /&gt;
&lt;br /&gt;
=Processor =&lt;br /&gt;
BIOS type:   Flash ROM&lt;br /&gt;
&lt;br /&gt;
Processor manufacturer:   Intel&lt;br /&gt;
&lt;br /&gt;
Processor (CPU):  Intel® Core 2 Duo processor T5870&lt;br /&gt;
&lt;br /&gt;
Processor internal clock speed2:   2GHz&lt;br /&gt;
&lt;br /&gt;
Front Side Bus:  800MHz&lt;br /&gt;
&lt;br /&gt;
=Memory=&lt;br /&gt;
Memory (RAM) std/max:  2x1GB / 4GB&lt;br /&gt;
&lt;br /&gt;
RAM slots total:   2 SODIMM&lt;br /&gt;
&lt;br /&gt;
RAM slots available:   0 SODIMM&lt;br /&gt;
&lt;br /&gt;
RAM speed supported:  1066MHz&lt;br /&gt;
&lt;br /&gt;
RAM type:  PC3-8500 DDR3 SDRAM&lt;br /&gt;
&lt;br /&gt;
=Hard Disk=&lt;br /&gt;
Hard disk size1:  250GB&lt;br /&gt;
&lt;br /&gt;
Hard disk type:  Serial ATA&lt;br /&gt;
&lt;br /&gt;
=Optical device=&lt;br /&gt;
Floppy diskette size:   --&lt;br /&gt;
&lt;br /&gt;
Optical device:   DVD Recordable&lt;br /&gt;
&lt;br /&gt;
Optical device speed8:  24X Max&lt;br /&gt;
&lt;br /&gt;
Device interface:  EIDE&lt;br /&gt;
&lt;br /&gt;
=Audio=&lt;br /&gt;
Integrated speakers:   2&lt;br /&gt;
&lt;br /&gt;
Speaker power rating:   2 Watts&lt;br /&gt;
&lt;br /&gt;
Volume control buttons:&lt;br /&gt;
&lt;br /&gt;
Speaker Quantity:   2 (Internal Speakers)&lt;br /&gt;
&lt;br /&gt;
Audio chipset:  Intel High Definition Audio&lt;br /&gt;
&lt;br /&gt;
Audio data width:  24-bit&lt;br /&gt;
&lt;br /&gt;
=Communications=&lt;br /&gt;
Fax/modem:  56K V.92 designed modem AMOM&lt;br /&gt;
&lt;br /&gt;
Fax/modem speeds:  56Kbps data/14.4Kbps fax&lt;br /&gt;
&lt;br /&gt;
Infrared port:   No&lt;br /&gt;
&lt;br /&gt;
Infrared port speed:   --&lt;br /&gt;
&lt;br /&gt;
Wireless standard:   Intel WiFi Link 5100AGN&lt;br /&gt;
&lt;br /&gt;
Network card:   Integrated Intel 82567LM Gigabit Network Adapter&lt;br /&gt;
&lt;br /&gt;
Network interface:   Gigabit Ethernet- Integrated&lt;br /&gt;
&lt;br /&gt;
=Accessories=&lt;br /&gt;
A/C adapter:&lt;br /&gt;
&lt;br /&gt;
Worldwide A/C compatibility:  Yes&lt;br /&gt;
&lt;br /&gt;
Port replicator:&lt;br /&gt;
&lt;br /&gt;
=Standard Features=&lt;br /&gt;
Pointing device type:  UltraNav (TrackPoint and TouchPad)&lt;br /&gt;
&lt;br /&gt;
Keyboard type:  Full size&lt;br /&gt;
&lt;br /&gt;
Keyboard light:  Yes&lt;br /&gt;
&lt;br /&gt;
=Power Management=&lt;br /&gt;
Heat emissions:   90W&lt;br /&gt;
&lt;br /&gt;
Sound emissions:   40dB&lt;br /&gt;
&lt;br /&gt;
Battery life - min/max:   5.6 Hrs&lt;br /&gt;
&lt;br /&gt;
Battery type(s):   6 Cell Lithium-Ion&lt;br /&gt;
&lt;br /&gt;
Charge time - on/off:  6.0Hrs / 3.5Hrs&lt;br /&gt;
&lt;br /&gt;
=Expansion Options=&lt;br /&gt;
Plug and play support:&lt;br /&gt;
&lt;br /&gt;
Slots total (free) and type:   PCI/PCI Express&lt;br /&gt;
&lt;br /&gt;
Parallel port type:&lt;br /&gt;
&lt;br /&gt;
Ports:&lt;br /&gt;
&lt;br /&gt;
=Weight &amp;amp; Dimensions=&lt;br /&gt;
Weight:  2.4Kg&lt;br /&gt;
&lt;br /&gt;
Height:   34.9mm&lt;br /&gt;
&lt;br /&gt;
Width:    335.5mm &lt;br /&gt;
&lt;br /&gt;
Depth:    238mm&lt;br /&gt;
&lt;br /&gt;
Travel weight:  2.32Kgs&lt;br /&gt;
&lt;br /&gt;
=Security =&lt;br /&gt;
Security features:  Power-on password&lt;br /&gt;
&lt;br /&gt;
Security lock slot&lt;br /&gt;
&lt;br /&gt;
Supervisor password&lt;br /&gt;
&lt;br /&gt;
Hard disk drive password&lt;br /&gt;
&lt;br /&gt;
Integrated fingerprint reader&lt;br /&gt;
&lt;br /&gt;
Client Security Solution&lt;br /&gt;
&lt;br /&gt;
=Limited warranty=&lt;br /&gt;
Type of service:  Customer Carry-in Repair&lt;br /&gt;
&lt;br /&gt;
Warranty period:   One year parts and labor (system battery: one year)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Software=&lt;br /&gt;
Supported operating systems:&lt;br /&gt;
&lt;br /&gt;
Communication/networking:   &lt;br /&gt;
&lt;br /&gt;
Device drivers/utilities:&lt;br /&gt;
&lt;br /&gt;
Multimedia applications:&lt;br /&gt;
&lt;br /&gt;
Productivity applications:&lt;br /&gt;
&lt;br /&gt;
Other applications provided:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ lspci&lt;br /&gt;
00:00.0 Host bridge: Intel Corporation Mobile 4 Series Chipset Memory Controller Hub (rev 07)                                                               &lt;br /&gt;
00:02.0 VGA compatible controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07)                                        &lt;br /&gt;
00:02.1 Display controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07)                                               &lt;br /&gt;
00:03.0 Communication controller: Intel Corporation Mobile 4 Series Chipset MEI Controller (rev 07)                                                         &lt;br /&gt;
00:19.0 Ethernet controller: Intel Corporation 82567LM Gigabit Network Connection (rev 03)                                                                  &lt;br /&gt;
00:1a.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 (rev 03)                                                              &lt;br /&gt;
00:1a.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #5 (rev 03)                                                              &lt;br /&gt;
00:1a.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #6 (rev 03)                                                              &lt;br /&gt;
00:1a.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #2 (rev 03)                                                             &lt;br /&gt;
00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio Controller (rev 03)                                                                   &lt;br /&gt;
00:1c.0 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 1 (rev 03)                                                                      &lt;br /&gt;
00:1c.1 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 2 (rev 03)                                                                      &lt;br /&gt;
00:1c.3 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 4 (rev 03)                                                                      &lt;br /&gt;
00:1d.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 03)                                                              &lt;br /&gt;
00:1d.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 03)&lt;br /&gt;
00:1d.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 03)&lt;br /&gt;
00:1d.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 03)&lt;br /&gt;
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 93)&lt;br /&gt;
00:1f.0 ISA bridge: Intel Corporation ICH9M-E LPC Interface Controller (rev 03)&lt;br /&gt;
00:1f.2 SATA controller: Intel Corporation ICH9M/M-E SATA AHCI Controller (rev 03)&lt;br /&gt;
00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 03)&lt;br /&gt;
03:00.0 Network controller: Intel Corporation PRO/Wireless 5100 AGN [Shiloh] Network Connection&lt;br /&gt;
15:00.0 CardBus bridge: Ricoh Co Ltd RL5c476 II (rev ba)&lt;br /&gt;
15:00.1 FireWire (IEEE 1394): Ricoh Co Ltd R5C832 IEEE 1394 Controller (rev 04)&lt;br /&gt;
15:00.2 SD Host controller: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev 21)&lt;br /&gt;
15:00.3 System peripheral: Ricoh Co Ltd R5C843 MMC Host Controller (rev ff)&lt;br /&gt;
15:00.4 System peripheral: Ricoh Co Ltd R5C592 Memory Stick Bus Host Adapter (rev 11)&lt;br /&gt;
15:00.5 System peripheral: Ricoh Co Ltd xD-Picture Card Controller (rev 11)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat /proc/cpuinfo &lt;br /&gt;
processor       : 0                          &lt;br /&gt;
vendor_id       : GenuineIntel               &lt;br /&gt;
cpu family      : 6                          &lt;br /&gt;
model           : 15                         &lt;br /&gt;
model name      : Intel(R) Core(TM)2 Duo CPU     T5870  @ 2.00GHz&lt;br /&gt;
stepping        : 13                                             &lt;br /&gt;
cpu MHz         : 800.000                                        &lt;br /&gt;
cache size      : 2048 KB                                        &lt;br /&gt;
physical id     : 0                                              &lt;br /&gt;
siblings        : 2                                              &lt;br /&gt;
core id         : 0                                              &lt;br /&gt;
cpu cores       : 2                                              &lt;br /&gt;
apicid          : 0                                              &lt;br /&gt;
initial apicid  : 0                                              &lt;br /&gt;
fpu             : yes                                            &lt;br /&gt;
fpu_exception   : yes                                            &lt;br /&gt;
cpuid level     : 10                                             &lt;br /&gt;
wp              : yes                                            &lt;br /&gt;
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm ida                                                  &lt;br /&gt;
bogomips        : 3991.89                                                     &lt;br /&gt;
clflush size    : 64                                                          &lt;br /&gt;
cache_alignment : 64                                                          &lt;br /&gt;
address sizes   : 36 bits physical, 48 bits virtual                           &lt;br /&gt;
power management:                                                             &lt;br /&gt;
&lt;br /&gt;
processor       : 1&lt;br /&gt;
vendor_id       : GenuineIntel&lt;br /&gt;
cpu family      : 6           &lt;br /&gt;
model           : 15          &lt;br /&gt;
model name      : Intel(R) Core(TM)2 Duo CPU     T5870  @ 2.00GHz&lt;br /&gt;
stepping        : 13&lt;br /&gt;
cpu MHz         : 800.000&lt;br /&gt;
cache size      : 2048 KB&lt;br /&gt;
physical id     : 0&lt;br /&gt;
siblings        : 2&lt;br /&gt;
core id         : 1&lt;br /&gt;
cpu cores       : 2&lt;br /&gt;
apicid          : 1&lt;br /&gt;
initial apicid  : 1&lt;br /&gt;
fpu             : yes&lt;br /&gt;
fpu_exception   : yes&lt;br /&gt;
cpuid level     : 10&lt;br /&gt;
wp              : yes&lt;br /&gt;
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm ida&lt;br /&gt;
bogomips        : 3991.24&lt;br /&gt;
clflush size    : 64&lt;br /&gt;
cache_alignment : 64&lt;br /&gt;
address sizes   : 36 bits physical, 48 bits virtual&lt;br /&gt;
power management:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vogo</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=7443-C1G&amp;diff=43410</id>
		<title>7443-C1G</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=7443-C1G&amp;diff=43410"/>
		<updated>2009-06-08T16:51:30Z</updated>

		<summary type="html">&lt;p&gt;Vogo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=General=&lt;br /&gt;
Model Name:  7443C1G&lt;br /&gt;
Description:  ThinkPad R400&lt;br /&gt;
 &lt;br /&gt;
=Operating System=&lt;br /&gt;
Genuine Windows is authentic Windows software that is properly licensed and legally installed. Learn more about the special benefits reserved for genuine Windows customers by visiting www.microsoft.com/genuine &lt;br /&gt;
Operating system provided:  Genuine Windows Vista Business&lt;br /&gt;
&lt;br /&gt;
=Architecture=&lt;br /&gt;
Bus type/architecture:  PCI/PCI Express&lt;br /&gt;
Bays:   Ultrabay Enhanced &lt;br /&gt;
Indicator light:&lt;br /&gt;
Form Factor:  Notebook&lt;br /&gt;
&lt;br /&gt;
=Display=&lt;br /&gt;
External display supported:&lt;br /&gt;
Simultaneous external display:&lt;br /&gt;
Screen type description:   WXGA TFT&lt;br /&gt;
Viewable image size (diagonal):  14.1inches&lt;br /&gt;
Screen illumination:  CCFL Backlight&lt;br /&gt;
Max colors or grey shades:  16777216&lt;br /&gt;
Max resolution:  1280x800&lt;br /&gt;
&lt;br /&gt;
=Graphics Subsystem=&lt;br /&gt;
Video RAM std/max:   -- / --&lt;br /&gt;
Graphics chipset:  Intel Graphics Media Accelerator 4500MHD&lt;br /&gt;
Graphics type:  --&lt;br /&gt;
Video RAM type:  DVMT&lt;br /&gt;
Max resolution (with max video RAM):  2048x1536 16777216 colors&lt;br /&gt;
Max colors (with max video RAM):  16777216&lt;br /&gt;
Graphics bus interface:  PCI Express&lt;br /&gt;
&lt;br /&gt;
=Processor =&lt;br /&gt;
BIOS type:   Flash ROM&lt;br /&gt;
Processor manufacturer:   Intel&lt;br /&gt;
Processor (CPU):  Intel® Core 2 Duo processor T5870&lt;br /&gt;
Processor internal clock speed2:   2GHz&lt;br /&gt;
Front Side Bus:  800MHz&lt;br /&gt;
&lt;br /&gt;
=Memory=&lt;br /&gt;
Memory (RAM) std/max:  2x1GB / 4GB&lt;br /&gt;
RAM slots total:   2 SODIMM&lt;br /&gt;
RAM slots available:   0 SODIMM&lt;br /&gt;
RAM speed supported:  1066MHz&lt;br /&gt;
RAM type:  PC3-8500 DDR3 SDRAM&lt;br /&gt;
&lt;br /&gt;
=Hard Disk=&lt;br /&gt;
Hard disk size1:  250GB&lt;br /&gt;
Hard disk type:  Serial ATA&lt;br /&gt;
&lt;br /&gt;
=Optical device=&lt;br /&gt;
Floppy diskette size:   --&lt;br /&gt;
Optical device:   DVD Recordable&lt;br /&gt;
Optical device speed8:  24X Max&lt;br /&gt;
Device interface:  EIDE&lt;br /&gt;
&lt;br /&gt;
=Audio=&lt;br /&gt;
Integrated speakers:   2&lt;br /&gt;
Speaker power rating:   2 Watts&lt;br /&gt;
Volume control buttons:&lt;br /&gt;
Speaker Quantity:   2 (Internal Speakers)&lt;br /&gt;
Audio chipset:  Intel High Definition Audio&lt;br /&gt;
Audio data width:  24-bit&lt;br /&gt;
&lt;br /&gt;
=Communications=&lt;br /&gt;
Fax/modem:  56K V.92 designed modem AMOM&lt;br /&gt;
Fax/modem speeds:  56Kbps data/14.4Kbps fax&lt;br /&gt;
Infrared port:   No&lt;br /&gt;
Infrared port speed:   --&lt;br /&gt;
Wireless standard:   Intel WiFi Link 5100AGN&lt;br /&gt;
Network card:   Integrated Intel 82567LM Gigabit Network Adapter&lt;br /&gt;
Network interface:   Gigabit Ethernet- Integrated&lt;br /&gt;
&lt;br /&gt;
=Accessories=&lt;br /&gt;
A/C adapter:&lt;br /&gt;
Worldwide A/C compatibility:  Yes&lt;br /&gt;
Port replicator:&lt;br /&gt;
&lt;br /&gt;
=Standard Features=&lt;br /&gt;
Pointing device type:  UltraNav (TrackPoint and TouchPad)&lt;br /&gt;
Keyboard type:  Full size&lt;br /&gt;
Keyboard light:  Yes&lt;br /&gt;
&lt;br /&gt;
=Power Management=&lt;br /&gt;
Heat emissions:   90W&lt;br /&gt;
Sound emissions:   40dB&lt;br /&gt;
Battery life - min/max:   5.6 Hrs&lt;br /&gt;
Battery type(s):   6 Cell Lithium-Ion&lt;br /&gt;
Charge time - on/off:  6.0Hrs / 3.5Hrs&lt;br /&gt;
&lt;br /&gt;
=Expansion Options=&lt;br /&gt;
Plug and play support:&lt;br /&gt;
Slots total (free) and type:   PCI/PCI Express&lt;br /&gt;
Parallel port type:&lt;br /&gt;
Ports:&lt;br /&gt;
&lt;br /&gt;
=Weight &amp;amp; Dimensions=&lt;br /&gt;
Weight:  2.4Kg&lt;br /&gt;
Height:   34.9mm&lt;br /&gt;
Width:    335.5mm &lt;br /&gt;
Depth:    238mm&lt;br /&gt;
Travel weight:  2.32Kgs&lt;br /&gt;
&lt;br /&gt;
=Security =&lt;br /&gt;
Security features:  Power-on password&lt;br /&gt;
Security lock slot&lt;br /&gt;
Supervisor password&lt;br /&gt;
Hard disk drive password&lt;br /&gt;
Integrated fingerprint reader&lt;br /&gt;
Client Security Solution&lt;br /&gt;
&lt;br /&gt;
=Limited warranty=&lt;br /&gt;
Type of service:  Customer Carry-in Repair&lt;br /&gt;
Warranty period:   One year parts and labor (system battery: one year)&lt;br /&gt;
&lt;br /&gt;
=Software=&lt;br /&gt;
Supported operating systems:&lt;br /&gt;
Communication/networking:   &lt;br /&gt;
Device drivers/utilities:&lt;br /&gt;
Multimedia applications:&lt;br /&gt;
Productivity applications:&lt;br /&gt;
Other applications provided:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ lspci&lt;br /&gt;
00:00.0 Host bridge: Intel Corporation Mobile 4 Series Chipset Memory Controller Hub (rev 07)                                                               &lt;br /&gt;
00:02.0 VGA compatible controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07)                                        &lt;br /&gt;
00:02.1 Display controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07)                                               &lt;br /&gt;
00:03.0 Communication controller: Intel Corporation Mobile 4 Series Chipset MEI Controller (rev 07)                                                         &lt;br /&gt;
00:19.0 Ethernet controller: Intel Corporation 82567LM Gigabit Network Connection (rev 03)                                                                  &lt;br /&gt;
00:1a.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 (rev 03)                                                              &lt;br /&gt;
00:1a.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #5 (rev 03)                                                              &lt;br /&gt;
00:1a.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #6 (rev 03)                                                              &lt;br /&gt;
00:1a.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #2 (rev 03)                                                             &lt;br /&gt;
00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio Controller (rev 03)                                                                   &lt;br /&gt;
00:1c.0 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 1 (rev 03)                                                                      &lt;br /&gt;
00:1c.1 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 2 (rev 03)                                                                      &lt;br /&gt;
00:1c.3 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 4 (rev 03)                                                                      &lt;br /&gt;
00:1d.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 03)                                                              &lt;br /&gt;
00:1d.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 03)&lt;br /&gt;
00:1d.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 03)&lt;br /&gt;
00:1d.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 03)&lt;br /&gt;
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 93)&lt;br /&gt;
00:1f.0 ISA bridge: Intel Corporation ICH9M-E LPC Interface Controller (rev 03)&lt;br /&gt;
00:1f.2 SATA controller: Intel Corporation ICH9M/M-E SATA AHCI Controller (rev 03)&lt;br /&gt;
00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 03)&lt;br /&gt;
03:00.0 Network controller: Intel Corporation PRO/Wireless 5100 AGN [Shiloh] Network Connection&lt;br /&gt;
15:00.0 CardBus bridge: Ricoh Co Ltd RL5c476 II (rev ba)&lt;br /&gt;
15:00.1 FireWire (IEEE 1394): Ricoh Co Ltd R5C832 IEEE 1394 Controller (rev 04)&lt;br /&gt;
15:00.2 SD Host controller: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev 21)&lt;br /&gt;
15:00.3 System peripheral: Ricoh Co Ltd R5C843 MMC Host Controller (rev ff)&lt;br /&gt;
15:00.4 System peripheral: Ricoh Co Ltd R5C592 Memory Stick Bus Host Adapter (rev 11)&lt;br /&gt;
15:00.5 System peripheral: Ricoh Co Ltd xD-Picture Card Controller (rev 11)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat /proc/cpuinfo &lt;br /&gt;
processor       : 0                          &lt;br /&gt;
vendor_id       : GenuineIntel               &lt;br /&gt;
cpu family      : 6                          &lt;br /&gt;
model           : 15                         &lt;br /&gt;
model name      : Intel(R) Core(TM)2 Duo CPU     T5870  @ 2.00GHz&lt;br /&gt;
stepping        : 13                                             &lt;br /&gt;
cpu MHz         : 800.000                                        &lt;br /&gt;
cache size      : 2048 KB                                        &lt;br /&gt;
physical id     : 0                                              &lt;br /&gt;
siblings        : 2                                              &lt;br /&gt;
core id         : 0                                              &lt;br /&gt;
cpu cores       : 2                                              &lt;br /&gt;
apicid          : 0                                              &lt;br /&gt;
initial apicid  : 0                                              &lt;br /&gt;
fpu             : yes                                            &lt;br /&gt;
fpu_exception   : yes                                            &lt;br /&gt;
cpuid level     : 10                                             &lt;br /&gt;
wp              : yes                                            &lt;br /&gt;
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm ida                                                  &lt;br /&gt;
bogomips        : 3991.89                                                     &lt;br /&gt;
clflush size    : 64                                                          &lt;br /&gt;
cache_alignment : 64                                                          &lt;br /&gt;
address sizes   : 36 bits physical, 48 bits virtual                           &lt;br /&gt;
power management:                                                             &lt;br /&gt;
&lt;br /&gt;
processor       : 1&lt;br /&gt;
vendor_id       : GenuineIntel&lt;br /&gt;
cpu family      : 6           &lt;br /&gt;
model           : 15          &lt;br /&gt;
model name      : Intel(R) Core(TM)2 Duo CPU     T5870  @ 2.00GHz&lt;br /&gt;
stepping        : 13&lt;br /&gt;
cpu MHz         : 800.000&lt;br /&gt;
cache size      : 2048 KB&lt;br /&gt;
physical id     : 0&lt;br /&gt;
siblings        : 2&lt;br /&gt;
core id         : 1&lt;br /&gt;
cpu cores       : 2&lt;br /&gt;
apicid          : 1&lt;br /&gt;
initial apicid  : 1&lt;br /&gt;
fpu             : yes&lt;br /&gt;
fpu_exception   : yes&lt;br /&gt;
cpuid level     : 10&lt;br /&gt;
wp              : yes&lt;br /&gt;
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm ida&lt;br /&gt;
bogomips        : 3991.24&lt;br /&gt;
clflush size    : 64&lt;br /&gt;
cache_alignment : 64&lt;br /&gt;
address sizes   : 36 bits physical, 48 bits virtual&lt;br /&gt;
power management:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vogo</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=7443-C1G&amp;diff=43409</id>
		<title>7443-C1G</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=7443-C1G&amp;diff=43409"/>
		<updated>2009-06-08T16:40:49Z</updated>

		<summary type="html">&lt;p&gt;Vogo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
$ lspci&lt;br /&gt;
00:00.0 Host bridge: Intel Corporation Mobile 4 Series Chipset Memory Controller Hub (rev 07)                                                               &lt;br /&gt;
00:02.0 VGA compatible controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07)                                        &lt;br /&gt;
00:02.1 Display controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07)                                               &lt;br /&gt;
00:03.0 Communication controller: Intel Corporation Mobile 4 Series Chipset MEI Controller (rev 07)                                                         &lt;br /&gt;
00:19.0 Ethernet controller: Intel Corporation 82567LM Gigabit Network Connection (rev 03)                                                                  &lt;br /&gt;
00:1a.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 (rev 03)                                                              &lt;br /&gt;
00:1a.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #5 (rev 03)                                                              &lt;br /&gt;
00:1a.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #6 (rev 03)                                                              &lt;br /&gt;
00:1a.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #2 (rev 03)                                                             &lt;br /&gt;
00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio Controller (rev 03)                                                                   &lt;br /&gt;
00:1c.0 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 1 (rev 03)                                                                      &lt;br /&gt;
00:1c.1 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 2 (rev 03)                                                                      &lt;br /&gt;
00:1c.3 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 4 (rev 03)                                                                      &lt;br /&gt;
00:1d.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 03)                                                              &lt;br /&gt;
00:1d.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 03)&lt;br /&gt;
00:1d.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 03)&lt;br /&gt;
00:1d.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 03)&lt;br /&gt;
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 93)&lt;br /&gt;
00:1f.0 ISA bridge: Intel Corporation ICH9M-E LPC Interface Controller (rev 03)&lt;br /&gt;
00:1f.2 SATA controller: Intel Corporation ICH9M/M-E SATA AHCI Controller (rev 03)&lt;br /&gt;
00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 03)&lt;br /&gt;
03:00.0 Network controller: Intel Corporation PRO/Wireless 5100 AGN [Shiloh] Network Connection&lt;br /&gt;
15:00.0 CardBus bridge: Ricoh Co Ltd RL5c476 II (rev ba)&lt;br /&gt;
15:00.1 FireWire (IEEE 1394): Ricoh Co Ltd R5C832 IEEE 1394 Controller (rev 04)&lt;br /&gt;
15:00.2 SD Host controller: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev 21)&lt;br /&gt;
15:00.3 System peripheral: Ricoh Co Ltd R5C843 MMC Host Controller (rev ff)&lt;br /&gt;
15:00.4 System peripheral: Ricoh Co Ltd R5C592 Memory Stick Bus Host Adapter (rev 11)&lt;br /&gt;
15:00.5 System peripheral: Ricoh Co Ltd xD-Picture Card Controller (rev 11)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat /proc/cpuinfo &lt;br /&gt;
processor       : 0                          &lt;br /&gt;
vendor_id       : GenuineIntel               &lt;br /&gt;
cpu family      : 6                          &lt;br /&gt;
model           : 15                         &lt;br /&gt;
model name      : Intel(R) Core(TM)2 Duo CPU     T5870  @ 2.00GHz&lt;br /&gt;
stepping        : 13                                             &lt;br /&gt;
cpu MHz         : 800.000                                        &lt;br /&gt;
cache size      : 2048 KB                                        &lt;br /&gt;
physical id     : 0                                              &lt;br /&gt;
siblings        : 2                                              &lt;br /&gt;
core id         : 0                                              &lt;br /&gt;
cpu cores       : 2                                              &lt;br /&gt;
apicid          : 0                                              &lt;br /&gt;
initial apicid  : 0                                              &lt;br /&gt;
fpu             : yes                                            &lt;br /&gt;
fpu_exception   : yes                                            &lt;br /&gt;
cpuid level     : 10                                             &lt;br /&gt;
wp              : yes                                            &lt;br /&gt;
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm ida                                                  &lt;br /&gt;
bogomips        : 3991.89                                                     &lt;br /&gt;
clflush size    : 64                                                          &lt;br /&gt;
cache_alignment : 64                                                          &lt;br /&gt;
address sizes   : 36 bits physical, 48 bits virtual                           &lt;br /&gt;
power management:                                                             &lt;br /&gt;
&lt;br /&gt;
processor       : 1&lt;br /&gt;
vendor_id       : GenuineIntel&lt;br /&gt;
cpu family      : 6           &lt;br /&gt;
model           : 15          &lt;br /&gt;
model name      : Intel(R) Core(TM)2 Duo CPU     T5870  @ 2.00GHz&lt;br /&gt;
stepping        : 13&lt;br /&gt;
cpu MHz         : 800.000&lt;br /&gt;
cache size      : 2048 KB&lt;br /&gt;
physical id     : 0&lt;br /&gt;
siblings        : 2&lt;br /&gt;
core id         : 1&lt;br /&gt;
cpu cores       : 2&lt;br /&gt;
apicid          : 1&lt;br /&gt;
initial apicid  : 1&lt;br /&gt;
fpu             : yes&lt;br /&gt;
fpu_exception   : yes&lt;br /&gt;
cpuid level     : 10&lt;br /&gt;
wp              : yes&lt;br /&gt;
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good pni dtes64 monitor ds_cpl est tm2 ssse3 cx16 xtpr pdcm lahf_lm ida&lt;br /&gt;
bogomips        : 3991.24&lt;br /&gt;
clflush size    : 64&lt;br /&gt;
cache_alignment : 64&lt;br /&gt;
address sizes   : 36 bits physical, 48 bits virtual&lt;br /&gt;
power management:&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vogo</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=7443-C1G&amp;diff=43408</id>
		<title>7443-C1G</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=7443-C1G&amp;diff=43408"/>
		<updated>2009-06-08T16:39:22Z</updated>

		<summary type="html">&lt;p&gt;Vogo: â†Created page with '&amp;lt;pre&amp;gt; 00:00.0 Host bridge: Intel Corporation Mobile 4 Series Chipset Memory Controller Hub (rev 07)                                                                00:02.0 ...'&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
00:00.0 Host bridge: Intel Corporation Mobile 4 Series Chipset Memory Controller Hub (rev 07)                                                               &lt;br /&gt;
00:02.0 VGA compatible controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07)                                        &lt;br /&gt;
00:02.1 Display controller: Intel Corporation Mobile 4 Series Chipset Integrated Graphics Controller (rev 07)                                               &lt;br /&gt;
00:03.0 Communication controller: Intel Corporation Mobile 4 Series Chipset MEI Controller (rev 07)                                                         &lt;br /&gt;
00:19.0 Ethernet controller: Intel Corporation 82567LM Gigabit Network Connection (rev 03)                                                                  &lt;br /&gt;
00:1a.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #4 (rev 03)                                                              &lt;br /&gt;
00:1a.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #5 (rev 03)                                                              &lt;br /&gt;
00:1a.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #6 (rev 03)                                                              &lt;br /&gt;
00:1a.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #2 (rev 03)                                                             &lt;br /&gt;
00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio Controller (rev 03)                                                                   &lt;br /&gt;
00:1c.0 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 1 (rev 03)                                                                      &lt;br /&gt;
00:1c.1 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 2 (rev 03)                                                                      &lt;br /&gt;
00:1c.3 PCI bridge: Intel Corporation 82801I (ICH9 Family) PCI Express Port 4 (rev 03)                                                                      &lt;br /&gt;
00:1d.0 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #1 (rev 03)                                                              &lt;br /&gt;
00:1d.1 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #2 (rev 03)&lt;br /&gt;
00:1d.2 USB Controller: Intel Corporation 82801I (ICH9 Family) USB UHCI Controller #3 (rev 03)&lt;br /&gt;
00:1d.7 USB Controller: Intel Corporation 82801I (ICH9 Family) USB2 EHCI Controller #1 (rev 03)&lt;br /&gt;
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 93)&lt;br /&gt;
00:1f.0 ISA bridge: Intel Corporation ICH9M-E LPC Interface Controller (rev 03)&lt;br /&gt;
00:1f.2 SATA controller: Intel Corporation ICH9M/M-E SATA AHCI Controller (rev 03)&lt;br /&gt;
00:1f.3 SMBus: Intel Corporation 82801I (ICH9 Family) SMBus Controller (rev 03)&lt;br /&gt;
03:00.0 Network controller: Intel Corporation PRO/Wireless 5100 AGN [Shiloh] Network Connection&lt;br /&gt;
15:00.0 CardBus bridge: Ricoh Co Ltd RL5c476 II (rev ba)&lt;br /&gt;
15:00.1 FireWire (IEEE 1394): Ricoh Co Ltd R5C832 IEEE 1394 Controller (rev 04)&lt;br /&gt;
15:00.2 SD Host controller: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev 21)&lt;br /&gt;
15:00.3 System peripheral: Ricoh Co Ltd R5C843 MMC Host Controller (rev ff)&lt;br /&gt;
15:00.4 System peripheral: Ricoh Co Ltd R5C592 Memory Stick Bus Host Adapter (rev 11)&lt;br /&gt;
15:00.5 System peripheral: Ricoh Co Ltd xD-Picture Card Controller (rev 11)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vogo</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Hardware_Specifications&amp;diff=43407</id>
		<title>Hardware Specifications</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Hardware_Specifications&amp;diff=43407"/>
		<updated>2009-06-08T16:38:33Z</updated>

		<summary type="html">&lt;p&gt;Vogo: /* Available Models */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Usage|&lt;br /&gt;
*Choose a model name to get a list of all currently available information related to this Model.&lt;br /&gt;
*Choose a type-and-model number to get the specs of that specific model.&lt;br /&gt;
}}&lt;br /&gt;
Here you can learn about specific ThinkPads specifications.&lt;br /&gt;
&lt;br /&gt;
Furthermore, you may&lt;br /&gt;
*compare the [[ThinkPad series]] (G, R, T, W, X, Z),&lt;br /&gt;
*get an overview of the [[ThinkPad History]] or&lt;br /&gt;
*learn about the name [[ThinkPad]].&lt;br /&gt;
&lt;br /&gt;
==IBM/Lenovos hardware specs==&lt;br /&gt;
* '''Lenovo ThinkPads'''&lt;br /&gt;
** For current Lenovo ThinkPad R, T, W and X series models look for the official specs listed in [http://www.lenovo.com/psref/pdf/tabook.pdf tabook.pdf]&lt;br /&gt;
** For withdrawn Lenovo ThinkPads, look at [http://www.lenovo.com/psref/pdf/ltwbook.pdf ltwbook.pdf]&lt;br /&gt;
* '''Withdrawn IBM ThinkPads'''&lt;br /&gt;
** For A, G, T and X series models look for the official IBM specs listed in [http://www.lenovo.com/psref/pdf/tawbook.pdf tawbook.pdf]&lt;br /&gt;
** For R series models look for the official IBM specs listed in [http://www.lenovo.com/psref/pdf/trwbook.pdf trwbook.pdf]&lt;br /&gt;
** For i series models look for the official IBM specs listed in [http://www.lenovo.com/psref/pdf/tiwbook.pdf tiwbook.pdf]&lt;br /&gt;
** For 200, 300, 500, 600 and 700 series models look for the official IBM specs listed in [http://www.lenovo.com/psref/pdf/twbook.pdf twbook.pdf]&amp;lt;br&amp;gt;&lt;br /&gt;
** Or try searching the IBM announcements letters [http://www.ibm.com/news/usalet/ here].&lt;br /&gt;
&lt;br /&gt;
==Available Models==&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
|- style=&amp;quot;text-align:left;&amp;quot;&lt;br /&gt;
!Numbered!!A series!!G series!!R series!!S series!!SL series!!T series!!X series!!Z series!!W series!!others&lt;br /&gt;
|- style=&amp;quot;text-align:left;vertical-align:top;&amp;quot;&lt;br /&gt;
|&lt;br /&gt;
'''[[:Category:240 | ThinkPad 240]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:240X | ThinkPad 240X]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:240Z | ThinkPad 240Z]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:390X | ThinkPad 390X]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:560 | ThinkPad 560]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:560E | ThinkPad 560E]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:560X | ThinkPad 560X]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:560Z | ThinkPad 560Z]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:600 | ThinkPad 600]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:600E | ThinkPad 600E]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:600X | ThinkPad 600X]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:700 | ThinkPad 700]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:760ED | ThinkPad 760ED]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:760XD | ThinkPad 760XD]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:765L | ThinkPad 765L]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:765D | ThinkPad 765D]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:770 | ThinkPad 770]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:770E | ThinkPad 770E]]'''&lt;br /&gt;
*[[9548-510]]&lt;br /&gt;
*[[9548-51U]]&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:770X | ThinkPad 770X]]'''&lt;br /&gt;
*[[9549-7AO]]&lt;br /&gt;
'''[[:Category:770Z | ThinkPad 770Z]]'''&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
'''[[:Category:A20m | ThinkPad A20m]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:A20p | ThinkPad A20p]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:A21e | ThinkPad A21e]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:A21m | ThinkPad A21m]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:A21p | ThinkPad A21p]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:A22e | ThinkPad A22e]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:A22m | ThinkPad A22m]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:A22p | ThinkPad A22p]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:A30 | ThinkPad A30]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:A30p | ThinkPad A30p]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:A31 | ThinkPad A31]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:A31p | ThinkPad A31p]]'''&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
'''[[:Category:G40 | ThinkPad G40]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:G41 | ThinkPad G41]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:G50 | ThinkPad G50]]'''&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
'''[[:Category:R30 | ThinkPad R30]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:R31 | ThinkPad R31]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:R32 | ThinkPad R32]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:R40 | ThinkPad R40]]'''&lt;br /&gt;
*[[2722-9BM]]&lt;br /&gt;
*[[2722-DG1]]&lt;br /&gt;
*[[2722-BDG]]&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:R40e | ThinkPad R40e]]'''&lt;br /&gt;
*[[1834-9LG]]&lt;br /&gt;
*[[1834-J8G]]&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:R50 | ThinkPad R50]]'''&lt;br /&gt;
*[[1829-3HU]]&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:R50p | ThinkPad R50p]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:R50e | ThinkPad R50e]]'''&lt;br /&gt;
*[[1834-J8G]]&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:R51 | ThinkPad R51]]'''&lt;br /&gt;
*[[1829-K6G]]&lt;br /&gt;
*[[1829-L7G]]&lt;br /&gt;
*[[1830-DG4]]&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:R52 | ThinkPad R52]]'''&lt;br /&gt;
*[[1846-B5G]]&lt;br /&gt;
*[[1859-4AU]]&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:R60 | ThinkPad R60]]'''&lt;br /&gt;
*[[9456-6FG]]&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:R60e | ThinkPad R60e]]'''&lt;br /&gt;
*[[0657-3LG]]&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:R61 | ThinkPad R61]]'''&lt;br /&gt;
*[[7422-CTO]]&lt;br /&gt;
*[[8918-5QG]]&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:R61e | ThinkPad R61e]]'''&lt;br /&gt;
*[[7650-EFG]]&lt;br /&gt;
*[[7650-DNG]]&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:R400 | ThinkPad R400]]'''&lt;br /&gt;
*[[7443-TPA]]&lt;br /&gt;
*[[7443-C1G]]&lt;br /&gt;
'''[[:Category:R500 | ThinkPad R500]]'''&lt;br /&gt;
||&lt;br /&gt;
'''[[:Category:S30|ThinkPad S30]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:S31|ThinkPad S31]]'''&lt;br /&gt;
||&lt;br /&gt;
'''[[:Category:SL300|ThinkPad SL300]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:SL400|ThinkPad SL400]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:SL500|ThinkPad SL500]]'''&lt;br /&gt;
||&lt;br /&gt;
'''[[:Category:T20|ThinkPad T20]]'''&lt;br /&gt;
*[[2647-44G]]&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:T21|ThinkPad T21]]'''&lt;br /&gt;
*[[2647-97G]]&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:T22|ThinkPad T22]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:T23 | ThinkPad T23]]'''&lt;br /&gt;
*[[2647-9RG]]&lt;br /&gt;
*[[2647-7G1]]&lt;br /&gt;
*[[2647-8QU]]&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:T30 | ThinkPad T30]]'''&lt;br /&gt;
*[[2366-52U]]&lt;br /&gt;
*[[2366-91U]]&lt;br /&gt;
*[[2366-FBG]]&lt;br /&gt;
*[[2366-GU1]]&lt;br /&gt;
*[[2366-JBG]]&lt;br /&gt;
*[[2366-R7G]]&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:T40 | ThinkPad T40]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:T40p | ThinkPad T40p]]'''&lt;br /&gt;
*[[2373-G1U]]&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:T41 | ThinkPad T41]]'''&lt;br /&gt;
*[[2373-4QG]]&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:T41p | ThinkPad T41p]]'''&lt;br /&gt;
*[[2373-315]]&lt;br /&gt;
*[[2373-GGG]]&lt;br /&gt;
*[[2373-GHG]]&lt;br /&gt;
*[[2374-GGU]]&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:T42 | ThinkPad T42]]'''&lt;br /&gt;
*[[2373-6ZG]]&lt;br /&gt;
*[[2373-9XU]]&lt;br /&gt;
*[[2373-B09]]&lt;br /&gt;
*[[2373-CH6]]&lt;br /&gt;
*[[2373-F1G]]&lt;br /&gt;
*[[2373-F7G]]&lt;br /&gt;
*[[2373-FWG]]&lt;br /&gt;
*[[2373-M1G]]&lt;br /&gt;
*[[2373-VUW]]&lt;br /&gt;
*[[2373-WGK]]&lt;br /&gt;
*[[2378-FVU]]&lt;br /&gt;
*[[2378-RSU]]&lt;br /&gt;
*[[2379-DXU]]&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:T42p | ThinkPad T42p]]'''&lt;br /&gt;
*[[2373-HTG]]&lt;br /&gt;
*[[2373-W6M]]&lt;br /&gt;
*[[2373-Y4M]]&lt;br /&gt;
*[[2378-DYU]]&lt;br /&gt;
*[[2378-KXM]]&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:T43 | Thinkpad T43]]'''&lt;br /&gt;
*[[2668-A1U]]&lt;br /&gt;
*[[2668-C2U]]&lt;br /&gt;
*[[2668-84G]]&lt;br /&gt;
*[[2668-8AG]]&lt;br /&gt;
*[[2668-98U]]&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:T43p | Thinkpad T43p]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:T60 | ThinkPad T60]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:T60p | ThinkPad T60p]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:T61 | ThinkPad T61]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:T61p | ThinkPad T61p]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:T400 | ThinkPad T400]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:T500 | ThinkPad T500]]'''&lt;br /&gt;
||&lt;br /&gt;
'''[[:Category:X20 | ThinkPad X20]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:X21 | ThinkPad X21]]'''&lt;br /&gt;
*[[2662-66U]]&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:X22 | ThinkPad X22]]'''&lt;br /&gt;
*[[2662-95U]]&lt;br /&gt;
*[[2662-9BU]]&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:X23 | ThinkPad X23]]'''&lt;br /&gt;
*[[2662-EVJ]]&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:X24 | ThinkPad X24]]'''&lt;br /&gt;
*[[2662-MQG]]&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:X30 | ThinkPad X30]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:X31 | ThinkPad X31]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:X32 | ThinkPad X32]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:X40 | ThinkPad X40]]'''&lt;br /&gt;
*[[2371-AVC]]&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:X41 | ThinkPad X41]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:X41 Tablet | ThinkPad X41 Tablet]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:X60 | ThinkPad X60]]'''&lt;br /&gt;
*[[1706-BM3]]&lt;br /&gt;
*[[1706-BM7]]&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:X60s | ThinkPad X60s]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:X60_Tablet | ThinkPad X60 Tablet]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:X61 | ThinkPad X61]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:X61s | ThinkPad X61s]]'''&lt;br /&gt;
* [[7669-27G]]&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:X61_Tablet | ThinkPad X61 Tablet]]'''&lt;br /&gt;
* [[7762-95G]]&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:X300 | ThinkPad X300]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:X301 | ThinkPad X301]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:X200 | ThinkPad X200]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:X200s | ThinkPad X200s]]'''&lt;br /&gt;
* [[7469-5KG]]&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:X200 Tablet | ThinkPad X200 Tablet]]'''&lt;br /&gt;
&lt;br /&gt;
||&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:Z60t | ThinkPad Z60t]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:Z60m | ThinkPad Z60m]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:Z61e | ThinkPad Z61e]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:Z61t | ThinkPad Z61t]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:Z61m | ThinkPad Z61m]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:Z61p | ThinkPad Z61p]]'''&lt;br /&gt;
||&lt;br /&gt;
'''[[:Category:W500 | ThinkPad W500]]'''&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:W700 | ThinkPad W700]]'''&lt;br /&gt;
||&lt;br /&gt;
'''[[:Template:I_Series | I Series]]'''&lt;br /&gt;
'''[[:Category:PC110 | PC110]]'''&lt;br /&gt;
*[[PC110]]&lt;br /&gt;
&lt;br /&gt;
'''[[:Category:TransNote|TransNote]]'''&lt;br /&gt;
*[[2675-61G]]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Models]]&lt;/div&gt;</summary>
		<author><name>Vogo</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Intel_Wifi_Link_5100_(AGN)&amp;diff=43406</id>
		<title>Intel Wifi Link 5100 (AGN)</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Intel_Wifi_Link_5100_(AGN)&amp;diff=43406"/>
		<updated>2009-06-08T16:34:06Z</updated>

		<summary type="html">&lt;p&gt;Vogo: /* Models */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[http://lkml.org/lkml/2008/8/13/435 Support for Linux appears in 2.6.27]&lt;br /&gt;
*[http://ubuntuforums.org/showpost.php?p=5754065&amp;amp;postcount=62 Support for kernels &amp;lt; 2.6.27]&lt;br /&gt;
&lt;br /&gt;
==== Models ====&lt;br /&gt;
* {{R400}}&lt;br /&gt;
* {{X200}}&lt;/div&gt;</summary>
		<author><name>Vogo</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Talk:How_to_hotswap_Ultrabay_devices&amp;diff=43405</id>
		<title>Talk:How to hotswap Ultrabay devices</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Talk:How_to_hotswap_Ultrabay_devices&amp;diff=43405"/>
		<updated>2009-06-08T13:09:20Z</updated>

		<summary type="html">&lt;p&gt;Vogo: fix script ultrabay.sh, device path is required&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=HAL script=&lt;br /&gt;
&lt;br /&gt;
If the script works, your lshal output should contain something similar to this. In this case the Ultrabay device was a second HDD (/dev/sdb).&lt;br /&gt;
&lt;br /&gt;
Note that in the example, storage.hotpluggable = true while before it was false, so the script worked.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
udi = '/org/freedesktop/Hal/devices/storage_serial_SATA_HTS726060M9AT00_MRH453M4H11ARB'&lt;br /&gt;
  block.device = '/dev/sdb'  (string)&lt;br /&gt;
  block.is_volume = false  (bool)&lt;br /&gt;
  block.major = 8  (0x8)  (int)&lt;br /&gt;
  block.minor = 16  (0x10)  (int)&lt;br /&gt;
  block.storage_device = '/org/freedesktop/Hal/devices/storage_serial_SATA_HTS726060M9AT00_MRH453M4H11ARB'  (string)&lt;br /&gt;
  info.capabilities = {'storage', 'block'} (string list)&lt;br /&gt;
  info.category = 'storage'  (string)&lt;br /&gt;
  info.parent = '/org/freedesktop/Hal/devices/pci_8086_24ca_scsi_host_0_scsi_device_lun0'  (string)&lt;br /&gt;
  info.product = 'HTS726060M9AT00'  (string)&lt;br /&gt;
  info.udi = '/org/freedesktop/Hal/devices/storage_serial_SATA_HTS726060M9AT00_MRH453M4H11ARB'  (string)&lt;br /&gt;
  info.vendor = 'ATA'  (string)&lt;br /&gt;
  linux.hotplug_type = 3  (0x3)  (int)&lt;br /&gt;
  linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1f.1/host1/target1:0:0/1:0:0:0/block/sdb'  (string)&lt;br /&gt;
  storage.automount_enabled_hint = true  (bool)&lt;br /&gt;
  storage.bus = 'pci'  (string)&lt;br /&gt;
  storage.drive_type = 'disk'  (string)&lt;br /&gt;
  storage.firmware_version = 'MH4O'  (string)&lt;br /&gt;
  storage.hotpluggable = true  (bool)&lt;br /&gt;
  storage.lun = 0  (0x0)  (int)&lt;br /&gt;
  storage.media_check_enabled = false  (bool)&lt;br /&gt;
  storage.model = 'HTS726060M9AT00'  (string)&lt;br /&gt;
  storage.no_partitions_hint = false  (bool)&lt;br /&gt;
  storage.originating_device = '/org/freedesktop/Hal/devices/computer'  (string)&lt;br /&gt;
  storage.partitioning_scheme = 'mbr'  (string)&lt;br /&gt;
  storage.removable = false  (bool)&lt;br /&gt;
  storage.removable.media_available = true  (bool)&lt;br /&gt;
  storage.removable.media_size = 60011642880  (0xdf8f90000)  (uint64)&lt;br /&gt;
  storage.requires_eject = false  (bool)&lt;br /&gt;
  storage.serial = 'SATA_HTS726060M9AT00_MRH453M4H11ARB'  (string)&lt;br /&gt;
  storage.size = 60011642880  (0xdf8f90000)  (uint64)&lt;br /&gt;
  storage.vendor = 'ATA'  (string)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
|+ Known South Bridge PCI IDs&lt;br /&gt;
! ID !! ThinkPad model !! South Bridge chip (for Ultrabay) !! parent device (host_0, lun0 = 2nd ATA controller, master device)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_7111 || T20, T21, T22, X20, X21 || Intel 82371AB/EB/MB PIIX4 IDE || /org/freedesktop/Hal/devices/pci_8086_7111_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_248a || T23, T30, X22, X23, X24, X30|| Intel 82801CAM IDE U100 (rev 2) || /org/freedesktop/Hal/devices/pci_8086_248a_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_24ca || R50, R51, T40, T40p, T41, T41p, T42, T42p, X31, X32, X40 || Intel 82801DBM (ICH4-M) || /org/freedesktop/Hal/devices/pci_8086_24ca_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2653 || R52, T43, T43p, X41, Z60m, Z60t  || Intel 82801FBM (ICH6-M) || /org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27c4 || R60, X60 || Intel 82801GBM (ICH7 Family) || /org/freedesktop/Hal/devices/pci_8086_27c4_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27df || T60, T60p, Z61m, Z61t, Z61p || Intel 82801GBM/GHM (ICH7 Family) || /org/freedesktop/Hal/devices/pci_8086_27df_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2850 || R61, T61, T61p, X300 || Intel 82801H (ICH8 Family) || /org/freedesktop/Hal/devices/pci_8086_2850_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2929 || R400, R500, T400, T500, W500, W700, X200, X301 || Intel 82801I ICH9 Family || /org/freedesktop/Hal/devices/pci_8086_2929_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|}&lt;br /&gt;
==lshal output==&lt;br /&gt;
Please place your lshal output here if you had problems, or if you have a A or W series ThinkPad&lt;br /&gt;
&lt;br /&gt;
= bash script for hotswapping UltraBay =&lt;br /&gt;
&lt;br /&gt;
Here is my script for hotswapping ultrabay, is more complex, supports swap partition on drive in ultrabay and more :)&lt;br /&gt;
&lt;br /&gt;
{{HELP|Please test on difrent models}}&lt;br /&gt;
&lt;br /&gt;
ultrabay.sh&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
FORCE_SLEEP=&amp;quot;1&amp;quot;&lt;br /&gt;
QUIET=&amp;quot;0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Message()&lt;br /&gt;
{&lt;br /&gt;
    if [ $QUIET = &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
	echo &amp;quot;${0/*\//}: $*&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
	true&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Usage()&lt;br /&gt;
{&lt;br /&gt;
    echo &amp;quot;usage: ${0/*\/} [options]&amp;quot;&lt;br /&gt;
    echo &amp;quot;options:&amp;quot;&lt;br /&gt;
    echo &amp;quot;    -q --quiet           No messages&amp;quot;&lt;br /&gt;
    echo &amp;quot;    -n --no-force-sleep  Ignore fail when putting drive to sleep&amp;quot;&lt;br /&gt;
    echo &amp;quot;    -d --device &amp;lt;path&amp;gt;   SCSI device (required)&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Block2Device()&lt;br /&gt;
{&lt;br /&gt;
    /bin/readlink -e &amp;quot;/dev/block/$1&amp;quot;	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
IsSwap()&lt;br /&gt;
{&lt;br /&gt;
    /sbin/swapon -s | grep -q -e &amp;quot;^$1\b&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
IsMounted()&lt;br /&gt;
{&lt;br /&gt;
    mount | grep -q -e &amp;quot;^$DEVICE\b&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ReleaseDevice()&lt;br /&gt;
{&lt;br /&gt;
    if IsMounted &amp;quot;$1&amp;quot;; then&lt;br /&gt;
	if ! umount &amp;quot;$1&amp;quot; &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
	    Message &amp;quot;cannot umount $DEVICE&amp;quot;&lt;br /&gt;
	    false&lt;br /&gt;
	fi&lt;br /&gt;
    elif IsSwap &amp;quot;$1&amp;quot;; then&lt;br /&gt;
	if ! /sbin/swapoff &amp;quot;$1&amp;quot; &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
	    Message &amp;quot;cannot disable swapping on $DEVICE&amp;quot;&lt;br /&gt;
	    false&lt;br /&gt;
	fi&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SleepDrive()&lt;br /&gt;
{&lt;br /&gt;
    if ! /sbin/hdparm -Y &amp;quot;$1&amp;quot; &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
	Message &amp;quot;cannot put drive to sleep&amp;quot;&lt;br /&gt;
	if [ $FORCE_SLEEP = &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
	    true&lt;br /&gt;
	else&lt;br /&gt;
	    false&lt;br /&gt;
	fi&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
DeleteScsiDevice()&lt;br /&gt;
{&lt;br /&gt;
    if ! { echo 1 &amp;gt; $SCSI_DEVICE/delete; } &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
	Message &amp;quot;cannot delete device&amp;quot;&lt;br /&gt;
	false&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
GetDock()&lt;br /&gt;
{&lt;br /&gt;
    grep &amp;quot;$1&amp;quot; /sys/devices/platform/dock.*/type | sed -e s%/type:.*%%&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
IsDocked()&lt;br /&gt;
{&lt;br /&gt;
    [ $(cat $(GetDock &amp;quot;$1&amp;quot;)/docked) -ne 0 ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Undock()&lt;br /&gt;
{&lt;br /&gt;
    { echo 0 &amp;gt; $(GetDock &amp;quot;$1&amp;quot;)/undock; } &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    ! IsDocked &amp;quot;$1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SCSI_DEVICE=&amp;quot;&amp;quot;&lt;br /&gt;
for PARAM in $*; do&lt;br /&gt;
    if [ &amp;quot;$PARAM_DEVICE&amp;quot; ]; then&lt;br /&gt;
	SCSI_DEVICE=&amp;quot;$PARAM&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
	case &amp;quot;$PARAM&amp;quot; in&lt;br /&gt;
    	    &amp;quot;--quiet&amp;quot;|&amp;quot;-q&amp;quot;)&lt;br /&gt;
		QUIET=&amp;quot;1&amp;quot;&lt;br /&gt;
	    ;;&lt;br /&gt;
	    &amp;quot;--no-force-sleep&amp;quot;|&amp;quot;-n&amp;quot;)&lt;br /&gt;
	        FORCE-SLEEP=&amp;quot;0&amp;quot;&lt;br /&gt;
	    ;;&lt;br /&gt;
	    &amp;quot;--device&amp;quot;|&amp;quot;-d&amp;quot;)&lt;br /&gt;
	        PARAM_DEVICE=&amp;quot;1&amp;quot;&lt;br /&gt;
	    ;;&lt;br /&gt;
	    *)&lt;br /&gt;
		Usage&lt;br /&gt;
	    ;;&lt;br /&gt;
	esac&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
[ -z &amp;quot;$SCSI_DEVICE&amp;quot; ] &amp;amp;&amp;amp; Usage&lt;br /&gt;
 &lt;br /&gt;
if [ -d &amp;quot;$SCSI_DEVICE&amp;quot; ] &amp;amp;&amp;amp; IsDocked &amp;quot;ata_bay&amp;quot;; then&lt;br /&gt;
    sync&lt;br /&gt;
    for BLOCK in $(/bin/cat $SCSI_DEVICE/block/*/*/dev $SCSI_DEVICE/block/*/dev 2&amp;gt; /dev/null); do&lt;br /&gt;
	DEVICE=$(Block2Device &amp;quot;$BLOCK&amp;quot;) &amp;amp;&amp;amp; ReleaseDevice &amp;quot;$DEVICE&amp;quot; || FAIL=&amp;quot;1&amp;quot;&lt;br /&gt;
    done&lt;br /&gt;
    if [ $FAIL ]; then&lt;br /&gt;
	exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    sync&lt;br /&gt;
    BLOCK=$(cat $SCSI_DEVICE/block/*/dev 2&amp;gt; /dev/null) &amp;amp;&amp;amp;&lt;br /&gt;
    DEVICE=$(Block2Device &amp;quot;$BLOCK&amp;quot;) &amp;amp;&amp;amp; SleepDrive &amp;quot;$DEVICE&amp;quot; || exit 1 &lt;br /&gt;
    sleep 3&lt;br /&gt;
    DeleteScsiDevice &amp;quot;$SCSI_DEVICE&amp;quot; || exit 1&lt;br /&gt;
    sleep 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -d $SCSI_DEVICE ] &amp;amp;&amp;amp; $(IsDocked &amp;quot;ata_bay&amp;quot;); then&lt;br /&gt;
    if Undock &amp;quot;ata_bay&amp;quot;; then&lt;br /&gt;
	Message &amp;quot;UltraBay undocked&amp;quot;&lt;br /&gt;
	exit 0&lt;br /&gt;
    else&lt;br /&gt;
	Message &amp;quot;cannot undock UltraBay&amp;quot;&lt;br /&gt;
	exit 1&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
Message &amp;quot;UltraBay is already undock&amp;quot;&lt;br /&gt;
exit 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UDEV rule&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ENV{BAY_EVENT}==&amp;quot;3&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;scsi&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay.sh -q -d /sys$DEVPATH&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Supported models: {{R400}} - linux-2.6.29&lt;br /&gt;
==comments==&lt;br /&gt;
Interesting, especially the support for swap partitions. but I have two comments, first your calling your script hotswap.sh and then having udev call ultrabay.sh?&lt;br /&gt;
&lt;br /&gt;
Then your hard coding the location of the Ultrabay device. This is not guarenteed to be correct, although it will be in most cases. In particular the A and W-series machines. A-series had support for more then one Ultrabay device, while W-series has support for more then one internal HDD in addition to the Ultrabay device, so the Ultrabay location will shift. That is why the Ultrabay Eject script on the main page gets the eject device information from udev.&lt;br /&gt;
&lt;br /&gt;
==comments==&lt;br /&gt;
Hi, thanks, I fix name of script :)&lt;br /&gt;
Udev calling ultrabay.sh with option -d, so it remove correct device, if you want remove device manualy, is default device useful. But option may be required...&lt;/div&gt;</summary>
		<author><name>Vogo</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Talk:How_to_hotswap_Ultrabay_devices&amp;diff=43404</id>
		<title>Talk:How to hotswap Ultrabay devices</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Talk:How_to_hotswap_Ultrabay_devices&amp;diff=43404"/>
		<updated>2009-06-08T12:32:11Z</updated>

		<summary type="html">&lt;p&gt;Vogo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=HAL script=&lt;br /&gt;
&lt;br /&gt;
If the script works, your lshal output should contain something similar to this. In this case the Ultrabay device was a second HDD (/dev/sdb).&lt;br /&gt;
&lt;br /&gt;
Note that in the example, storage.hotpluggable = true while before it was false, so the script worked.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
udi = '/org/freedesktop/Hal/devices/storage_serial_SATA_HTS726060M9AT00_MRH453M4H11ARB'&lt;br /&gt;
  block.device = '/dev/sdb'  (string)&lt;br /&gt;
  block.is_volume = false  (bool)&lt;br /&gt;
  block.major = 8  (0x8)  (int)&lt;br /&gt;
  block.minor = 16  (0x10)  (int)&lt;br /&gt;
  block.storage_device = '/org/freedesktop/Hal/devices/storage_serial_SATA_HTS726060M9AT00_MRH453M4H11ARB'  (string)&lt;br /&gt;
  info.capabilities = {'storage', 'block'} (string list)&lt;br /&gt;
  info.category = 'storage'  (string)&lt;br /&gt;
  info.parent = '/org/freedesktop/Hal/devices/pci_8086_24ca_scsi_host_0_scsi_device_lun0'  (string)&lt;br /&gt;
  info.product = 'HTS726060M9AT00'  (string)&lt;br /&gt;
  info.udi = '/org/freedesktop/Hal/devices/storage_serial_SATA_HTS726060M9AT00_MRH453M4H11ARB'  (string)&lt;br /&gt;
  info.vendor = 'ATA'  (string)&lt;br /&gt;
  linux.hotplug_type = 3  (0x3)  (int)&lt;br /&gt;
  linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1f.1/host1/target1:0:0/1:0:0:0/block/sdb'  (string)&lt;br /&gt;
  storage.automount_enabled_hint = true  (bool)&lt;br /&gt;
  storage.bus = 'pci'  (string)&lt;br /&gt;
  storage.drive_type = 'disk'  (string)&lt;br /&gt;
  storage.firmware_version = 'MH4O'  (string)&lt;br /&gt;
  storage.hotpluggable = true  (bool)&lt;br /&gt;
  storage.lun = 0  (0x0)  (int)&lt;br /&gt;
  storage.media_check_enabled = false  (bool)&lt;br /&gt;
  storage.model = 'HTS726060M9AT00'  (string)&lt;br /&gt;
  storage.no_partitions_hint = false  (bool)&lt;br /&gt;
  storage.originating_device = '/org/freedesktop/Hal/devices/computer'  (string)&lt;br /&gt;
  storage.partitioning_scheme = 'mbr'  (string)&lt;br /&gt;
  storage.removable = false  (bool)&lt;br /&gt;
  storage.removable.media_available = true  (bool)&lt;br /&gt;
  storage.removable.media_size = 60011642880  (0xdf8f90000)  (uint64)&lt;br /&gt;
  storage.requires_eject = false  (bool)&lt;br /&gt;
  storage.serial = 'SATA_HTS726060M9AT00_MRH453M4H11ARB'  (string)&lt;br /&gt;
  storage.size = 60011642880  (0xdf8f90000)  (uint64)&lt;br /&gt;
  storage.vendor = 'ATA'  (string)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
|+ Known South Bridge PCI IDs&lt;br /&gt;
! ID !! ThinkPad model !! South Bridge chip (for Ultrabay) !! parent device (host_0, lun0 = 2nd ATA controller, master device)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_7111 || T20, T21, T22, X20, X21 || Intel 82371AB/EB/MB PIIX4 IDE || /org/freedesktop/Hal/devices/pci_8086_7111_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_248a || T23, T30, X22, X23, X24, X30|| Intel 82801CAM IDE U100 (rev 2) || /org/freedesktop/Hal/devices/pci_8086_248a_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_24ca || R50, R51, T40, T40p, T41, T41p, T42, T42p, X31, X32, X40 || Intel 82801DBM (ICH4-M) || /org/freedesktop/Hal/devices/pci_8086_24ca_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2653 || R52, T43, T43p, X41, Z60m, Z60t  || Intel 82801FBM (ICH6-M) || /org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27c4 || R60, X60 || Intel 82801GBM (ICH7 Family) || /org/freedesktop/Hal/devices/pci_8086_27c4_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27df || T60, T60p, Z61m, Z61t, Z61p || Intel 82801GBM/GHM (ICH7 Family) || /org/freedesktop/Hal/devices/pci_8086_27df_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2850 || R61, T61, T61p, X300 || Intel 82801H (ICH8 Family) || /org/freedesktop/Hal/devices/pci_8086_2850_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2929 || R400, R500, T400, T500, W500, W700, X200, X301 || Intel 82801I ICH9 Family || /org/freedesktop/Hal/devices/pci_8086_2929_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|}&lt;br /&gt;
==lshal output==&lt;br /&gt;
Please place your lshal output here if you had problems, or if you have a A or W series ThinkPad&lt;br /&gt;
&lt;br /&gt;
= bash script for hotswapping UltraBay =&lt;br /&gt;
&lt;br /&gt;
Here is my script for hotswapping ultrabay, is more complex, supports swap partition on drive in ultrabay and more :)&lt;br /&gt;
&lt;br /&gt;
{{HELP|Please test on difrent models}}&lt;br /&gt;
&lt;br /&gt;
ultrabay.sh&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
DEFAULT_DEVICE=&amp;quot;/sys/class/scsi_device/1:0:0:0/device&amp;quot;&lt;br /&gt;
FORCE_SLEEP=&amp;quot;1&amp;quot;&lt;br /&gt;
QUIET=&amp;quot;0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Message()&lt;br /&gt;
{&lt;br /&gt;
    if [ $QUIET = &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
	echo &amp;quot;${0/*\//}: $*&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
	true&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Block2Device()&lt;br /&gt;
{&lt;br /&gt;
    /bin/readlink -e &amp;quot;/dev/block/$1&amp;quot;	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
IsSwap()&lt;br /&gt;
{&lt;br /&gt;
    /sbin/swapon -s | grep -q -e &amp;quot;^$1\b&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
IsMounted()&lt;br /&gt;
{&lt;br /&gt;
    mount | grep -q -e &amp;quot;^$DEVICE\b&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ReleaseDevice()&lt;br /&gt;
{&lt;br /&gt;
    if IsMounted &amp;quot;$1&amp;quot;; then&lt;br /&gt;
	if ! umount &amp;quot;$1&amp;quot; &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
	    Message &amp;quot;cannot umount $DEVICE&amp;quot;&lt;br /&gt;
	    false&lt;br /&gt;
	fi&lt;br /&gt;
    elif IsSwap &amp;quot;$1&amp;quot;; then&lt;br /&gt;
	if ! /sbin/swapoff &amp;quot;$1&amp;quot; &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
	    Message &amp;quot;cannot disable swapping on $DEVICE&amp;quot;&lt;br /&gt;
	    false&lt;br /&gt;
	fi&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SleepDrive()&lt;br /&gt;
{&lt;br /&gt;
    if ! /sbin/hdparm -Y &amp;quot;$1&amp;quot; &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
	Message &amp;quot;cannot put drive to sleep&amp;quot;&lt;br /&gt;
	if [ $FORCE_SLEEP = &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
	    true&lt;br /&gt;
	else&lt;br /&gt;
	    false&lt;br /&gt;
	fi&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
DeleteScsiDevice()&lt;br /&gt;
{&lt;br /&gt;
    if ! { echo 1 &amp;gt; $SCSI_DEVICE/delete; } &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
	Message &amp;quot;cannot delete device&amp;quot;&lt;br /&gt;
	false&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
GetDock()&lt;br /&gt;
{&lt;br /&gt;
    grep &amp;quot;$1&amp;quot; /sys/devices/platform/dock.*/type | sed -e s%/type:.*%%&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
IsDocked()&lt;br /&gt;
{&lt;br /&gt;
    [ $(cat $(GetDock &amp;quot;$1&amp;quot;)/docked) -ne 0 ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Undock()&lt;br /&gt;
{&lt;br /&gt;
    { echo 0 &amp;gt; $(GetDock &amp;quot;$1&amp;quot;)/undock; } &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    ! IsDocked &amp;quot;$1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SCSI_DEVICE=&amp;quot;$DEFAULT_DEVICE&amp;quot;&lt;br /&gt;
for PARAM in $*; do&lt;br /&gt;
    if [ &amp;quot;$PARAM_DEVICE&amp;quot; ]; then&lt;br /&gt;
	SCSI_DEVICE=&amp;quot;$PARAM&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
	case &amp;quot;$PARAM&amp;quot; in&lt;br /&gt;
    	    &amp;quot;--quiet&amp;quot;|&amp;quot;-q&amp;quot;)&lt;br /&gt;
		QUIET=&amp;quot;1&amp;quot;&lt;br /&gt;
	    ;;&lt;br /&gt;
	    &amp;quot;--no-force-sleep&amp;quot;|&amp;quot;-n&amp;quot;)&lt;br /&gt;
	        FORCE-SLEEP=&amp;quot;0&amp;quot;&lt;br /&gt;
	    ;;&lt;br /&gt;
	    &amp;quot;--device&amp;quot;|&amp;quot;-d&amp;quot;)&lt;br /&gt;
	        PARAM_DEVICE=&amp;quot;1&amp;quot;&lt;br /&gt;
	    ;;&lt;br /&gt;
	    *)&lt;br /&gt;
	        echo &amp;quot;usage: ${0/*\/} [options]&amp;quot;&lt;br /&gt;
	        echo &amp;quot;options:&amp;quot;&lt;br /&gt;
	        echo &amp;quot;    -q --quiet           No messages&amp;quot;&lt;br /&gt;
	        echo &amp;quot;    -n --no-force-sleep  Ignore fail when putting drive to sleep&amp;quot;&lt;br /&gt;
	        echo &amp;quot;    -d --device &amp;lt;path&amp;gt;   SCSI device, default: $DEFAULT_DEVICE&amp;quot;&lt;br /&gt;
	        exit 1&lt;br /&gt;
	    ;;&lt;br /&gt;
	esac&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
if [ -d $SCSI_DEVICE ] &amp;amp;&amp;amp; IsDocked &amp;quot;ata_bay&amp;quot;; then&lt;br /&gt;
    sync&lt;br /&gt;
    for BLOCK in $(/bin/cat $SCSI_DEVICE/block/*/*/dev $SCSI_DEVICE/block/*/dev 2&amp;gt; /dev/null); do&lt;br /&gt;
	DEVICE=$(Block2Device &amp;quot;$BLOCK&amp;quot;) &amp;amp;&amp;amp; ReleaseDevice &amp;quot;$DEVICE&amp;quot; || FAIL=&amp;quot;1&amp;quot;&lt;br /&gt;
    done&lt;br /&gt;
    if [ $FAIL ]; then&lt;br /&gt;
	exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    sync&lt;br /&gt;
    BLOCK=$(cat $SCSI_DEVICE/block/*/dev 2&amp;gt; /dev/null) &amp;amp;&amp;amp;&lt;br /&gt;
    DEVICE=$(Block2Device &amp;quot;$BLOCK&amp;quot;) &amp;amp;&amp;amp; SleepDrive &amp;quot;$DEVICE&amp;quot; || exit 1 &lt;br /&gt;
    sleep 3&lt;br /&gt;
    DeleteScsiDevice &amp;quot;$SCSI_DEVICE&amp;quot; || exit 1&lt;br /&gt;
    sleep 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -d $SCSI_DEVICE ] &amp;amp;&amp;amp; $(IsDocked &amp;quot;ata_bay&amp;quot;); then&lt;br /&gt;
    if Undock &amp;quot;ata_bay&amp;quot;; then&lt;br /&gt;
	Message &amp;quot;AtaBay undocked&amp;quot;&lt;br /&gt;
	exit 0&lt;br /&gt;
    else&lt;br /&gt;
	Message &amp;quot;cannot undock AtaBay&amp;quot;&lt;br /&gt;
	exit 1&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if $(IsDocked &amp;quot;battery_bay&amp;quot;); then&lt;br /&gt;
    if Undock &amp;quot;battery_bay&amp;quot;; then&lt;br /&gt;
	Message &amp;quot;BatteryBay undocked&amp;quot;&lt;br /&gt;
	exit 0&lt;br /&gt;
    else&lt;br /&gt;
	Message &amp;quot;cannot undock BatteryBay&amp;quot;&lt;br /&gt;
	exit 1&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
Message &amp;quot;UltraBay is already undock&amp;quot;&lt;br /&gt;
exit 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UDEV rule&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ENV{BAY_EVENT}==&amp;quot;3&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;scsi&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay.sh -q -d /sys$DEVPATH&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Supported models: {{R400}} - linux-2.6.29&lt;br /&gt;
==comments==&lt;br /&gt;
Interesting, especially the support for swap partitions. but I have two comments, first your calling your script hotswap.sh and then having udev call ultrabay.sh?&lt;br /&gt;
&lt;br /&gt;
Then your hard coding the location of the Ultrabay device. This is not guarenteed to be correct, although it will be in most cases. In particular the A and W-series machines. A-series had support for more then one Ultrabay device, while W-series has support for more then one internal HDD in addition to the Ultrabay device, so the Ultrabay location will shift. That is why the Ultrabay Eject script on the main page gets the eject device information from udev.&lt;br /&gt;
&lt;br /&gt;
==comments==&lt;br /&gt;
Hi, thanks, I fix name of script :)&lt;br /&gt;
Udev calling ultrabay.sh with option -d, so it remove correct device, if you want remove device manualy, is default device useful. But option may be required...&lt;/div&gt;</summary>
		<author><name>Vogo</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Talk:UltraNav&amp;diff=43400</id>
		<title>Talk:UltraNav</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Talk:UltraNav&amp;diff=43400"/>
		<updated>2009-06-07T17:11:10Z</updated>

		<summary type="html">&lt;p&gt;Vogo: /* Script for switching state of TouchPad and TrackPoint */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Is there a reliable way to turn off the touchpad and the lowermost buttons, but leave the other functions (trackpoint and three buttons above the pad) not tampered with?&lt;br /&gt;
Thanks for input!&lt;br /&gt;
&lt;br /&gt;
Update: Nevermind, I just found the BIOS-option to disable it :D&lt;br /&gt;
&lt;br /&gt;
- colo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Yes there is with the very latest distributions like Fedora 10 with updates applied create a file like this:&lt;br /&gt;
&lt;br /&gt;
/etc/hal/fdi/policy/disable-touchpad.fdi&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;match key=&amp;quot;info.product&amp;quot; string=&amp;quot;SynPS/2 Synaptics TouchPad&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;merge key=&amp;quot;input.x11_options.TouchpadOff&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;1&amp;lt;/merge&amp;gt;&lt;br /&gt;
&amp;lt;/match&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need to reboot (actually restart both X11 and HAL, but reboot is easier at that point) before it takes effect.&lt;br /&gt;
--[[User:Tonko|Tonko]] 00:18, 14 February 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Script for switching state of TouchPad and TrackPoint ==&lt;br /&gt;
&lt;br /&gt;
{{HINT|A suggestion.}}&lt;br /&gt;
{{key|Fn}}{{key|F8}} can run {{cmduser|untranav.sh toggle}}&lt;br /&gt;
&lt;br /&gt;
untranav.sh&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
TRACKPOINT_NAME=&amp;quot;trackpoint&amp;quot;&lt;br /&gt;
TRACKPOINT='TPPS/2 IBM TrackPoint'&lt;br /&gt;
TOUCHPAD_NAME=&amp;quot;touchpad&amp;quot;&lt;br /&gt;
TOUCHPAD='SynPS/2 Synaptics TouchPad'&lt;br /&gt;
&lt;br /&gt;
Usage()&lt;br /&gt;
{&lt;br /&gt;
    echo &amp;quot;usage: ${0/*\/} status [device]&amp;quot;&lt;br /&gt;
    echo &amp;quot;       ${0/*\/} enable [device]&amp;quot;&lt;br /&gt;
    echo &amp;quot;       ${0/*\/} disable [device]&amp;quot;&lt;br /&gt;
    echo &amp;quot;       ${0/*\/} toggle [device]&amp;quot;&lt;br /&gt;
    echo &amp;quot;device: $TRACKPOINT_NAME&amp;quot;&lt;br /&gt;
    echo &amp;quot;        $TOUCHPAD_NAME&amp;quot;&lt;br /&gt;
    echo &amp;quot;toggle order: 1) $TRACKPOINT_NAME enable&amp;quot;&lt;br /&gt;
    echo &amp;quot;                 $TOUCHPAD_NAME disable&amp;quot;&lt;br /&gt;
    echo &amp;quot;              2) $TRACKPOINT_NAME disable&amp;quot;&lt;br /&gt;
    echo &amp;quot;                 $TOUCHPAD_NAME enable&amp;quot;&lt;br /&gt;
    echo &amp;quot;              3) $TRACKPOINT_NAME disable&amp;quot;&lt;br /&gt;
    echo &amp;quot;                 $TOUCHPAD_NAME disable&amp;quot;&lt;br /&gt;
    echo &amp;quot;              4) $TRACKPOINT_NAME enable&amp;quot;&lt;br /&gt;
    echo &amp;quot;                 $TOUCHPAD_NAME enable&amp;quot;&lt;br /&gt;
    exit 1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
GetState()&lt;br /&gt;
{&lt;br /&gt;
    echo $(/usr/bin/xinput list-props &amp;quot;$1&amp;quot; | grep &amp;quot;Device Enabled&amp;quot; | cut -f2 -d:)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Status()&lt;br /&gt;
{&lt;br /&gt;
    case &amp;quot;$1&amp;quot; in&lt;br /&gt;
	&amp;quot;$TRACKPOINT&amp;quot;)&lt;br /&gt;
	    DEVICE=&amp;quot;$TRACKPOINT_NAME&amp;quot;&lt;br /&gt;
	;;&lt;br /&gt;
	&amp;quot;$TOUCHPAD&amp;quot;)&lt;br /&gt;
	    DEVICE=&amp;quot;$TOUCHPAD_NAME&amp;quot;&lt;br /&gt;
	;;&lt;br /&gt;
    esac&lt;br /&gt;
&lt;br /&gt;
    if [ $(GetState &amp;quot;$1&amp;quot;) = &amp;quot;1&amp;quot; ]; then&lt;br /&gt;
	STATUS=&amp;quot;enabled&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
	STATUS=&amp;quot;disabled&amp;quot;&lt;br /&gt;
    fi&lt;br /&gt;
    &lt;br /&gt;
    echo -e &amp;quot;$DEVICE: $STATUS&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SetState()&lt;br /&gt;
{&lt;br /&gt;
    /usr/bin/xinput set-int-prop &amp;quot;$1&amp;quot; &amp;quot;Device Enabled&amp;quot; &amp;quot;8&amp;quot; &amp;quot;$2&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Enable()&lt;br /&gt;
{&lt;br /&gt;
    SetState &amp;quot;$1&amp;quot; 1&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Disable()&lt;br /&gt;
{&lt;br /&gt;
    SetState &amp;quot;$1&amp;quot; 0&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Toggle()&lt;br /&gt;
{&lt;br /&gt;
    if [ $(GetState &amp;quot;$1&amp;quot;) = &amp;quot;1&amp;quot; ]; then&lt;br /&gt;
	STATE=0&lt;br /&gt;
    else&lt;br /&gt;
	STATE=1&lt;br /&gt;
    fi&lt;br /&gt;
    &lt;br /&gt;
    SetState &amp;quot;$1&amp;quot; &amp;quot;$STATE&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
[ $# -gt 2 ] &amp;amp;&amp;amp; Usage&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
    &amp;quot;status&amp;quot;)&lt;br /&gt;
	COMMAND=&amp;quot;Status&amp;quot;    &lt;br /&gt;
    ;;&lt;br /&gt;
    &amp;quot;enable&amp;quot;)&lt;br /&gt;
	COMMAND=&amp;quot;Enable&amp;quot;&lt;br /&gt;
    ;;&lt;br /&gt;
    &amp;quot;disable&amp;quot;)&lt;br /&gt;
	COMMAND=&amp;quot;Disable&amp;quot;&lt;br /&gt;
    ;;&lt;br /&gt;
    &amp;quot;toggle&amp;quot;)&lt;br /&gt;
	COMMAND=&amp;quot;Toggle&amp;quot;&lt;br /&gt;
	if [ -z &amp;quot;$2&amp;quot; ]; then&lt;br /&gt;
	    if [ $(GetState &amp;quot;$TRACKPOINT&amp;quot;) = &amp;quot;1&amp;quot; -a $(GetState &amp;quot;$TOUCHPAD&amp;quot;) = &amp;quot;1&amp;quot; ]; then&lt;br /&gt;
	        SetState &amp;quot;$TRACKPOINT&amp;quot; 1&lt;br /&gt;
	        SetState &amp;quot;$TOUCHPAD&amp;quot; 0&lt;br /&gt;
	    elif [ $(GetState &amp;quot;$TRACKPOINT&amp;quot;) = &amp;quot;1&amp;quot; -a $(GetState &amp;quot;$TOUCHPAD&amp;quot;) = &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
	        SetState &amp;quot;$TRACKPOINT&amp;quot; 0&lt;br /&gt;
	        SetState &amp;quot;$TOUCHPAD&amp;quot; 1&lt;br /&gt;
	    elif [ $(GetState &amp;quot;$TRACKPOINT&amp;quot;) = &amp;quot;0&amp;quot; -a $(GetState &amp;quot;$TOUCHPAD&amp;quot;) = &amp;quot;1&amp;quot; ]; then&lt;br /&gt;
	        SetState &amp;quot;$TRACKPOINT&amp;quot; 0&lt;br /&gt;
	        SetState &amp;quot;$TOUCHPAD&amp;quot; 0&lt;br /&gt;
	    else&lt;br /&gt;
	        SetState &amp;quot;$TRACKPOINT&amp;quot; 1&lt;br /&gt;
	        SetState &amp;quot;$TOUCHPAD&amp;quot; 1&lt;br /&gt;
	    fi&lt;br /&gt;
	    exit&lt;br /&gt;
	fi&lt;br /&gt;
    ;;&lt;br /&gt;
    *)&lt;br /&gt;
	Usage&lt;br /&gt;
    ;;&lt;br /&gt;
esac&lt;br /&gt;
&lt;br /&gt;
case &amp;quot;$2&amp;quot; in&lt;br /&gt;
    &amp;quot;$TRACKPOINT_NAME&amp;quot;)&lt;br /&gt;
	$COMMAND &amp;quot;$TRACKPOINT&amp;quot;&lt;br /&gt;
    ;;&lt;br /&gt;
    &amp;quot;$TOUCHPAD_NAME&amp;quot;)&lt;br /&gt;
	$COMMAND &amp;quot;$TOUCHPAD&amp;quot;&lt;br /&gt;
    ;;&lt;br /&gt;
    &amp;quot;&amp;quot;)&lt;br /&gt;
	$COMMAND &amp;quot;$TRACKPOINT&amp;quot;&lt;br /&gt;
	$COMMAND &amp;quot;$TOUCHPAD&amp;quot;&lt;br /&gt;
    ;;&lt;br /&gt;
    *)&lt;br /&gt;
    Usage&lt;br /&gt;
esac    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vogo</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Talk:How_to_hotswap_Ultrabay_devices&amp;diff=43399</id>
		<title>Talk:How to hotswap Ultrabay devices</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Talk:How_to_hotswap_Ultrabay_devices&amp;diff=43399"/>
		<updated>2009-06-07T13:12:26Z</updated>

		<summary type="html">&lt;p&gt;Vogo: /* bash script for hotswapping UltraBay */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=HAL script=&lt;br /&gt;
&lt;br /&gt;
If the script works, your lshal output should contain something similar to this. In this case the Ultrabay device was a second HDD (/dev/sdb).&lt;br /&gt;
&lt;br /&gt;
Note that in the example, storage.hotpluggable = true while before it was false, so the script worked.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
udi = '/org/freedesktop/Hal/devices/storage_serial_SATA_HTS726060M9AT00_MRH453M4H11ARB'&lt;br /&gt;
  block.device = '/dev/sdb'  (string)&lt;br /&gt;
  block.is_volume = false  (bool)&lt;br /&gt;
  block.major = 8  (0x8)  (int)&lt;br /&gt;
  block.minor = 16  (0x10)  (int)&lt;br /&gt;
  block.storage_device = '/org/freedesktop/Hal/devices/storage_serial_SATA_HTS726060M9AT00_MRH453M4H11ARB'  (string)&lt;br /&gt;
  info.capabilities = {'storage', 'block'} (string list)&lt;br /&gt;
  info.category = 'storage'  (string)&lt;br /&gt;
  info.parent = '/org/freedesktop/Hal/devices/pci_8086_24ca_scsi_host_0_scsi_device_lun0'  (string)&lt;br /&gt;
  info.product = 'HTS726060M9AT00'  (string)&lt;br /&gt;
  info.udi = '/org/freedesktop/Hal/devices/storage_serial_SATA_HTS726060M9AT00_MRH453M4H11ARB'  (string)&lt;br /&gt;
  info.vendor = 'ATA'  (string)&lt;br /&gt;
  linux.hotplug_type = 3  (0x3)  (int)&lt;br /&gt;
  linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1f.1/host1/target1:0:0/1:0:0:0/block/sdb'  (string)&lt;br /&gt;
  storage.automount_enabled_hint = true  (bool)&lt;br /&gt;
  storage.bus = 'pci'  (string)&lt;br /&gt;
  storage.drive_type = 'disk'  (string)&lt;br /&gt;
  storage.firmware_version = 'MH4O'  (string)&lt;br /&gt;
  storage.hotpluggable = true  (bool)&lt;br /&gt;
  storage.lun = 0  (0x0)  (int)&lt;br /&gt;
  storage.media_check_enabled = false  (bool)&lt;br /&gt;
  storage.model = 'HTS726060M9AT00'  (string)&lt;br /&gt;
  storage.no_partitions_hint = false  (bool)&lt;br /&gt;
  storage.originating_device = '/org/freedesktop/Hal/devices/computer'  (string)&lt;br /&gt;
  storage.partitioning_scheme = 'mbr'  (string)&lt;br /&gt;
  storage.removable = false  (bool)&lt;br /&gt;
  storage.removable.media_available = true  (bool)&lt;br /&gt;
  storage.removable.media_size = 60011642880  (0xdf8f90000)  (uint64)&lt;br /&gt;
  storage.requires_eject = false  (bool)&lt;br /&gt;
  storage.serial = 'SATA_HTS726060M9AT00_MRH453M4H11ARB'  (string)&lt;br /&gt;
  storage.size = 60011642880  (0xdf8f90000)  (uint64)&lt;br /&gt;
  storage.vendor = 'ATA'  (string)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
|+ Known South Bridge PCI IDs&lt;br /&gt;
! ID !! ThinkPad model !! South Bridge chip (for Ultrabay) !! parent device (host_0, lun0 = 2nd ATA controller, master device)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_7111 || T20, T21, T22, X20, X21 || Intel 82371AB/EB/MB PIIX4 IDE || /org/freedesktop/Hal/devices/pci_8086_7111_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_248a || T23, T30, X22, X23, X24, X30|| Intel 82801CAM IDE U100 (rev 2) || /org/freedesktop/Hal/devices/pci_8086_248a_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_24ca || R50, R51, T40, T40p, T41, T41p, T42, T42p, X31, X32, X40 || Intel 82801DBM (ICH4-M) || /org/freedesktop/Hal/devices/pci_8086_24ca_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2653 || R52, T43, T43p, X41, Z60m, Z60t  || Intel 82801FBM (ICH6-M) || /org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27c4 || R60, X60 || Intel 82801GBM (ICH7 Family) || /org/freedesktop/Hal/devices/pci_8086_27c4_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27df || T60, T60p, Z61m, Z61t, Z61p || Intel 82801GBM/GHM (ICH7 Family) || /org/freedesktop/Hal/devices/pci_8086_27df_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2850 || R61, T61, T61p, X300 || Intel 82801H (ICH8 Family) || /org/freedesktop/Hal/devices/pci_8086_2850_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2929 || R400, R500, T400, T500, W500, W700, X200, X301 || Intel 82801I ICH9 Family || /org/freedesktop/Hal/devices/pci_8086_2929_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|}&lt;br /&gt;
==lshal output==&lt;br /&gt;
Please place your lshal output here if you had problems, or if you have a A or W series ThinkPad&lt;br /&gt;
&lt;br /&gt;
== bash script for hotswapping UltraBay ==&lt;br /&gt;
&lt;br /&gt;
Here is my script for hotswapping ultrabay, is more complex, supports swap partition on drive in ultrabay and more :)&lt;br /&gt;
&lt;br /&gt;
{{HELP|Please test on difrent models}}&lt;br /&gt;
&lt;br /&gt;
hotswap.sh&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
DEFAULT_DEVICE=&amp;quot;/sys/class/scsi_device/1:0:0:0/device&amp;quot;&lt;br /&gt;
FORCE_SLEEP=&amp;quot;1&amp;quot;&lt;br /&gt;
QUIET=&amp;quot;0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Message()&lt;br /&gt;
{&lt;br /&gt;
    if [ $QUIET = &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
	echo &amp;quot;${0/*\//}: $*&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
	true&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Block2Device()&lt;br /&gt;
{&lt;br /&gt;
    /bin/readlink -e &amp;quot;/dev/block/$1&amp;quot;	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
IsSwap()&lt;br /&gt;
{&lt;br /&gt;
    /sbin/swapon -s | grep -q -e &amp;quot;^$1\b&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
IsMounted()&lt;br /&gt;
{&lt;br /&gt;
    mount | grep -q -e &amp;quot;^$DEVICE\b&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ReleaseDevice()&lt;br /&gt;
{&lt;br /&gt;
    if IsMounted &amp;quot;$1&amp;quot;; then&lt;br /&gt;
	if ! umount &amp;quot;$1&amp;quot; &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
	    Message &amp;quot;cannot umount $DEVICE&amp;quot;&lt;br /&gt;
	    false&lt;br /&gt;
	fi&lt;br /&gt;
    elif IsSwap &amp;quot;$1&amp;quot;; then&lt;br /&gt;
	if ! /sbin/swapoff &amp;quot;$1&amp;quot; &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
	    Message &amp;quot;cannot disable swapping on $DEVICE&amp;quot;&lt;br /&gt;
	    false&lt;br /&gt;
	fi&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SleepDrive()&lt;br /&gt;
{&lt;br /&gt;
    if ! /sbin/hdparm -Y &amp;quot;$1&amp;quot; &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
	Message &amp;quot;cannot put drive to sleep&amp;quot;&lt;br /&gt;
	if [ $FORCE_SLEEP = &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
	    true&lt;br /&gt;
	else&lt;br /&gt;
	    false&lt;br /&gt;
	fi&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
DeleteScsiDevice()&lt;br /&gt;
{&lt;br /&gt;
    if ! { echo 1 &amp;gt; $SCSI_DEVICE/delete; } &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
	Message &amp;quot;cannot delete device&amp;quot;&lt;br /&gt;
	false&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
GetDock()&lt;br /&gt;
{&lt;br /&gt;
    grep &amp;quot;$1&amp;quot; /sys/devices/platform/dock.*/type | sed -e s%/type:.*%%&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
IsDocked()&lt;br /&gt;
{&lt;br /&gt;
    [ $(cat $(GetDock &amp;quot;$1&amp;quot;)/docked) -ne 0 ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Undock()&lt;br /&gt;
{&lt;br /&gt;
    { echo 0 &amp;gt; $(GetDock &amp;quot;$1&amp;quot;)/undock; } &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    ! IsDocked &amp;quot;$1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SCSI_DEVICE=&amp;quot;$DEFAULT_DEVICE&amp;quot;&lt;br /&gt;
for PARAM in $*; do&lt;br /&gt;
    if [ &amp;quot;$PARAM_DEVICE&amp;quot; ]; then&lt;br /&gt;
	SCSI_DEVICE=&amp;quot;$PARAM&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
	case &amp;quot;$PARAM&amp;quot; in&lt;br /&gt;
    	    &amp;quot;--quiet&amp;quot;|&amp;quot;-q&amp;quot;)&lt;br /&gt;
		QUIET=&amp;quot;1&amp;quot;&lt;br /&gt;
	    ;;&lt;br /&gt;
	    &amp;quot;--no-force-sleep&amp;quot;|&amp;quot;-n&amp;quot;)&lt;br /&gt;
	        FORCE-SLEEP=&amp;quot;0&amp;quot;&lt;br /&gt;
	    ;;&lt;br /&gt;
	    &amp;quot;--device&amp;quot;|&amp;quot;-d&amp;quot;)&lt;br /&gt;
	        PARAM_DEVICE=&amp;quot;1&amp;quot;&lt;br /&gt;
	    ;;&lt;br /&gt;
	    *)&lt;br /&gt;
	        echo &amp;quot;usage: ${0/*\/} [options]&amp;quot;&lt;br /&gt;
	        echo &amp;quot;options:&amp;quot;&lt;br /&gt;
	        echo &amp;quot;    -q --quiet           No messages&amp;quot;&lt;br /&gt;
	        echo &amp;quot;    -n --no-force-sleep  Ignore fail when putting drive to sleep&amp;quot;&lt;br /&gt;
	        echo &amp;quot;    -d --device &amp;lt;path&amp;gt;   SCSI device, default: $DEFAULT_DEVICE&amp;quot;&lt;br /&gt;
	        exit 1&lt;br /&gt;
	    ;;&lt;br /&gt;
	esac&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
if [ -d $SCSI_DEVICE ] &amp;amp;&amp;amp; IsDocked &amp;quot;ata_bay&amp;quot;; then&lt;br /&gt;
    sync&lt;br /&gt;
    for BLOCK in $(/bin/cat $SCSI_DEVICE/block/*/*/dev $SCSI_DEVICE/block/*/dev 2&amp;gt; /dev/null); do&lt;br /&gt;
	DEVICE=$(Block2Device &amp;quot;$BLOCK&amp;quot;) &amp;amp;&amp;amp; ReleaseDevice &amp;quot;$DEVICE&amp;quot; || FAIL=&amp;quot;1&amp;quot;&lt;br /&gt;
    done&lt;br /&gt;
    if [ $FAIL ]; then&lt;br /&gt;
	exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    sync&lt;br /&gt;
    BLOCK=$(cat $SCSI_DEVICE/block/*/dev 2&amp;gt; /dev/null) &amp;amp;&amp;amp;&lt;br /&gt;
    DEVICE=$(Block2Device &amp;quot;$BLOCK&amp;quot;) &amp;amp;&amp;amp; SleepDrive &amp;quot;$DEVICE&amp;quot; || exit 1 &lt;br /&gt;
    sleep 3&lt;br /&gt;
    DeleteScsiDevice &amp;quot;$SCSI_DEVICE&amp;quot; || exit 1&lt;br /&gt;
    sleep 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -d $SCSI_DEVICE ] &amp;amp;&amp;amp; $(IsDocked &amp;quot;ata_bay&amp;quot;); then&lt;br /&gt;
    if Undock &amp;quot;ata_bay&amp;quot;; then&lt;br /&gt;
	Message &amp;quot;AtaBay undocked&amp;quot;&lt;br /&gt;
	exit 0&lt;br /&gt;
    else&lt;br /&gt;
	Message &amp;quot;cannot undock AtaBay&amp;quot;&lt;br /&gt;
	exit 1&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if $(IsDocked &amp;quot;battery_bay&amp;quot;); then&lt;br /&gt;
    if Undock &amp;quot;battery_bay&amp;quot;; then&lt;br /&gt;
	Message &amp;quot;BatteryBay undocked&amp;quot;&lt;br /&gt;
	exit 0&lt;br /&gt;
    else&lt;br /&gt;
	Message &amp;quot;cannot undock BatteryBay&amp;quot;&lt;br /&gt;
	exit 1&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
Message &amp;quot;UltraBay is already undock&amp;quot;&lt;br /&gt;
exit 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UDEV rule&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ENV{BAY_EVENT}==&amp;quot;3&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;scsi&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay.sh -q -d /sys$DEVPATH&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Supported models: {{R400}} - linux-2.6.29&lt;/div&gt;</summary>
		<author><name>Vogo</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Talk:How_to_hotswap_Ultrabay_devices&amp;diff=43398</id>
		<title>Talk:How to hotswap Ultrabay devices</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Talk:How_to_hotswap_Ultrabay_devices&amp;diff=43398"/>
		<updated>2009-06-07T13:05:56Z</updated>

		<summary type="html">&lt;p&gt;Vogo: /* bash script for hotswapping UltraBay */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=HAL script=&lt;br /&gt;
&lt;br /&gt;
If the script works, your lshal output should contain something similar to this. In this case the Ultrabay device was a second HDD (/dev/sdb).&lt;br /&gt;
&lt;br /&gt;
Note that in the example, storage.hotpluggable = true while before it was false, so the script worked.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
udi = '/org/freedesktop/Hal/devices/storage_serial_SATA_HTS726060M9AT00_MRH453M4H11ARB'&lt;br /&gt;
  block.device = '/dev/sdb'  (string)&lt;br /&gt;
  block.is_volume = false  (bool)&lt;br /&gt;
  block.major = 8  (0x8)  (int)&lt;br /&gt;
  block.minor = 16  (0x10)  (int)&lt;br /&gt;
  block.storage_device = '/org/freedesktop/Hal/devices/storage_serial_SATA_HTS726060M9AT00_MRH453M4H11ARB'  (string)&lt;br /&gt;
  info.capabilities = {'storage', 'block'} (string list)&lt;br /&gt;
  info.category = 'storage'  (string)&lt;br /&gt;
  info.parent = '/org/freedesktop/Hal/devices/pci_8086_24ca_scsi_host_0_scsi_device_lun0'  (string)&lt;br /&gt;
  info.product = 'HTS726060M9AT00'  (string)&lt;br /&gt;
  info.udi = '/org/freedesktop/Hal/devices/storage_serial_SATA_HTS726060M9AT00_MRH453M4H11ARB'  (string)&lt;br /&gt;
  info.vendor = 'ATA'  (string)&lt;br /&gt;
  linux.hotplug_type = 3  (0x3)  (int)&lt;br /&gt;
  linux.sysfs_path = '/sys/devices/pci0000:00/0000:00:1f.1/host1/target1:0:0/1:0:0:0/block/sdb'  (string)&lt;br /&gt;
  storage.automount_enabled_hint = true  (bool)&lt;br /&gt;
  storage.bus = 'pci'  (string)&lt;br /&gt;
  storage.drive_type = 'disk'  (string)&lt;br /&gt;
  storage.firmware_version = 'MH4O'  (string)&lt;br /&gt;
  storage.hotpluggable = true  (bool)&lt;br /&gt;
  storage.lun = 0  (0x0)  (int)&lt;br /&gt;
  storage.media_check_enabled = false  (bool)&lt;br /&gt;
  storage.model = 'HTS726060M9AT00'  (string)&lt;br /&gt;
  storage.no_partitions_hint = false  (bool)&lt;br /&gt;
  storage.originating_device = '/org/freedesktop/Hal/devices/computer'  (string)&lt;br /&gt;
  storage.partitioning_scheme = 'mbr'  (string)&lt;br /&gt;
  storage.removable = false  (bool)&lt;br /&gt;
  storage.removable.media_available = true  (bool)&lt;br /&gt;
  storage.removable.media_size = 60011642880  (0xdf8f90000)  (uint64)&lt;br /&gt;
  storage.requires_eject = false  (bool)&lt;br /&gt;
  storage.serial = 'SATA_HTS726060M9AT00_MRH453M4H11ARB'  (string)&lt;br /&gt;
  storage.size = 60011642880  (0xdf8f90000)  (uint64)&lt;br /&gt;
  storage.vendor = 'ATA'  (string)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=1&lt;br /&gt;
|+ Known South Bridge PCI IDs&lt;br /&gt;
! ID !! ThinkPad model !! South Bridge chip (for Ultrabay) !! parent device (host_0, lun0 = 2nd ATA controller, master device)&lt;br /&gt;
|-&lt;br /&gt;
| 8086_7111 || T20, T21, T22, X20, X21 || Intel 82371AB/EB/MB PIIX4 IDE || /org/freedesktop/Hal/devices/pci_8086_7111_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_248a || T23, T30, X22, X23, X24, X30|| Intel 82801CAM IDE U100 (rev 2) || /org/freedesktop/Hal/devices/pci_8086_248a_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_24ca || R50, R51, T40, T40p, T41, T41p, T42, T42p, X31, X32, X40 || Intel 82801DBM (ICH4-M) || /org/freedesktop/Hal/devices/pci_8086_24ca_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2653 || R52, T43, T43p, X41, Z60m, Z60t  || Intel 82801FBM (ICH6-M) || /org/freedesktop/Hal/devices/pci_8086_2653_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27c4 || R60, X60 || Intel 82801GBM (ICH7 Family) || /org/freedesktop/Hal/devices/pci_8086_27c4_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_27df || T60, T60p, Z61m, Z61t, Z61p || Intel 82801GBM/GHM (ICH7 Family) || /org/freedesktop/Hal/devices/pci_8086_27df_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2850 || R61, T61, T61p, X300 || Intel 82801H (ICH8 Family) || /org/freedesktop/Hal/devices/pci_8086_2850_scsi_host_scsi_device_lun0&lt;br /&gt;
|-&lt;br /&gt;
| 8086_2929 || R400, R500, T400, T500, W500, W700, X200, X301 || Intel 82801I ICH9 Family || /org/freedesktop/Hal/devices/pci_8086_2929_scsi_host_0_scsi_device_lun0&lt;br /&gt;
|}&lt;br /&gt;
==lshal output==&lt;br /&gt;
Please place your lshal output here if you had problems, or if you have a A or W series ThinkPad&lt;br /&gt;
&lt;br /&gt;
== bash script for hotswapping UltraBay ==&lt;br /&gt;
&lt;br /&gt;
Hi,&lt;br /&gt;
here is my script for hotswapping ultrabay, is more complex, supports swap partition on drive in ultrabay and more :)&lt;br /&gt;
&lt;br /&gt;
{{HELP|Please test on difrent models}}&lt;br /&gt;
&lt;br /&gt;
hotswap.sh&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
DEFAULT_DEVICE=&amp;quot;/sys/class/scsi_device/1:0:0:0/device&amp;quot;&lt;br /&gt;
FORCE_SLEEP=&amp;quot;1&amp;quot;&lt;br /&gt;
QUIET=&amp;quot;0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Message()&lt;br /&gt;
{&lt;br /&gt;
    if [ $QUIET = &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
	echo &amp;quot;${0/*\//}: $*&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
	true&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Block2Device()&lt;br /&gt;
{&lt;br /&gt;
    /bin/readlink -e &amp;quot;/dev/block/$1&amp;quot;	&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
IsSwap()&lt;br /&gt;
{&lt;br /&gt;
    /sbin/swapon -s | grep -q -e &amp;quot;^$1\b&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
IsMounted()&lt;br /&gt;
{&lt;br /&gt;
    mount | grep -q -e &amp;quot;^$DEVICE\b&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
ReleaseDevice()&lt;br /&gt;
{&lt;br /&gt;
    if IsMounted &amp;quot;$1&amp;quot;; then&lt;br /&gt;
	if ! umount &amp;quot;$1&amp;quot; &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
	    Message &amp;quot;cannot umount $DEVICE&amp;quot;&lt;br /&gt;
	    false&lt;br /&gt;
	fi&lt;br /&gt;
    elif IsSwap &amp;quot;$1&amp;quot;; then&lt;br /&gt;
	if ! /sbin/swapoff &amp;quot;$1&amp;quot; &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
	    Message &amp;quot;cannot disable swapping on $DEVICE&amp;quot;&lt;br /&gt;
	    false&lt;br /&gt;
	fi&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SleepDrive()&lt;br /&gt;
{&lt;br /&gt;
    if ! /sbin/hdparm -Y &amp;quot;$1&amp;quot; &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
	Message &amp;quot;cannot put drive to sleep&amp;quot;&lt;br /&gt;
	if [ $FORCE_SLEEP = &amp;quot;0&amp;quot; ]; then&lt;br /&gt;
	    true&lt;br /&gt;
	else&lt;br /&gt;
	    false&lt;br /&gt;
	fi&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
DeleteScsiDevice()&lt;br /&gt;
{&lt;br /&gt;
    if ! { echo 1 &amp;gt; $SCSI_DEVICE/delete; } &amp;amp;&amp;gt; /dev/null; then&lt;br /&gt;
	Message &amp;quot;cannot delete device&amp;quot;&lt;br /&gt;
	false&lt;br /&gt;
    fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
GetDock()&lt;br /&gt;
{&lt;br /&gt;
    grep &amp;quot;$1&amp;quot; /sys/devices/platform/dock.*/type | sed -e s%/type:.*%%&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
IsDocked()&lt;br /&gt;
{&lt;br /&gt;
    [ $(cat $(GetDock &amp;quot;$1&amp;quot;)/docked) -ne 0 ]&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
Undock()&lt;br /&gt;
{&lt;br /&gt;
    { echo 0 &amp;gt; $(GetDock &amp;quot;$1&amp;quot;)/undock; } &amp;amp;&amp;gt; /dev/null&lt;br /&gt;
    ! IsDocked &amp;quot;$1&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
SCSI_DEVICE=&amp;quot;$DEFAULT_DEVICE&amp;quot;&lt;br /&gt;
for PARAM in $*; do&lt;br /&gt;
    if [ &amp;quot;$PARAM_DEVICE&amp;quot; ]; then&lt;br /&gt;
	SCSI_DEVICE=&amp;quot;$PARAM&amp;quot;&lt;br /&gt;
    else&lt;br /&gt;
	case &amp;quot;$PARAM&amp;quot; in&lt;br /&gt;
    	    &amp;quot;--quiet&amp;quot;|&amp;quot;-q&amp;quot;)&lt;br /&gt;
		QUIET=&amp;quot;1&amp;quot;&lt;br /&gt;
	    ;;&lt;br /&gt;
	    &amp;quot;--no-force-sleep&amp;quot;|&amp;quot;-n&amp;quot;)&lt;br /&gt;
	        FORCE-SLEEP=&amp;quot;0&amp;quot;&lt;br /&gt;
	    ;;&lt;br /&gt;
	    &amp;quot;--device&amp;quot;|&amp;quot;-d&amp;quot;)&lt;br /&gt;
	        PARAM_DEVICE=&amp;quot;1&amp;quot;&lt;br /&gt;
	    ;;&lt;br /&gt;
	    *)&lt;br /&gt;
	        echo &amp;quot;usage: ${0/*\/} [options]&amp;quot;&lt;br /&gt;
	        echo &amp;quot;options:&amp;quot;&lt;br /&gt;
	        echo &amp;quot;    -q --quiet           No messages&amp;quot;&lt;br /&gt;
	        echo &amp;quot;    -n --no-force-sleep  Ignore fail when putting drive to sleep&amp;quot;&lt;br /&gt;
	        echo &amp;quot;    -d --device &amp;lt;path&amp;gt;   SCSI device, default: $DEFAULT_DEVICE&amp;quot;&lt;br /&gt;
	        exit 1&lt;br /&gt;
	    ;;&lt;br /&gt;
	esac&lt;br /&gt;
    fi&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
if [ -d $SCSI_DEVICE ] &amp;amp;&amp;amp; IsDocked &amp;quot;ata_bay&amp;quot;; then&lt;br /&gt;
    sync&lt;br /&gt;
    for BLOCK in $(/bin/cat $SCSI_DEVICE/block/*/*/dev $SCSI_DEVICE/block/*/dev 2&amp;gt; /dev/null); do&lt;br /&gt;
	DEVICE=$(Block2Device &amp;quot;$BLOCK&amp;quot;) &amp;amp;&amp;amp; ReleaseDevice &amp;quot;$DEVICE&amp;quot; || FAIL=&amp;quot;1&amp;quot;&lt;br /&gt;
    done&lt;br /&gt;
    if [ $FAIL ]; then&lt;br /&gt;
	exit 1&lt;br /&gt;
    fi&lt;br /&gt;
&lt;br /&gt;
    sync&lt;br /&gt;
    BLOCK=$(cat $SCSI_DEVICE/block/*/dev 2&amp;gt; /dev/null) &amp;amp;&amp;amp;&lt;br /&gt;
    DEVICE=$(Block2Device &amp;quot;$BLOCK&amp;quot;) &amp;amp;&amp;amp; SleepDrive &amp;quot;$DEVICE&amp;quot; || exit 1 &lt;br /&gt;
    sleep 3&lt;br /&gt;
    DeleteScsiDevice &amp;quot;$SCSI_DEVICE&amp;quot; || exit 1&lt;br /&gt;
    sleep 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! -d $SCSI_DEVICE ] &amp;amp;&amp;amp; $(IsDocked &amp;quot;ata_bay&amp;quot;); then&lt;br /&gt;
    if Undock &amp;quot;ata_bay&amp;quot;; then&lt;br /&gt;
	Message &amp;quot;AtaBay undocked&amp;quot;&lt;br /&gt;
	exit 0&lt;br /&gt;
    else&lt;br /&gt;
	Message &amp;quot;cannot undock AtaBay&amp;quot;&lt;br /&gt;
	exit 1&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if $(IsDocked &amp;quot;battery_bay&amp;quot;); then&lt;br /&gt;
    if Undock &amp;quot;battery_bay&amp;quot;; then&lt;br /&gt;
	Message &amp;quot;BatteryBay undocked&amp;quot;&lt;br /&gt;
	exit 0&lt;br /&gt;
    else&lt;br /&gt;
	Message &amp;quot;cannot undock BatteryBay&amp;quot;&lt;br /&gt;
	exit 1&lt;br /&gt;
    fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
Message &amp;quot;UltraBay is already undock&amp;quot;&lt;br /&gt;
exit 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
UDEV rule&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ENV{BAY_EVENT}==&amp;quot;3&amp;quot;, ACTION==&amp;quot;change&amp;quot;, SUBSYSTEM==&amp;quot;scsi&amp;quot;, RUN+=&amp;quot;/usr/local/sbin/ultrabay.sh -q -d /sys$DEVPATH&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vogo</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Tp_smapi&amp;diff=43397</id>
		<title>Tp smapi</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Tp_smapi&amp;diff=43397"/>
		<updated>2009-06-07T12:53:50Z</updated>

		<summary type="html">&lt;p&gt;Vogo: /* Model-specific status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|style=&amp;quot;vertical-align:top;padding-right:20px;width:10px;white-space:nowrap;&amp;quot; | __TOC__&lt;br /&gt;
|style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
The &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; kernel module exposes some features of the ThinkPad hardware/firmware via a &amp;lt;tt&amp;gt;sysfs&amp;lt;/tt&amp;gt; interface. Currently, the main implemented functionality is control of battery charging and extended battery status. The tp_smapi software package also includes an improved version of the [[HDAPS]] driver. The underlying hardware interfaces are [[SMAPI support for Linux|SMAPI]] and direct access to the embedded controller.&lt;br /&gt;
&lt;br /&gt;
This driver uses undocumented features and direct hardware access, so it may work unreliably or even damage your hardware; but so far no such damage has been reported.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
*&amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; driver&lt;br /&gt;
**Battery charge/discharge control&lt;br /&gt;
**Battery status information&lt;br /&gt;
*&amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; driver (compared with the standard &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; driver)&lt;br /&gt;
**Improved stability&lt;br /&gt;
**Improved model support&lt;br /&gt;
**Improved functionality&lt;br /&gt;
&lt;br /&gt;
===Project Homepage / Availability===&lt;br /&gt;
* Project page: http://tpctl.sourceforge.net/&lt;br /&gt;
* You need to download only the &amp;lt;i&amp;gt;tp_smapi&amp;lt;/i&amp;gt; package.&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
====Installation from source====&lt;br /&gt;
You will need the kernel headers and makefiles corresponding to your current kernel version. On {{Fedora}}, this means {{cmdroot|yum install kernel-devel-$(uname -r)}} .&lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|tar xzvf tp_smapi-0.40.tgz}}&lt;br /&gt;
:{{cmdroot|cd tp_smapi-0.40}}&lt;br /&gt;
&lt;br /&gt;
Then, either compile and load the driver within the current working directory (for testing):&lt;br /&gt;
:{{cmdroot|make load}}&lt;br /&gt;
OR compile and install into the kernel's module path:&lt;br /&gt;
:{{cmdroot|make install}}&lt;br /&gt;
&lt;br /&gt;
If you use the [[HDAPS]] driver, add &amp;lt;tt&amp;gt;HDAPS=1&amp;lt;/tt&amp;gt; to also patch the &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; for compatibility with &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; (this requires a kernel source tree matching the current kernel).&lt;br /&gt;
Again, either load the driver within the current working directory:&lt;br /&gt;
:{{cmdroot|1=make load HDAPS=1}}&lt;br /&gt;
OR install into the kernel's module path:&lt;br /&gt;
:{{cmdroot|1=make install HDAPS=1}}&lt;br /&gt;
&lt;br /&gt;
To prepare a stand-alone patch against the current kernel tree (including&lt;br /&gt;
a patch against &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; and new &amp;lt;tt&amp;gt;Kconfig&amp;lt;/tt&amp;gt; entries):&lt;br /&gt;
:{{cmdroot|make patch}}&lt;br /&gt;
&lt;br /&gt;
To delete all autogenerated files:&lt;br /&gt;
:{{cmdroot|make clean}}&lt;br /&gt;
&lt;br /&gt;
The original kernel tree is never modified by any these commands. &lt;br /&gt;
The {{path|/lib/modules}} directory is modified only by {{cmdroot|make install}}.&lt;br /&gt;
&lt;br /&gt;
====Installation in Gentoo====&lt;br /&gt;
The {{Gentoo}} portage system carries a [http://packages.gentoo.org/package/app-laptop/tp_smapi tp_smapi package], which follows the latest version pretty closely. On a Gentoo system, you can install and load as follows.&lt;br /&gt;
&lt;br /&gt;
If you use the [[HDAPS]] driver, do this first:&lt;br /&gt;
&lt;br /&gt;
* Disable the &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; module in your kernel configuration (Device Drivers &amp;amp;rarr; Hardware Monitoring Support &amp;amp;rarr; IBM Hard Drive Active Protection System)&lt;br /&gt;
* Rebuild and install the kernel&lt;br /&gt;
* Add the &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; use flag in {{path|/etc/make.conf}}&lt;br /&gt;
* {{cmdroot|rmmod hdaps}}&lt;br /&gt;
&lt;br /&gt;
Then:&lt;br /&gt;
* {{cmdroot|emerge tp_smapi}} (or install tp_smapi with hdaps support manually, as above)&lt;br /&gt;
* {{cmdroot|echo &amp;quot;tp_smapi&amp;quot; &amp;gt;&amp;gt; /etc/modules.autoload.d/kernel-2.6}}&lt;br /&gt;
* {{cmdroot|echo &amp;quot;hdaps&amp;quot; &amp;gt;&amp;gt; /etc/modules.autoload.d/kernel-2.6}}&lt;br /&gt;
&lt;br /&gt;
Then reboot, or run:&lt;br /&gt;
* {{cmdroot|modprobe tp_smapi}}&lt;br /&gt;
* {{cmdroot|modprobe hdaps}}&lt;br /&gt;
&lt;br /&gt;
====Installation on Debian unstable (sid), testing (squeeze) or stable (lenny)====&lt;br /&gt;
Debian now contains the [http://packages.debian.org/tp-smapi packaged module source] and prebuilt modules for Debian kernels.&lt;br /&gt;
&lt;br /&gt;
If you use a stock Debian kernel, you can install the tp_smapi modules with:&lt;br /&gt;
* {{cmdroot|apt-get install tp-smapi-modules-`uname -r`}}&lt;br /&gt;
* in order to make sure the modules package is kept in sync with the kernel one, you may also want to install the &amp;lt;code&amp;gt;tm-smapi-modules-2.6-686&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;tm-smapi-modules-2.6-amd64&amp;lt;/code&amp;gt; package, depending on your architecture &lt;br /&gt;
&lt;br /&gt;
If you use a custom kernel, you can build tp_smapi with module-assistant:&lt;br /&gt;
* {{cmdroot|aptitude install tp-smapi-source}}&lt;br /&gt;
* {{cmdroot|m-a -t a-i tp-smapi}}&lt;br /&gt;
&lt;br /&gt;
====Installation on Ubuntu Jaunty====&lt;br /&gt;
I have posted my experiences [http://meandmyubuntu.blogspot.com/2009/05/getting-hdasp-to-work-on-jaunty.html here] &lt;br /&gt;
&lt;br /&gt;
====Installation on Ubuntu Hardy====&lt;br /&gt;
Ubuntu ships tp_smapi in their linux-ubuntu-modules Package since Hardy, so you don't have to build it yourself. Please note that they have renamed tp_smapi's modified &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; module to &amp;lt;tt&amp;gt;hdaps_ec&amp;lt;/tt&amp;gt;. You should load &amp;lt;tt&amp;gt;hdaps_ec&amp;lt;/tt&amp;gt;, not &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Some Ubuntu packages lack the &amp;lt;tt&amp;gt;hdaps_ec&amp;lt;/tt&amp;gt; module, as reported [https://bugs.launchpad.net/ubuntu/+source/linux/+bug/297213 here].&lt;br /&gt;
&lt;br /&gt;
====Installation on older Ubuntu/Debian====&lt;br /&gt;
Installation on Ubuntu or Debian is quite easy, but there are a few things to look after:&lt;br /&gt;
&lt;br /&gt;
To get your system ready for compiling code, install the build-essentials (as root, of course, as all of the following comands; Ubuntu users have to prepend 'sudo' to every line and enter their own password when prompted):&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;apt-get install build-essential&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get tp_smapi to work, obtain the latest source as mentioned above and unpack it. If you want to use HDAPS, you need to install the kernel source matching te kernel you are running. To do so, issue this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;uname -r&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will give you the version of your current kernel. &lt;br /&gt;
Debian users execute the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;apt-get install linux-source-`uname -r`&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ubuntu users execute the following using the kernel-version only (exclude -XX-generic; e.g. 'linux-source-2.6.20'):&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;apt-get install linux-source-`uname -r`&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Be sure to unpack the source file. The easiest way is to open Nautilus as root:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;sudo nautilus&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then browse to /usr/src/ and extract the source file to that directory.&lt;br /&gt;
&lt;br /&gt;
Now change to the tp_smapi dir:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;cd tp_smapi-X.YY&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt; (X.YY being the version-number of [[tp_smapi]])&lt;br /&gt;
and make and install tp_smapi as instructed above.&lt;br /&gt;
&lt;br /&gt;
If you get an error that the kernel version isn't matching (or that you need to set KSRC/KBUILD), please check that there is a symlink from the modules dir to the kernel source:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;root@localhost:~#ls -l /lib/modules/2.6.20-16-generic&lt;br /&gt;
lrwxrwxrwx  1 root root     28 2007-02-02 08:39 build -&amp;gt; /usr/src/linux-source-2.6.20&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Create the link if the line above is not existent:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;root@localhost:~#ln -s /usr/src/linux-source-2.6.20 /lib/modules/2.6.20-16-generic/build&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the following will build and install the correct modules to their locations:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;make install HDAPS=1&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
To make sure your system loads the modules at boot time, do this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;echo &amp;quot;tp_smapi&amp;quot; &amp;gt;&amp;gt; /etc/modules&lt;br /&gt;
echo &amp;quot;hdaps&amp;quot; &amp;gt;&amp;gt; /etc/modules&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
and update your initramfs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;update-initramfs -u&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get tp_smapi running now, just load the modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;modprobe -a tp_smapi hdaps&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This description was tested on Kubuntu 'Feisty Fawn' and should work on all Debian-based distros with minor tweaks.&lt;br /&gt;
&lt;br /&gt;
'''EDIT:''' Works on Kubuntu 7.10 (&amp;quot;Gutsy Gibbon&amp;quot;), too&lt;br /&gt;
&lt;br /&gt;
===Battery charge control features===&lt;br /&gt;
To set the thresholds for starting and stopping battery charging (in percent of current full charge capacity):&lt;br /&gt;
:{{cmdroot|echo 40 &amp;gt; /sys/devices/platform/smapi/BAT0/start_charge_thresh}}&lt;br /&gt;
:{{cmdroot|echo 70 &amp;gt; /sys/devices/platform/smapi/BAT0/stop_charge_thresh}}&lt;br /&gt;
:{{cmdroot|cat /sys/devices/platform/smapi/BAT0/*_charge_thresh}}&lt;br /&gt;
{{HINT|Battery charging thresholds can be used to keep Li-Ion ad Li-Polymer batteries partially charged, in order to [[Maintenance#Battery_treatment|increase their lifetime]].}}&lt;br /&gt;
To prevent charging for 17 minutes (regardless of thresholds):&lt;br /&gt;
:{{cmdroot|echo 17 &amp;gt; /sys/devices/platform/smapi/BAT0/inhibit_charge_minutes}}&lt;br /&gt;
{{HINT|Charge inhibiting can be used to reduce the power draw of the laptop, in order to use an under-spec power supply that can't handle the combined power draw of running and charging. It can also be used to control which battery is charged when [[How to use UltraBay batteries|using an Ultrabay battery]].}}&lt;br /&gt;
&lt;br /&gt;
To cancel charging preventation:&lt;br /&gt;
:{{cmdroot|echo 0 &amp;gt; /sys/devices/platform/smapi/BAT0/inhibit_charge_minutes}}&lt;br /&gt;
&lt;br /&gt;
To force battery discharging (even if connected to AC):&lt;br /&gt;
:{{cmdroot|echo 1 &amp;gt; /sys/devices/platform/smapi/BAT0/force_discharge}}&lt;br /&gt;
{{HINT|This can be used to choose which battery is discharged when [[How to use UltraBay batteries|using an UltraBay battery]].}}&lt;br /&gt;
&lt;br /&gt;
To cancel forced discharge:&lt;br /&gt;
:{{cmdroot|echo 0 &amp;gt; /sys/devices/platform/smapi/BAT0/force_discharge}}&lt;br /&gt;
&lt;br /&gt;
===Battery status features===&lt;br /&gt;
To view extended battery status such as charging state, voltage, current, capacity, cycle count and model information:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/installed&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/state       # idle/charging/discharging&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/cycle_count&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/current_now # instantaneous current&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/current_avg # last minute average&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/power_now   # instantaneous power&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/power_avg   # last minute average&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/last_full_capacity&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/remaining_percent&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/remaining_running_time&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/remaining_charging_time&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/remaining_capacity&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/design_capacity&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/voltage&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/design_voltage&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/manufacturer&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/model&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/barcoding&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/chemistry&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/serial&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/manufacture_date&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/first_use_date&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/temperature # in milli-Celsius&lt;br /&gt;
# cat /sys/devices/platform/smapi/ac_connected&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The raw status data is also available, including some fields not listed above (in case you can figure them out):&lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|cat /sys/devices/platform/smapi/BAT0/dump}}&lt;br /&gt;
&lt;br /&gt;
In all of the above, replace &amp;lt;tt&amp;gt;BAT0&amp;lt;/tt&amp;gt; with &amp;lt;tt&amp;gt;BAT1&amp;lt;/tt&amp;gt; to address the 2nd battery.&lt;br /&gt;
&lt;br /&gt;
Note that the battery status readout conflicts with the stock [[HDAPS|hdaps]] driver, so if you use &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; you will need to load &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; using {{cmdroot|1=make load HDAPS=1}} (see [[#Bundled hdaps driver|Bundled hdaps driver]] below).&lt;br /&gt;
&lt;br /&gt;
On [[ACPI]]-enabled systems, most of above information is also available through the files under {{path|/proc/acpi/battery}}. However, the ACPI interface does not include the instantaneous power and cycle count readouts, and does not work well when [[How to use UltraBay batteries|hotswapping UltraBay batteries]].&lt;br /&gt;
&lt;br /&gt;
====Scripts====&lt;br /&gt;
Some scripts can make it easier to grep the information you need from tp_smapi&lt;br /&gt;
* [[battery.rb]]&lt;br /&gt;
&lt;br /&gt;
===Other features===&lt;br /&gt;
&lt;br /&gt;
There is also [[sysfs]] attribute for making direct SMAPI requests to the SM BIOS firmware. Don't touch it unless you really know what you're doing. Example:&lt;br /&gt;
 # echo '211a 100 0 0' &amp;gt; /sys/devices/platform/smapi/smapi_request; cat /sys/devices/platform/smapi/smapi_request&lt;br /&gt;
 211a 34b b2 0 0 0 'OK'&lt;br /&gt;
The &amp;quot;4b&amp;quot; in the 2nd value, converted to decimal, is 75: the current charging stop threshold (stop_charge_thresh).&lt;br /&gt;
&lt;br /&gt;
===Bundled &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; driver===&lt;br /&gt;
&lt;br /&gt;
The tp_smapi package includes a modified version of the &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; Linux kernel driver used by the [[HDAPS]] system. To use &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; concurrently, you '''must''' use the modified version.&lt;br /&gt;
&lt;br /&gt;
To build the modified version, simply append the &amp;lt;tt&amp;gt;HDAPS=1&amp;lt;/tt&amp;gt; parameter to the &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt; command (see [[#Installation|Installation]] above):&lt;br /&gt;
:{{cmdroot|1=make load HDAPS=1}}&lt;br /&gt;
or&lt;br /&gt;
:{{cmdroot|1=make install HDAPS=1}}&lt;br /&gt;
&lt;br /&gt;
If you don't do that, you will not be able to load &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; (and its support module &amp;lt;tt&amp;gt;thinkpad_ec&amp;lt;/tt&amp;gt;) when &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; is loaded, and vice versa. You can use &amp;lt;tt&amp;gt;rmmod&amp;lt;/tt&amp;gt; to switch between these modules.&lt;br /&gt;
&lt;br /&gt;
Note that some of the battery status is also visible through ACPI ({{path|/proc/acpi/battery/*}}), independently of &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The modified &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; has several changes:&lt;br /&gt;
* The &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; driver in mainline kernels conflicts with the extended battery status (they use the same IO ports). The modified &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; coordinates this access through the bundled &amp;lt;tt&amp;gt;thinkpad_ec&amp;lt;/tt&amp;gt; driver.&lt;br /&gt;
* The modified &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; driver fixes reliability and improves support for recent ThinkPad models (*60 and newer), since unlike the mainline driver, it correctly follows the Embedded Controller communication protocol.&lt;br /&gt;
* Several other improvements, such as the ability to control the polling rate.&lt;br /&gt;
&lt;br /&gt;
===Troubleshooting===&lt;br /&gt;
==== &amp;lt;tt&amp;gt;thinkpad_ec: cannot claim io ports 0x1600-0x161f&amp;lt;/tt&amp;gt; ====&lt;br /&gt;
The &amp;quot;&amp;lt;tt&amp;gt;thinkpad_ec: cannot claim io ports 0x1600-0x161f!&amp;lt;/tt&amp;gt;&amp;quot; error message is printed when loading the &amp;lt;tt&amp;gt;thinkpad_ec&amp;lt;/tt&amp;gt; module on some recent ThinkPad models.  This occurs because the ACPI BIOS DSDT is reserving ports used by tp_smapi.&lt;br /&gt;
&lt;br /&gt;
As a workaround, add the &amp;lt;tt&amp;gt;force_io=1&amp;lt;/tt&amp;gt; module parameter to &amp;lt;tt&amp;gt;thinkpad_ec&amp;lt;/tt&amp;gt; in {{path|/etc/modprobe.conf}} (or your distribution's equivalent). For transient testing, load the modules as follows:&lt;br /&gt;
&lt;br /&gt;
: {{cmdroot|1=make load HDAPS=1 FORCE_IO=1}}&lt;br /&gt;
&lt;br /&gt;
Note: force_io option was added in tp_smapi v0.40 (released 2008-12-16).&lt;br /&gt;
&lt;br /&gt;
Models which need this option include:&lt;br /&gt;
* ThinkPad {{T400}}&lt;br /&gt;
* ThinkPad {{T500}}&lt;br /&gt;
* ThinkPad {{X301}}&lt;br /&gt;
&lt;br /&gt;
More information:&lt;br /&gt;
* http://bugzilla.kernel.org/show_bug.cgi?id=12221&lt;br /&gt;
* http://www.nabble.com/thinkpad_ec-fails-to-load-on-Thinkpad-T500-td19932985.html&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;tt&amp;gt;thinkpad_ec: no ThinkPad embedded controller!&amp;lt;/tt&amp;gt; ====&lt;br /&gt;
If you get &amp;quot;&amp;lt;tt&amp;gt;thinkpad_ec: no ThinkPad embedded controller!&amp;lt;/tt&amp;gt;&amp;quot; when trying to load the module on a supported model listed below, you should [[BIOS_Upgrade|upgrade your BIOS]]. Some early BIOS (like 1.x on the X31) don't handle the embedded controller.&lt;br /&gt;
&lt;br /&gt;
===Model-specific status===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 92%&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
|+&amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; feature support matrix&lt;br /&gt;
|-&lt;br /&gt;
! colspan=12 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; | &lt;br /&gt;
=====A series=====&lt;br /&gt;
|-&lt;br /&gt;
{{tp_smapi/model_status_table_header}}&lt;br /&gt;
|-&lt;br /&gt;
! {{A22p}} 2629-USG&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || N/A || N/A ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{A30}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || N/A || N/A ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! colspan=12 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
=====G series=====&lt;br /&gt;
|-&lt;br /&gt;
{{tp_smapi/model_status_table_header}}&lt;br /&gt;
|-&lt;br /&gt;
! {{G41}}&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cunk}} || N/A || N/A ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! colspan=12 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=====R series=====&lt;br /&gt;
|-&lt;br /&gt;
{{tp_smapi/model_status_table_header}}&lt;br /&gt;
|-&lt;br /&gt;
! {{R31}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || N/A || N/A ||      ||  || || No SMAPI BIOS&lt;br /&gt;
|-&lt;br /&gt;
! {{R40}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || N/A || N/A ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R50}}&lt;br /&gt;
| {{Cunk}} || {{Cno}}  || {{Cunk}} || {{Cunk}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R50e}} 1834-JAG&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cyes}} || {{Cyes}} || N/A || N/A ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R50e}} 1834-5US&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cyes}} || {{Cyes}} || N/A || N/A ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R50p}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R51}} 18*&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} 0 || 0.32 || 3.22 || || Machine types 1829, 1830, 1831 and 1836&lt;br /&gt;
|-&lt;br /&gt;
! {{R51}} 28*&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      || 1.29 || || Machine types 2883, 2887, 2888, 2889, 2894 and 2495&lt;br /&gt;
|-&lt;br /&gt;
! {{R52}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} 0 || 0.33 || 1.29 || 1.06 ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R60}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} ||{{Cyes}}  || {{Cno|text=}} 1 || 0.33 || || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R61}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} || {{Cyes}} ||{{Cyes}}  || {{Cyes|text=}} 1 || 0.35-test1 || 7KETA7WW 2.07 || 7KHT24WW 1.08 || Machine type 8918&lt;br /&gt;
|-&lt;br /&gt;
! {{R61i}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} || {{Cyes}} ||{{Cunk}}  || {{Cunk}}  ||    ||   ||   || Machine type 8250&lt;br /&gt;
|-&lt;br /&gt;
! {{R400}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} ||{{Cyes}}  || {{Cyes|text=}} 1 || 0.40-1   ||   ||   || Machine type 7443&lt;br /&gt;
|-&lt;br /&gt;
! colspan=12 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=====T series=====&lt;br /&gt;
|-&lt;br /&gt;
{{tp_smapi/model_status_table_header}}&lt;br /&gt;
|-&lt;br /&gt;
! {{T20}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || N/A || N/A ||      ||  || || Has SMAPI BIOS but no function is supported. EC LPC3 protocol fails.&lt;br /&gt;
|-&lt;br /&gt;
! {{T22}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || N/A || N/A ||      ||  || || Has SMAPI BIOS but no function is supported. EC LPC3 protocol fails.&lt;br /&gt;
|-&lt;br /&gt;
! {{T23}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || N/A || N/A ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T30}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || N/A || N/A ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T40}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || N/A || N/A ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T40p}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || N/A || N/A ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T41}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cunk}} || 0.37 || 3.23 || 3.04 ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T41p}} 2373-AM9&lt;br /&gt;
| {{Cno}} || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} 1 || 0.32 || 3.20 || v3.04 ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T42}}&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T42p}} 2373-KXU&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} 1 || 0.32 || 3.21 || || Stop charge threshold works in Windows, but dmesg says &amp;quot;__get_real_thresh: cannot get stop_thresh of bat=0: Function is not supported by SMAPI BIOS&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
! {{T42p}} 2373-KUU&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T43}} 2686&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} 0 || 0.33 || 1.27 || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T43p}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cyes|text=}} 0 ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T60}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 7 || 0.32 ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T60}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 1 || 0.34 ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T60}} 1951-24G&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || 0.36 || 1.09a || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T60}} 2007-FSG&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} || 0.39 || 1.10 || 1.05b ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T60}} 1951-CZ1&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} 1 || 0.40 || 2.23 || 1.07 ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T60p}} 8743-CTO&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} 1 || 0.32 ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T61}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 1 || 0.32 ||  || || [http://ubuntuforums.org/showthread.php?p=3146719 ref]&lt;br /&gt;
|-&lt;br /&gt;
! {{T61p}} 6457-7XG&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 1 || 0.32 ||  || || [http://ubuntuforums.org/showthread.php?p=3146719 ref]&lt;br /&gt;
|-&lt;br /&gt;
! {{T400}} &lt;br /&gt;
| {{Cunk}}  || {{Cunk}}  || {{Cunk}}  || {{Cunk}}  || {{Cunk}}  || {{Cunk}}  || {{Cunk}}  1 || 0.40 || 1.19 || || Requires &amp;lt;tt&amp;gt;force_io=1&amp;lt;/tt&amp;gt; parameter to &amp;lt;tt&amp;gt;thinkpad_ec&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! {{T500}}&lt;br /&gt;
| {{Cyes}}  || {{Cyes}}  || {{Cyes}}  || {{Cyes}}  || {{Cyes}}  || {{Cyes}}  || {{Cyes}}  1 || 0.40 || 2.07 || || Requires &amp;lt;tt&amp;gt;force_io=1&amp;lt;/tt&amp;gt; parameter to &amp;lt;tt&amp;gt;thinkpad_ec&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! colspan=12 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=====X series=====&lt;br /&gt;
|-&lt;br /&gt;
{{tp_smapi/model_status_table_header}}&lt;br /&gt;
|-&lt;br /&gt;
! {{X20}} 2662-31G&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || N/A || N/A ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X22}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || N/A || N/A ||      ||  || || no EC controller found&lt;br /&gt;
|-&lt;br /&gt;
! {{X24}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cyes}} || N/A || N/A ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X30}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}} || {{Cyes}} || N/A || N/A || 0.34  || 1.09 || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X31}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cyes}} || N/A || N/A ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X32}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || N/A || N/A ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X40}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 3 || 0.32 || 2.08 || 1.62 || &lt;br /&gt;
|-&lt;br /&gt;
! {{X41}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 3 || 0.32 ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X41_Tablet}}&lt;br /&gt;
| {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cyes}}   || {{Cno|text=}} (see ref) || 0.32  || || [http://sourceforge.net/mailarchive/message.php?msg_name=4757BD30.8080808%40ugcs.caltech.edu ref] ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X60}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 6 ||      || 2.07 || 1.10 || 2.6.20 issue (see discussion)&lt;br /&gt;
|-&lt;br /&gt;
! {{X60_Tablet}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 3 || 0.34  || 7JET25WW (1.10 )  || 7JHT13WW 1.04 || [http://luke.no-ip.org/x60tablet/ ref] [http://rad.bioinfo.ulaval.ca/hardware/x60tablet ref]&lt;br /&gt;
|-&lt;br /&gt;
! {{X60s}} 1704-5UG&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cno|text=}} 3 || 0.34 || 7BETD2WW 2.13 || 7BHT40WW 1.13 ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X61}} 7673-CTO&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} || 0.37 || 7NETB9WW (2.19) || {{Cunk}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X61}} 7675-CTO&lt;br /&gt;
| {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cyes}} || {{Cno|text=}} 6 || 0.35-test1       ||  ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X61}} 7675-4KU&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 6 || 0.34 || 7NET30WW (1.11 ) || 7MHT24WW-1.02 ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X61_Tablet}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 6 || 0.32  ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X61s}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 6 / 3 || 0.32 ||  || || [http://www.slackwiki.org/ThinkPad_X61s ref] says 3 but conflicting report received&lt;br /&gt;
|-&lt;br /&gt;
! {{X200}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 7 || 0.40 || 6DET40WW (2.04 ) || 7XHT22WW-1.04 ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X300}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || 0.37 || 7TET25WW (1.02 ) || 7THT15WW-1.00c ||&lt;br /&gt;
|-&lt;br /&gt;
! colspan=12 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=====Z series=====&lt;br /&gt;
|-&lt;br /&gt;
{{tp_smapi/model_status_table_header}}&lt;br /&gt;
|-&lt;br /&gt;
! {{Z60m}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{Z60t}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{Z61m}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} 0 || 0.32 ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{Z61t}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} ||      ||  || || [https://bugs.launchpad.net/ubuntu/+source/linux-source-2.6.20/+bug/45014 ref]&lt;br /&gt;
|-&lt;br /&gt;
! {{Z61p}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! colspan=12 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=====SL series and IdeaPad=====&lt;br /&gt;
|-&lt;br /&gt;
! colspan=12 style=&amp;quot;text-align:left&amp;quot; |&lt;br /&gt;
The ThinkPad SL series and IdeaPad series have firmware that is completely different from other ThinkPad models. Neither [[tp_smapi]] nor [[thinkpad-acpi]] support these models.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SMAPI capabilities may depend on the BIOS version as well, so upgrading to the latest version of the BIOS might provide more SMAPI functions (especially true for long-lived BIOS with lots of releases, like the TP-1R).&lt;br /&gt;
&lt;br /&gt;
Please update the above and report your experience on the [[Talk:tp_smapi|discussion]] page. If the module loads but gives a &amp;quot;&amp;lt;tt&amp;gt;not supported&amp;lt;/tt&amp;gt;&amp;quot; or &amp;quot;&amp;lt;tt&amp;gt;not implementeded&amp;lt;/tt&amp;gt;&amp;quot; error when you try to use some specific file in {{path|/sys/devices/platform/smapi/}}, please report the &amp;lt;tt&amp;gt;dmesg&amp;lt;/tt&amp;gt; output and whether the corresponding functionality is available under Windows - maybe your ThinkPad just can't do that. &lt;br /&gt;
&lt;br /&gt;
While at it, you may also want to add your laptop to the [[list of DMI IDs]].&lt;br /&gt;
&lt;br /&gt;
=====HDAPS axis orientation=====&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; The HDAPS axis orientation is set using the &amp;lt;tt&amp;gt;invert&amp;lt;/tt&amp;gt; module parameter (at load time) or sysfs attribute (at runtime). The &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; driver of tp_smapi supports all 8 possible sensor orientations (inversion and swapping). You can use [[HDAPS#Visualisation_of_ThinkPad_orientation|hdaps visualisation]] to check if the settings is correct.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;invert&amp;lt;/tt&amp;gt; parameter is an integer between 0 and 7, whose meaning is defined below. (This is confusing. Most people will find it easier to just try all 8 possibilities.)&lt;br /&gt;
&lt;br /&gt;
Let &amp;lt;tt&amp;gt;X&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;Y&amp;lt;/tt&amp;gt; denote the hardware readouts. Let &amp;lt;tt&amp;gt;R&amp;lt;/tt&amp;gt; denote the laptop's roll (tilt left/right), and let &amp;lt;tt&amp;gt;P&amp;lt;/tt&amp;gt; denote the laptop's pitch (tilt forward/backward). The possible values are as follows:&lt;br /&gt;
    invert=0:   R= X  P= Y   (same as mainline)&lt;br /&gt;
    invert=1:   R=-X  P=-Y   (same as mainline)&lt;br /&gt;
    invert=2:   R=-X  P= Y   (new)&lt;br /&gt;
    invert=3:   R= X  P=-Y   (new)&lt;br /&gt;
    invert=4:   R= Y  P= X   (new)&lt;br /&gt;
    invert=5:   R=-Y  P=-X   (new)&lt;br /&gt;
    invert=6:   R=-Y  P= X   (new)&lt;br /&gt;
    invert=7:   R= Y  P=-X   (new)&lt;br /&gt;
&lt;br /&gt;
[[Category:Drivers]] [[Category:Patches]]&lt;br /&gt;
&lt;br /&gt;
===Tools using this driver===&lt;br /&gt;
&lt;br /&gt;
The driver's interface can be accessed directly through the files under {{path|/sys/devices/platform/smapi}}, or via the following tools:&lt;br /&gt;
* [[KThinkBat]] - display battery status on the KDE &amp;lt;tt&amp;gt;kicker&amp;lt;/tt&amp;gt; panel.&lt;br /&gt;
* [[gkrellm-ThinkBat]] - battery status plugin for Gkrellm2&lt;br /&gt;
* {{CodeRef|thinkpad-smapi.sh}} - script to display various SMAPI information using tp_smapi module.&lt;/div&gt;</summary>
		<author><name>Vogo</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Tp_smapi&amp;diff=43396</id>
		<title>Tp smapi</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Tp_smapi&amp;diff=43396"/>
		<updated>2009-06-07T12:52:30Z</updated>

		<summary type="html">&lt;p&gt;Vogo: /* Model-specific status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|style=&amp;quot;vertical-align:top;padding-right:20px;width:10px;white-space:nowrap;&amp;quot; | __TOC__&lt;br /&gt;
|style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
The &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; kernel module exposes some features of the ThinkPad hardware/firmware via a &amp;lt;tt&amp;gt;sysfs&amp;lt;/tt&amp;gt; interface. Currently, the main implemented functionality is control of battery charging and extended battery status. The tp_smapi software package also includes an improved version of the [[HDAPS]] driver. The underlying hardware interfaces are [[SMAPI support for Linux|SMAPI]] and direct access to the embedded controller.&lt;br /&gt;
&lt;br /&gt;
This driver uses undocumented features and direct hardware access, so it may work unreliably or even damage your hardware; but so far no such damage has been reported.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
*&amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; driver&lt;br /&gt;
**Battery charge/discharge control&lt;br /&gt;
**Battery status information&lt;br /&gt;
*&amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; driver (compared with the standard &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; driver)&lt;br /&gt;
**Improved stability&lt;br /&gt;
**Improved model support&lt;br /&gt;
**Improved functionality&lt;br /&gt;
&lt;br /&gt;
===Project Homepage / Availability===&lt;br /&gt;
* Project page: http://tpctl.sourceforge.net/&lt;br /&gt;
* You need to download only the &amp;lt;i&amp;gt;tp_smapi&amp;lt;/i&amp;gt; package.&lt;br /&gt;
&lt;br /&gt;
===Installation===&lt;br /&gt;
====Installation from source====&lt;br /&gt;
You will need the kernel headers and makefiles corresponding to your current kernel version. On {{Fedora}}, this means {{cmdroot|yum install kernel-devel-$(uname -r)}} .&lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|tar xzvf tp_smapi-0.40.tgz}}&lt;br /&gt;
:{{cmdroot|cd tp_smapi-0.40}}&lt;br /&gt;
&lt;br /&gt;
Then, either compile and load the driver within the current working directory (for testing):&lt;br /&gt;
:{{cmdroot|make load}}&lt;br /&gt;
OR compile and install into the kernel's module path:&lt;br /&gt;
:{{cmdroot|make install}}&lt;br /&gt;
&lt;br /&gt;
If you use the [[HDAPS]] driver, add &amp;lt;tt&amp;gt;HDAPS=1&amp;lt;/tt&amp;gt; to also patch the &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; for compatibility with &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; (this requires a kernel source tree matching the current kernel).&lt;br /&gt;
Again, either load the driver within the current working directory:&lt;br /&gt;
:{{cmdroot|1=make load HDAPS=1}}&lt;br /&gt;
OR install into the kernel's module path:&lt;br /&gt;
:{{cmdroot|1=make install HDAPS=1}}&lt;br /&gt;
&lt;br /&gt;
To prepare a stand-alone patch against the current kernel tree (including&lt;br /&gt;
a patch against &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; and new &amp;lt;tt&amp;gt;Kconfig&amp;lt;/tt&amp;gt; entries):&lt;br /&gt;
:{{cmdroot|make patch}}&lt;br /&gt;
&lt;br /&gt;
To delete all autogenerated files:&lt;br /&gt;
:{{cmdroot|make clean}}&lt;br /&gt;
&lt;br /&gt;
The original kernel tree is never modified by any these commands. &lt;br /&gt;
The {{path|/lib/modules}} directory is modified only by {{cmdroot|make install}}.&lt;br /&gt;
&lt;br /&gt;
====Installation in Gentoo====&lt;br /&gt;
The {{Gentoo}} portage system carries a [http://packages.gentoo.org/package/app-laptop/tp_smapi tp_smapi package], which follows the latest version pretty closely. On a Gentoo system, you can install and load as follows.&lt;br /&gt;
&lt;br /&gt;
If you use the [[HDAPS]] driver, do this first:&lt;br /&gt;
&lt;br /&gt;
* Disable the &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; module in your kernel configuration (Device Drivers &amp;amp;rarr; Hardware Monitoring Support &amp;amp;rarr; IBM Hard Drive Active Protection System)&lt;br /&gt;
* Rebuild and install the kernel&lt;br /&gt;
* Add the &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; use flag in {{path|/etc/make.conf}}&lt;br /&gt;
* {{cmdroot|rmmod hdaps}}&lt;br /&gt;
&lt;br /&gt;
Then:&lt;br /&gt;
* {{cmdroot|emerge tp_smapi}} (or install tp_smapi with hdaps support manually, as above)&lt;br /&gt;
* {{cmdroot|echo &amp;quot;tp_smapi&amp;quot; &amp;gt;&amp;gt; /etc/modules.autoload.d/kernel-2.6}}&lt;br /&gt;
* {{cmdroot|echo &amp;quot;hdaps&amp;quot; &amp;gt;&amp;gt; /etc/modules.autoload.d/kernel-2.6}}&lt;br /&gt;
&lt;br /&gt;
Then reboot, or run:&lt;br /&gt;
* {{cmdroot|modprobe tp_smapi}}&lt;br /&gt;
* {{cmdroot|modprobe hdaps}}&lt;br /&gt;
&lt;br /&gt;
====Installation on Debian unstable (sid), testing (squeeze) or stable (lenny)====&lt;br /&gt;
Debian now contains the [http://packages.debian.org/tp-smapi packaged module source] and prebuilt modules for Debian kernels.&lt;br /&gt;
&lt;br /&gt;
If you use a stock Debian kernel, you can install the tp_smapi modules with:&lt;br /&gt;
* {{cmdroot|apt-get install tp-smapi-modules-`uname -r`}}&lt;br /&gt;
* in order to make sure the modules package is kept in sync with the kernel one, you may also want to install the &amp;lt;code&amp;gt;tm-smapi-modules-2.6-686&amp;lt;/code&amp;gt; or &amp;lt;code&amp;gt;tm-smapi-modules-2.6-amd64&amp;lt;/code&amp;gt; package, depending on your architecture &lt;br /&gt;
&lt;br /&gt;
If you use a custom kernel, you can build tp_smapi with module-assistant:&lt;br /&gt;
* {{cmdroot|aptitude install tp-smapi-source}}&lt;br /&gt;
* {{cmdroot|m-a -t a-i tp-smapi}}&lt;br /&gt;
&lt;br /&gt;
====Installation on Ubuntu Jaunty====&lt;br /&gt;
I have posted my experiences [http://meandmyubuntu.blogspot.com/2009/05/getting-hdasp-to-work-on-jaunty.html here] &lt;br /&gt;
&lt;br /&gt;
====Installation on Ubuntu Hardy====&lt;br /&gt;
Ubuntu ships tp_smapi in their linux-ubuntu-modules Package since Hardy, so you don't have to build it yourself. Please note that they have renamed tp_smapi's modified &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; module to &amp;lt;tt&amp;gt;hdaps_ec&amp;lt;/tt&amp;gt;. You should load &amp;lt;tt&amp;gt;hdaps_ec&amp;lt;/tt&amp;gt;, not &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Some Ubuntu packages lack the &amp;lt;tt&amp;gt;hdaps_ec&amp;lt;/tt&amp;gt; module, as reported [https://bugs.launchpad.net/ubuntu/+source/linux/+bug/297213 here].&lt;br /&gt;
&lt;br /&gt;
====Installation on older Ubuntu/Debian====&lt;br /&gt;
Installation on Ubuntu or Debian is quite easy, but there are a few things to look after:&lt;br /&gt;
&lt;br /&gt;
To get your system ready for compiling code, install the build-essentials (as root, of course, as all of the following comands; Ubuntu users have to prepend 'sudo' to every line and enter their own password when prompted):&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;apt-get install build-essential&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get tp_smapi to work, obtain the latest source as mentioned above and unpack it. If you want to use HDAPS, you need to install the kernel source matching te kernel you are running. To do so, issue this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;uname -r&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
This will give you the version of your current kernel. &lt;br /&gt;
Debian users execute the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;apt-get install linux-source-`uname -r`&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Ubuntu users execute the following using the kernel-version only (exclude -XX-generic; e.g. 'linux-source-2.6.20'):&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;apt-get install linux-source-`uname -r`&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Be sure to unpack the source file. The easiest way is to open Nautilus as root:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;sudo nautilus&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Then browse to /usr/src/ and extract the source file to that directory.&lt;br /&gt;
&lt;br /&gt;
Now change to the tp_smapi dir:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;cd tp_smapi-X.YY&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt; (X.YY being the version-number of [[tp_smapi]])&lt;br /&gt;
and make and install tp_smapi as instructed above.&lt;br /&gt;
&lt;br /&gt;
If you get an error that the kernel version isn't matching (or that you need to set KSRC/KBUILD), please check that there is a symlink from the modules dir to the kernel source:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;root@localhost:~#ls -l /lib/modules/2.6.20-16-generic&lt;br /&gt;
lrwxrwxrwx  1 root root     28 2007-02-02 08:39 build -&amp;gt; /usr/src/linux-source-2.6.20&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
Create the link if the line above is not existent:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;root@localhost:~#ln -s /usr/src/linux-source-2.6.20 /lib/modules/2.6.20-16-generic/build&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now the following will build and install the correct modules to their locations:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;make install HDAPS=1&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
To make sure your system loads the modules at boot time, do this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;echo &amp;quot;tp_smapi&amp;quot; &amp;gt;&amp;gt; /etc/modules&lt;br /&gt;
echo &amp;quot;hdaps&amp;quot; &amp;gt;&amp;gt; /etc/modules&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
and update your initramfs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;update-initramfs -u&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get tp_smapi running now, just load the modules:&lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;lt;nowiki&amp;gt;modprobe -a tp_smapi hdaps&amp;lt;/nowiki&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This description was tested on Kubuntu 'Feisty Fawn' and should work on all Debian-based distros with minor tweaks.&lt;br /&gt;
&lt;br /&gt;
'''EDIT:''' Works on Kubuntu 7.10 (&amp;quot;Gutsy Gibbon&amp;quot;), too&lt;br /&gt;
&lt;br /&gt;
===Battery charge control features===&lt;br /&gt;
To set the thresholds for starting and stopping battery charging (in percent of current full charge capacity):&lt;br /&gt;
:{{cmdroot|echo 40 &amp;gt; /sys/devices/platform/smapi/BAT0/start_charge_thresh}}&lt;br /&gt;
:{{cmdroot|echo 70 &amp;gt; /sys/devices/platform/smapi/BAT0/stop_charge_thresh}}&lt;br /&gt;
:{{cmdroot|cat /sys/devices/platform/smapi/BAT0/*_charge_thresh}}&lt;br /&gt;
{{HINT|Battery charging thresholds can be used to keep Li-Ion ad Li-Polymer batteries partially charged, in order to [[Maintenance#Battery_treatment|increase their lifetime]].}}&lt;br /&gt;
To prevent charging for 17 minutes (regardless of thresholds):&lt;br /&gt;
:{{cmdroot|echo 17 &amp;gt; /sys/devices/platform/smapi/BAT0/inhibit_charge_minutes}}&lt;br /&gt;
{{HINT|Charge inhibiting can be used to reduce the power draw of the laptop, in order to use an under-spec power supply that can't handle the combined power draw of running and charging. It can also be used to control which battery is charged when [[How to use UltraBay batteries|using an Ultrabay battery]].}}&lt;br /&gt;
&lt;br /&gt;
To cancel charging preventation:&lt;br /&gt;
:{{cmdroot|echo 0 &amp;gt; /sys/devices/platform/smapi/BAT0/inhibit_charge_minutes}}&lt;br /&gt;
&lt;br /&gt;
To force battery discharging (even if connected to AC):&lt;br /&gt;
:{{cmdroot|echo 1 &amp;gt; /sys/devices/platform/smapi/BAT0/force_discharge}}&lt;br /&gt;
{{HINT|This can be used to choose which battery is discharged when [[How to use UltraBay batteries|using an UltraBay battery]].}}&lt;br /&gt;
&lt;br /&gt;
To cancel forced discharge:&lt;br /&gt;
:{{cmdroot|echo 0 &amp;gt; /sys/devices/platform/smapi/BAT0/force_discharge}}&lt;br /&gt;
&lt;br /&gt;
===Battery status features===&lt;br /&gt;
To view extended battery status such as charging state, voltage, current, capacity, cycle count and model information:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/installed&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/state       # idle/charging/discharging&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/cycle_count&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/current_now # instantaneous current&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/current_avg # last minute average&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/power_now   # instantaneous power&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/power_avg   # last minute average&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/last_full_capacity&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/remaining_percent&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/remaining_running_time&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/remaining_charging_time&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/remaining_capacity&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/design_capacity&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/voltage&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/design_voltage&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/manufacturer&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/model&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/barcoding&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/chemistry&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/serial&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/manufacture_date&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/first_use_date&lt;br /&gt;
# cat /sys/devices/platform/smapi/BAT0/temperature # in milli-Celsius&lt;br /&gt;
# cat /sys/devices/platform/smapi/ac_connected&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The raw status data is also available, including some fields not listed above (in case you can figure them out):&lt;br /&gt;
&lt;br /&gt;
:{{cmdroot|cat /sys/devices/platform/smapi/BAT0/dump}}&lt;br /&gt;
&lt;br /&gt;
In all of the above, replace &amp;lt;tt&amp;gt;BAT0&amp;lt;/tt&amp;gt; with &amp;lt;tt&amp;gt;BAT1&amp;lt;/tt&amp;gt; to address the 2nd battery.&lt;br /&gt;
&lt;br /&gt;
Note that the battery status readout conflicts with the stock [[HDAPS|hdaps]] driver, so if you use &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; you will need to load &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; using {{cmdroot|1=make load HDAPS=1}} (see [[#Bundled hdaps driver|Bundled hdaps driver]] below).&lt;br /&gt;
&lt;br /&gt;
On [[ACPI]]-enabled systems, most of above information is also available through the files under {{path|/proc/acpi/battery}}. However, the ACPI interface does not include the instantaneous power and cycle count readouts, and does not work well when [[How to use UltraBay batteries|hotswapping UltraBay batteries]].&lt;br /&gt;
&lt;br /&gt;
====Scripts====&lt;br /&gt;
Some scripts can make it easier to grep the information you need from tp_smapi&lt;br /&gt;
* [[battery.rb]]&lt;br /&gt;
&lt;br /&gt;
===Other features===&lt;br /&gt;
&lt;br /&gt;
There is also [[sysfs]] attribute for making direct SMAPI requests to the SM BIOS firmware. Don't touch it unless you really know what you're doing. Example:&lt;br /&gt;
 # echo '211a 100 0 0' &amp;gt; /sys/devices/platform/smapi/smapi_request; cat /sys/devices/platform/smapi/smapi_request&lt;br /&gt;
 211a 34b b2 0 0 0 'OK'&lt;br /&gt;
The &amp;quot;4b&amp;quot; in the 2nd value, converted to decimal, is 75: the current charging stop threshold (stop_charge_thresh).&lt;br /&gt;
&lt;br /&gt;
===Bundled &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; driver===&lt;br /&gt;
&lt;br /&gt;
The tp_smapi package includes a modified version of the &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; Linux kernel driver used by the [[HDAPS]] system. To use &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; concurrently, you '''must''' use the modified version.&lt;br /&gt;
&lt;br /&gt;
To build the modified version, simply append the &amp;lt;tt&amp;gt;HDAPS=1&amp;lt;/tt&amp;gt; parameter to the &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt; command (see [[#Installation|Installation]] above):&lt;br /&gt;
:{{cmdroot|1=make load HDAPS=1}}&lt;br /&gt;
or&lt;br /&gt;
:{{cmdroot|1=make install HDAPS=1}}&lt;br /&gt;
&lt;br /&gt;
If you don't do that, you will not be able to load &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; (and its support module &amp;lt;tt&amp;gt;thinkpad_ec&amp;lt;/tt&amp;gt;) when &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; is loaded, and vice versa. You can use &amp;lt;tt&amp;gt;rmmod&amp;lt;/tt&amp;gt; to switch between these modules.&lt;br /&gt;
&lt;br /&gt;
Note that some of the battery status is also visible through ACPI ({{path|/proc/acpi/battery/*}}), independently of &amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
The modified &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; has several changes:&lt;br /&gt;
* The &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; driver in mainline kernels conflicts with the extended battery status (they use the same IO ports). The modified &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; coordinates this access through the bundled &amp;lt;tt&amp;gt;thinkpad_ec&amp;lt;/tt&amp;gt; driver.&lt;br /&gt;
* The modified &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; driver fixes reliability and improves support for recent ThinkPad models (*60 and newer), since unlike the mainline driver, it correctly follows the Embedded Controller communication protocol.&lt;br /&gt;
* Several other improvements, such as the ability to control the polling rate.&lt;br /&gt;
&lt;br /&gt;
===Troubleshooting===&lt;br /&gt;
==== &amp;lt;tt&amp;gt;thinkpad_ec: cannot claim io ports 0x1600-0x161f&amp;lt;/tt&amp;gt; ====&lt;br /&gt;
The &amp;quot;&amp;lt;tt&amp;gt;thinkpad_ec: cannot claim io ports 0x1600-0x161f!&amp;lt;/tt&amp;gt;&amp;quot; error message is printed when loading the &amp;lt;tt&amp;gt;thinkpad_ec&amp;lt;/tt&amp;gt; module on some recent ThinkPad models.  This occurs because the ACPI BIOS DSDT is reserving ports used by tp_smapi.&lt;br /&gt;
&lt;br /&gt;
As a workaround, add the &amp;lt;tt&amp;gt;force_io=1&amp;lt;/tt&amp;gt; module parameter to &amp;lt;tt&amp;gt;thinkpad_ec&amp;lt;/tt&amp;gt; in {{path|/etc/modprobe.conf}} (or your distribution's equivalent). For transient testing, load the modules as follows:&lt;br /&gt;
&lt;br /&gt;
: {{cmdroot|1=make load HDAPS=1 FORCE_IO=1}}&lt;br /&gt;
&lt;br /&gt;
Note: force_io option was added in tp_smapi v0.40 (released 2008-12-16).&lt;br /&gt;
&lt;br /&gt;
Models which need this option include:&lt;br /&gt;
* ThinkPad {{T400}}&lt;br /&gt;
* ThinkPad {{T500}}&lt;br /&gt;
* ThinkPad {{X301}}&lt;br /&gt;
&lt;br /&gt;
More information:&lt;br /&gt;
* http://bugzilla.kernel.org/show_bug.cgi?id=12221&lt;br /&gt;
* http://www.nabble.com/thinkpad_ec-fails-to-load-on-Thinkpad-T500-td19932985.html&lt;br /&gt;
&lt;br /&gt;
==== &amp;lt;tt&amp;gt;thinkpad_ec: no ThinkPad embedded controller!&amp;lt;/tt&amp;gt; ====&lt;br /&gt;
If you get &amp;quot;&amp;lt;tt&amp;gt;thinkpad_ec: no ThinkPad embedded controller!&amp;lt;/tt&amp;gt;&amp;quot; when trying to load the module on a supported model listed below, you should [[BIOS_Upgrade|upgrade your BIOS]]. Some early BIOS (like 1.x on the X31) don't handle the embedded controller.&lt;br /&gt;
&lt;br /&gt;
===Model-specific status===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: 92%&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;2&amp;quot;&lt;br /&gt;
|+&amp;lt;tt&amp;gt;tp_smapi&amp;lt;/tt&amp;gt; feature support matrix&lt;br /&gt;
|-&lt;br /&gt;
! colspan=12 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; | &lt;br /&gt;
=====A series=====&lt;br /&gt;
|-&lt;br /&gt;
{{tp_smapi/model_status_table_header}}&lt;br /&gt;
|-&lt;br /&gt;
! {{A22p}} 2629-USG&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || N/A || N/A ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{A30}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || N/A || N/A ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! colspan=12 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
=====G series=====&lt;br /&gt;
|-&lt;br /&gt;
{{tp_smapi/model_status_table_header}}&lt;br /&gt;
|-&lt;br /&gt;
! {{G41}}&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cunk}} || N/A || N/A ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! colspan=12 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=====R series=====&lt;br /&gt;
|-&lt;br /&gt;
{{tp_smapi/model_status_table_header}}&lt;br /&gt;
|-&lt;br /&gt;
! {{R31}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || N/A || N/A ||      ||  || || No SMAPI BIOS&lt;br /&gt;
|-&lt;br /&gt;
! {{R40}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || N/A || N/A ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R50}}&lt;br /&gt;
| {{Cunk}} || {{Cno}}  || {{Cunk}} || {{Cunk}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R50e}} 1834-JAG&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cyes}} || {{Cyes}} || N/A || N/A ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R50e}} 1834-5US&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cyes}} || {{Cyes}} || N/A || N/A ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R50p}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R51}} 18*&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} 0 || 0.32 || 3.22 || || Machine types 1829, 1830, 1831 and 1836&lt;br /&gt;
|-&lt;br /&gt;
! {{R51}} 28*&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      || 1.29 || || Machine types 2883, 2887, 2888, 2889, 2894 and 2495&lt;br /&gt;
|-&lt;br /&gt;
! {{R52}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} 0 || 0.33 || 1.29 || 1.06 ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R60}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} ||{{Cyes}}  || {{Cno|text=}} 1 || 0.33 || || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{R61}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} || {{Cyes}} ||{{Cyes}}  || {{Cyes|text=}} 1 || 0.35-test1 || 7KETA7WW 2.07 || 7KHT24WW 1.08 || Machine type 8918&lt;br /&gt;
|-&lt;br /&gt;
! {{R61i}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} || {{Cyes}} ||{{Cunk}}  || {{Cunk}}  ||    ||   ||   || Machine type 8250&lt;br /&gt;
|-&lt;br /&gt;
! {{R400}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} ||{{Cyes}}  || {{Cyes|text=}} 1 || 0.37-6   ||   ||   || Machine type 7443; added pnpacpi=off to grub boot menu.lst; force_io=yes only supported in tp_smapi v0.40&lt;br /&gt;
|-&lt;br /&gt;
! colspan=12 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=====T series=====&lt;br /&gt;
|-&lt;br /&gt;
{{tp_smapi/model_status_table_header}}&lt;br /&gt;
|-&lt;br /&gt;
! {{T20}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || N/A || N/A ||      ||  || || Has SMAPI BIOS but no function is supported. EC LPC3 protocol fails.&lt;br /&gt;
|-&lt;br /&gt;
! {{T22}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || N/A || N/A ||      ||  || || Has SMAPI BIOS but no function is supported. EC LPC3 protocol fails.&lt;br /&gt;
|-&lt;br /&gt;
! {{T23}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || N/A || N/A ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T30}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || N/A || N/A ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T40}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || N/A || N/A ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T40p}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || N/A || N/A ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T41}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cunk}} || 0.37 || 3.23 || 3.04 ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T41p}} 2373-AM9&lt;br /&gt;
| {{Cno}} || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} 1 || 0.32 || 3.20 || v3.04 ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T42}}&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T42p}} 2373-KXU&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} 1 || 0.32 || 3.21 || || Stop charge threshold works in Windows, but dmesg says &amp;quot;__get_real_thresh: cannot get stop_thresh of bat=0: Function is not supported by SMAPI BIOS&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
! {{T42p}} 2373-KUU&lt;br /&gt;
| {{Cyes}} || {{Cno}}  || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T43}} 2686&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} 0 || 0.33 || 1.27 || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T43p}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cyes|text=}} 0 ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T60}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 7 || 0.32 ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T60}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 1 || 0.34 ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T60}} 1951-24G&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || 0.36 || 1.09a || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T60}} 2007-FSG&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} || 0.39 || 1.10 || 1.05b ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T60}} 1951-CZ1&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} 1 || 0.40 || 2.23 || 1.07 ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T60p}} 8743-CTO&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} 1 || 0.32 ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{T61}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 1 || 0.32 ||  || || [http://ubuntuforums.org/showthread.php?p=3146719 ref]&lt;br /&gt;
|-&lt;br /&gt;
! {{T61p}} 6457-7XG&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 1 || 0.32 ||  || || [http://ubuntuforums.org/showthread.php?p=3146719 ref]&lt;br /&gt;
|-&lt;br /&gt;
! {{T400}} &lt;br /&gt;
| {{Cunk}}  || {{Cunk}}  || {{Cunk}}  || {{Cunk}}  || {{Cunk}}  || {{Cunk}}  || {{Cunk}}  1 || 0.40 || 1.19 || || Requires &amp;lt;tt&amp;gt;force_io=1&amp;lt;/tt&amp;gt; parameter to &amp;lt;tt&amp;gt;thinkpad_ec&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! {{T500}}&lt;br /&gt;
| {{Cyes}}  || {{Cyes}}  || {{Cyes}}  || {{Cyes}}  || {{Cyes}}  || {{Cyes}}  || {{Cyes}}  1 || 0.40 || 2.07 || || Requires &amp;lt;tt&amp;gt;force_io=1&amp;lt;/tt&amp;gt; parameter to &amp;lt;tt&amp;gt;thinkpad_ec&amp;lt;/tt&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
! colspan=12 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=====X series=====&lt;br /&gt;
|-&lt;br /&gt;
{{tp_smapi/model_status_table_header}}&lt;br /&gt;
|-&lt;br /&gt;
! {{X20}} 2662-31G&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || N/A || N/A ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X22}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || N/A || N/A ||      ||  || || no EC controller found&lt;br /&gt;
|-&lt;br /&gt;
! {{X24}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cyes}} || N/A || N/A ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X30}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}} || {{Cyes}} || N/A || N/A || 0.34  || 1.09 || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X31}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cunk}} || {{Cyes}} || N/A || N/A ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X32}}&lt;br /&gt;
| {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cno}}  || {{Cyes}} || N/A || N/A ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X40}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 3 || 0.32 || 2.08 || 1.62 || &lt;br /&gt;
|-&lt;br /&gt;
! {{X41}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 3 || 0.32 ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X41_Tablet}}&lt;br /&gt;
| {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cyes}}   || {{Cno|text=}} (see ref) || 0.32  || || [http://sourceforge.net/mailarchive/message.php?msg_name=4757BD30.8080808%40ugcs.caltech.edu ref] ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X60}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 6 ||      || 2.07 || 1.10 || 2.6.20 issue (see discussion)&lt;br /&gt;
|-&lt;br /&gt;
! {{X60_Tablet}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 3 || 0.34  || 7JET25WW (1.10 )  || 7JHT13WW 1.04 || [http://luke.no-ip.org/x60tablet/ ref] [http://rad.bioinfo.ulaval.ca/hardware/x60tablet ref]&lt;br /&gt;
|-&lt;br /&gt;
! {{X60s}} 1704-5UG&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cno|text=}} 3 || 0.34 || 7BETD2WW 2.13 || 7BHT40WW 1.13 ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X61}} 7673-CTO&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} || 0.37 || 7NETB9WW (2.19) || {{Cunk}} ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X61}} 7675-CTO&lt;br /&gt;
| {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cunk}} || {{Cyes}} || {{Cno|text=}} 6 || 0.35-test1       ||  ||  ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X61}} 7675-4KU&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 6 || 0.34 || 7NET30WW (1.11 ) || 7MHT24WW-1.02 ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X61_Tablet}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 6 || 0.32  ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X61s}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 6 / 3 || 0.32 ||  || || [http://www.slackwiki.org/ThinkPad_X61s ref] says 3 but conflicting report received&lt;br /&gt;
|-&lt;br /&gt;
! {{X200}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} || {{Cyes}} || {{Cyes}} || {{Cno|text=}} 7 || 0.40 || 6DET40WW (2.04 ) || 7XHT22WW-1.04 ||&lt;br /&gt;
|-&lt;br /&gt;
! {{X300}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || 0.37 || 7TET25WW (1.02 ) || 7THT15WW-1.00c ||&lt;br /&gt;
|-&lt;br /&gt;
! colspan=12 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=====Z series=====&lt;br /&gt;
|-&lt;br /&gt;
{{tp_smapi/model_status_table_header}}&lt;br /&gt;
|-&lt;br /&gt;
! {{Z60m}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{Z60t}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cunk}} || {{Cyes}} || {{Cunk}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{Z61m}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes|text=}} 0 || 0.32 ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! {{Z61t}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} ||      ||  || || [https://bugs.launchpad.net/ubuntu/+source/linux-source-2.6.20/+bug/45014 ref]&lt;br /&gt;
|-&lt;br /&gt;
! {{Z61p}}&lt;br /&gt;
| {{Cyes}} || {{Cyes}} || {{Cunk}} || {{Cyes}} || {{Cyes}} || {{Cyes}} || {{Cunk}} ||      ||  || ||&lt;br /&gt;
|-&lt;br /&gt;
! colspan=12 style=&amp;quot;text-align:center;background:#efefef;&amp;quot; |&lt;br /&gt;
&lt;br /&gt;
=====SL series and IdeaPad=====&lt;br /&gt;
|-&lt;br /&gt;
! colspan=12 style=&amp;quot;text-align:left&amp;quot; |&lt;br /&gt;
The ThinkPad SL series and IdeaPad series have firmware that is completely different from other ThinkPad models. Neither [[tp_smapi]] nor [[thinkpad-acpi]] support these models.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SMAPI capabilities may depend on the BIOS version as well, so upgrading to the latest version of the BIOS might provide more SMAPI functions (especially true for long-lived BIOS with lots of releases, like the TP-1R).&lt;br /&gt;
&lt;br /&gt;
Please update the above and report your experience on the [[Talk:tp_smapi|discussion]] page. If the module loads but gives a &amp;quot;&amp;lt;tt&amp;gt;not supported&amp;lt;/tt&amp;gt;&amp;quot; or &amp;quot;&amp;lt;tt&amp;gt;not implementeded&amp;lt;/tt&amp;gt;&amp;quot; error when you try to use some specific file in {{path|/sys/devices/platform/smapi/}}, please report the &amp;lt;tt&amp;gt;dmesg&amp;lt;/tt&amp;gt; output and whether the corresponding functionality is available under Windows - maybe your ThinkPad just can't do that. &lt;br /&gt;
&lt;br /&gt;
While at it, you may also want to add your laptop to the [[list of DMI IDs]].&lt;br /&gt;
&lt;br /&gt;
=====HDAPS axis orientation=====&lt;br /&gt;
&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; The HDAPS axis orientation is set using the &amp;lt;tt&amp;gt;invert&amp;lt;/tt&amp;gt; module parameter (at load time) or sysfs attribute (at runtime). The &amp;lt;tt&amp;gt;hdaps&amp;lt;/tt&amp;gt; driver of tp_smapi supports all 8 possible sensor orientations (inversion and swapping). You can use [[HDAPS#Visualisation_of_ThinkPad_orientation|hdaps visualisation]] to check if the settings is correct.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;invert&amp;lt;/tt&amp;gt; parameter is an integer between 0 and 7, whose meaning is defined below. (This is confusing. Most people will find it easier to just try all 8 possibilities.)&lt;br /&gt;
&lt;br /&gt;
Let &amp;lt;tt&amp;gt;X&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;Y&amp;lt;/tt&amp;gt; denote the hardware readouts. Let &amp;lt;tt&amp;gt;R&amp;lt;/tt&amp;gt; denote the laptop's roll (tilt left/right), and let &amp;lt;tt&amp;gt;P&amp;lt;/tt&amp;gt; denote the laptop's pitch (tilt forward/backward). The possible values are as follows:&lt;br /&gt;
    invert=0:   R= X  P= Y   (same as mainline)&lt;br /&gt;
    invert=1:   R=-X  P=-Y   (same as mainline)&lt;br /&gt;
    invert=2:   R=-X  P= Y   (new)&lt;br /&gt;
    invert=3:   R= X  P=-Y   (new)&lt;br /&gt;
    invert=4:   R= Y  P= X   (new)&lt;br /&gt;
    invert=5:   R=-Y  P=-X   (new)&lt;br /&gt;
    invert=6:   R=-Y  P= X   (new)&lt;br /&gt;
    invert=7:   R= Y  P=-X   (new)&lt;br /&gt;
&lt;br /&gt;
[[Category:Drivers]] [[Category:Patches]]&lt;br /&gt;
&lt;br /&gt;
===Tools using this driver===&lt;br /&gt;
&lt;br /&gt;
The driver's interface can be accessed directly through the files under {{path|/sys/devices/platform/smapi}}, or via the following tools:&lt;br /&gt;
* [[KThinkBat]] - display battery status on the KDE &amp;lt;tt&amp;gt;kicker&amp;lt;/tt&amp;gt; panel.&lt;br /&gt;
* [[gkrellm-ThinkBat]] - battery status plugin for Gkrellm2&lt;br /&gt;
* {{CodeRef|thinkpad-smapi.sh}} - script to display various SMAPI information using tp_smapi module.&lt;/div&gt;</summary>
		<author><name>Vogo</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=HDAPS&amp;diff=43395</id>
		<title>HDAPS</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=HDAPS&amp;diff=43395"/>
		<updated>2009-06-07T12:47:50Z</updated>

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

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

		<summary type="html">&lt;p&gt;Vogo: /* Models featuring this Technology */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|style=&amp;quot;vertical-align:top;padding-right:20px;width:10px;&amp;quot; | [[Image:APS.jpg|IBM Active Protection System]] __NOTOC__&lt;br /&gt;
|style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 0; margin-right:10px; border: 1px solid #dfdfdf; padding: 0em 1em 1em 1em; background-color:#F8F8FF; align:right;&amp;quot;&amp;gt;&lt;br /&gt;
=== The Active Protection System ===&lt;br /&gt;
With the new series of ThinkPads IBM introduced the Active Protection System (APS) in 2003. The APS is a protection system for the ThinkPad's internal harddrive. A sensor inside the ThinkPad recognizes when the notebook is accelerated. A software applet then is triggered to park the harddisk. This way the risk of data loss in case of when the notebook is dropped is significantly reduced since the read/write head of the harddrive is parked and hence can't crash onto the platter when the notebook drops onto the floor.&lt;br /&gt;
&lt;br /&gt;
The hardware sensor is capable of not only recognizing acceleration of the notebook, but also (to a certain degree) of its whole orientation in space, relative to gravity's axis. Furthermore, having the actual control put into software, its functionality is extendable and it gives chance to implement features like the &amp;quot;ignore minor shocks&amp;quot; feature which is present in the Windows based control applet. (This feature prevents the harddrive from parking in case of minor regular shocks such as occur when in a train or car.)&lt;br /&gt;
&lt;br /&gt;
The measurements are physically performed by an [[Analog Devices ADXL320 accelerometer]] chip, managed by the [[Embedded Controller Chips|embedded controller]].&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
* [ftp://ftp.software.ibm.com/pc/pccbbs/mobiles_pdf/aps2mst.pdf IBM Active Protection System Whitepaper]&lt;br /&gt;
&lt;br /&gt;
==Hard-disk Support==&lt;br /&gt;
&lt;br /&gt;
HD-APS requires a hard-disk with [http://www.hitachigst.com/hdd/research/storage/hdi/loadunload.html head unload ramp technology] and also support on the hard-disk firmware to unload heads without flushing the disk cache.  This is required, because as soon as the APS system detects a shock is imminent, the system has less than 500ms to prepare for the shock.&lt;br /&gt;
&lt;br /&gt;
Unloading heads without flushing the cache is done using the [http://www.t13.org/Documents/UploadedDocuments/docs2003/e03120r5.pdf optional Unload Immediate feature of the IDLE IMMEDIATE ATA command].  It finishes whatever sector write is in-flight, and immediately moves the heads to the unload ramp.  Without this command, hard-disk APS cannot be trusted, as disks with big caches can take a lot of time to write it all to disk.&lt;br /&gt;
&lt;br /&gt;
So far, only hard-disks with IBM APS firmware, as well as the consumer Fujitsu HV2060AH/MHV2100AH/MHV2120AH HDs have been found to implement all the necessary functions.  Head unload technology is reasonably common in modern laptop disks, but the APS firmware is very rare in regular consumer products.  Please note that newer Apple notebooks also support APS, so it is somewhat likely that their disks also support unload immediate or a similar feature.&lt;br /&gt;
&lt;br /&gt;
(Update: February, 2009) Meanwhile, other HDD manufacturers may have added the necessary support to their new products. E.g., [http://www.hitachigst.com/tech/techlib.nsf/techdocs/3255FB0B917AEB69862574B400578C7F/$file/TS7K320_OEM_Specification.pdf Hitachi Travelstar 7K320 spec] does mention some 'Idle Immediate with Unload Option' command. The description reads pretty much like what's needed for APS, though I don't want to drop my almost new TP just to field-test it.&lt;br /&gt;
&lt;br /&gt;
==Linux Support==&lt;br /&gt;
Linux support is in development.&lt;br /&gt;
&lt;br /&gt;
This feature definitely depends on software and there is no hardware or BIOS-only way of making it work.&lt;br /&gt;
IBM made contradictory statements about their willingness to release the specifications of the hardware sensor and its API to the linux community or some developers. Although a lot of developers and other interested people from the OpenSource community actively contacted IBM to get the specs, in fact they never got them.&lt;br /&gt;
&lt;br /&gt;
However, after first efforts of [http://www.kernelthread.com/software/ams/ Amit Singh on a PowerBook] and [http://www.almaden.ibm.com/cs/people/marksmith/tpaps.html Mark Smith on a ThinkPad], the [[HDAPS]] project was founded to produce a linux kernel driver for the acceleration sensor and a user space application to monitor it. Later, a kernel patch to enable harddisk parking followed.&lt;br /&gt;
&lt;br /&gt;
See [[How to protect the harddisk through APS]] for instructions and [[Problem with APS harddisk parking]] for Troubleshooting.&lt;br /&gt;
&lt;br /&gt;
Furthermore, a list of alternative applications like theft alarm and others can be found on the [[HDAPS]] driver page.&lt;br /&gt;
&lt;br /&gt;
==Tilt detection field tests==&lt;br /&gt;
Using Perl code for WinXP:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
use Win32API::File qw(:ALL);&lt;br /&gt;
sub get_tilt {&lt;br /&gt;
      my $file = createFile(&amp;quot;//./ShockMgr&amp;quot;, &amp;quot;r ke&amp;quot;) or die &amp;quot;Can't get ShockMgr device&amp;quot;;&lt;br /&gt;
      DeviceIoControl($file, 0x733fc, [], 0, my($buf), 0x24, my($bytes), []);&lt;br /&gt;
      my @data = unpack &amp;quot;x4s*&amp;quot;, $buf;&lt;br /&gt;
      return @data[1, 0];&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
my T42 gives values of roughly 490 when at rest in normal upright position with base parallel to the ground.  As I gently tilt the T42 through all possible x or y angles, the values range from about 335-645, meaning a resolution of about 155 units per Earth gravity.  This seems to suggest that the operating range of the APS is actually about +-3 gs, although the ADXL320 is supposed to allow +-5 gs.&lt;br /&gt;
&lt;br /&gt;
As the tilt angle is the arcsine of the normalized APS reading, the Thinkpad is most tilt sensitive when in a normal upright position with base parallel to the ground.  In this position, the tilt resolution is about 0.35 - 0.4 degrees.  At maximum tilt, the resolution is much worse, about 6.5 degrees.&lt;br /&gt;
&lt;br /&gt;
Shouldn't matter much, but my tests are at an elevation of about 60 meters above sea level.&lt;br /&gt;
&lt;br /&gt;
===More field tests===&lt;br /&gt;
When placed on a reasonably flat and reasonably horizontal work surface my T43 provides readings of about x=503 and y=569. I wrote a command-line application in C# (using the .NET DllImport annotation to access the sensor.dll API) to log the sensor readings at some interval. With 150ms sampling I found the following extreme values: 335 to 654 for x, and 409 to 723 for y.  &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 x: 494.5   +/- 159.5&lt;br /&gt;
 y: 566.0   +/- 157.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Based on the maximum and minimum x and y readings I calculated the above &amp;quot;zero&amp;quot; and range values in order to convert the sensor readings to degrees and wrapped this up in a small graphical application for Windows. My data, source code, executables and a complete description can be found [http://www.stanford.edu/~bsuter/thinkpad-accelerometer/ here].&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[HDAPS]] - IBM Active Protection System Linux Driver.  Shows various applications of APS.&lt;br /&gt;
&lt;br /&gt;
==Related Links==&lt;br /&gt;
*[http://www.stanford.edu/~bsuter/thinkpad-accelerometer/ Sensor Data, Calibration, command-line and GUI executables for Windows and C# .NET source code]&lt;br /&gt;
*[http://www.ibm.com/developerworks/blogs/page/johnston?entry=python_and_thinkpad Python and ThinkPad, a Python script for Windows to access the sensor data]&lt;br /&gt;
*[http://www.pc.ibm.com/presentations/us/thinkvantage/56/index.html?shortcut=aps&amp;amp; IBMs ThinkVantage&amp;amp;trade; Technologies Flash presentation - Active Protection System]&lt;br /&gt;
*[http://www.musatcha.com/software/LaptopTheftPrevention/ Motion-Sensitive anti-theft alarm for ThinkPads with APS]&lt;br /&gt;
*[http://www-128.ibm.com/developerworks/linux/library/l-knockage.html?ca=dgr-lnxw01Knock-Knock IBM HDAPS/Linux HDAPS information page]&lt;br /&gt;
*[http://hdaps.sourceforge.net HDAPS project page]&lt;br /&gt;
*[http://sourceforge.net/mailarchive/forum.php?forum=hdaps-devel HDAPS-devel list archive]&lt;br /&gt;
&lt;br /&gt;
==Models featuring this Technology==&lt;br /&gt;
*ThinkPad {{R50}}, {{R50p}}, {{R51}}, {{R52}}, {{R60}}, {{R61}}, {{R61i}}, {{R400}}&lt;br /&gt;
*ThinkPad {{T400}}, {{T41}}, {{T41p}}, {{T42}}, {{T42p}}, {{T43}}, {{T43p}}, {{T60}}, {{T60p}}, {{T61}}, {{T61p}}&lt;br /&gt;
*ThinkPad {{X40}}, {{X41}}, {{X41_Tablet}}, {{X60}}, {{X60s}}, {{X60_Tablet}}, {{X61}}, {{X61s}}, {{X61 Tablet}}, {{X200}}&lt;br /&gt;
*ThinkPad {{Z60m}}, {{Z60t}}, {{Z61m}}, {{Z61t}}, {{Z61e}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Glossary]]&lt;/div&gt;</summary>
		<author><name>Vogo</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Integrated_Fingerprint_Reader&amp;diff=43392</id>
		<title>Integrated Fingerprint Reader</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Integrated_Fingerprint_Reader&amp;diff=43392"/>
		<updated>2009-06-07T12:42:16Z</updated>

		<summary type="html">&lt;p&gt;Vogo: /* Models featuring this Technology */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|style=&amp;quot;vertical-align:top;padding-right:20px;width:10px;&amp;quot; | [[Image:fingerprintreader.jpg|IBM Integrated Fingerprint Reader]] __NOTOC__&lt;br /&gt;
|style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 0; margin-right:10px; border: 1px solid #dfdfdf; padding: 0em 1em 1em 1em; background-color:#F8F8FF; align:right;&amp;quot;&amp;gt;&lt;br /&gt;
===Integrated Fingerprint Reader===&lt;br /&gt;
IBMs second generation of T42 models (released in Autumn 2004) was the first to feature an integrated fingerprint reader. Various models since then have had this feature, actually implemented with a number of different devices, all of which appear on the USB bus. Some are just scanners, others do the recognition in the device itself. &lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! Thinkpad Models !! Reader !! Software &lt;br /&gt;
|-&lt;br /&gt;
|T42(p) T43(p) T60(p) T61(p) R60 X41 X60s Z61(t/p/m)|| [http://reactivated.net/fprint/wiki/Upekts UPEK]  || thinkfinger or fprint &lt;br /&gt;
|-&lt;br /&gt;
|V100 V200    || [http://reactivated.net/fprint/wiki/Aes1610 Authentec AES1610] || fprint &lt;br /&gt;
|-&lt;br /&gt;
|N100 N200     || [http://reactivated.net/fprint/wiki/Aes2501 Authentec AES2501] || fprint &lt;br /&gt;
|-&lt;br /&gt;
|R61    || [http://www.reactivated.net/fprint/wiki/Upeksonly Upeksonly] || fprint &lt;br /&gt;
|-&lt;br /&gt;
|T400 T500 X200(s) X301 W500 R400 || Authentec 2810 || unsupported &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Read more about the various models of reader on the [http://reactivated.net/fprint/wiki/Supported_devices libfprint wiki]&lt;br /&gt;
&lt;br /&gt;
The UPEK device is supported by thinkfinger. Those devices and Authentec ones are supported by libfprint. &lt;br /&gt;
&lt;br /&gt;
However: The fingerprint reader is an INSECURE device and gives a false sense of security! There has been quite a bit of research by a hacker named Starbug, a member of the Chaos Computer Club, Berlin, Germany. He outlined in two very good talks how to forge each and every available fingerprint sensor available at the cost of a few euros, using materials from your local hardware store, a digicam and a laser printer! Here's some links:&lt;br /&gt;
* [http://www.ccc.de/updates/2007/umsonst-im-supermarkt?language=en  Fingerprint recognition in supermarkets]&lt;br /&gt;
* [ftp://ftp.ccc.de/pub/documentation/Fingerabdruck_Hack/fingerabdruck.mpg?language=en Video tutorial for forging fingerprints]&lt;br /&gt;
Remember, using fingerprints for authentication is much similar to having a password which is written on anything you touch.&lt;br /&gt;
&lt;br /&gt;
==Free Software==&lt;br /&gt;
&lt;br /&gt;
For some time various projects provided support for various readers. That work is being unified under the fprint library, and thus libfprint and libpam-fprint (which provides authentication via PAM) are the best way to go. These are not yet available in all distros, and for those, where you have supported hardware, thinkfinger is more widely available at the time of writing.&lt;br /&gt;
&lt;br /&gt;
Thinkfinger is at http://thinkfinger.sourceforge.net; see the [[How to enable the fingerprint reader with ThinkFinger]] for detailed instructions. It is also in Debian Lenny. This integrates seamlessly with PAM and doesn't produce a tacky graphical prompt.&lt;br /&gt;
&lt;br /&gt;
{{HINT|If you've followed the instructions and &amp;quot;tf-tool --verify&amp;quot; works, but nothing else does, make sure that the &amp;quot;uinput&amp;quot; module is loaded.}}&lt;br /&gt;
&lt;br /&gt;
==Binary Only==&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/dl_linux_bsp.asp; see the [[How to enable the fingerprint reader|corresponding HOWTO]] for detailed instructions. It however tends to be less stable than the above opensource drivers.&lt;br /&gt;
&lt;br /&gt;
==Related Links==&lt;br /&gt;
* [http://www.trustedreviews.com/article.aspx?page=1643&amp;amp;head=36 Review from TrustedReviews of the fingerprint scanner]&lt;br /&gt;
* [http://www.reactivated.net/fprint/wiki/Main_Page fprint project]&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.upek.com/support/pdf/UPEK_flyer_TCS3_TCD4.pdf TouchStrip TCS3/TCD4 spec sheet]&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;
&lt;br /&gt;
==Models featuring this Technology==&lt;br /&gt;
*ThinkPad {{R52}}, {{R60}}, {{R61}}, {{R400}}&lt;br /&gt;
*ThinkPad {{T42}}, {{T42p}}, {{T43}}, {{T43p}}, {{T60}}, {{T60p}}, {{T61}}, {{T61p}}&lt;br /&gt;
*ThinkPad {{X41}}, {{X41T}}, {{X60}}, {{X60s}}, {{X61s}}, {{X61_Tablet}}, {{X200}}, {{X301}}&lt;br /&gt;
*ThinkPad {{Z60m}}, {{Z60t}}, {{Z61m}}, {{Z61p}}, {{Z61t}}&lt;br /&gt;
*ThinkPad {{T400}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Glossary]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;thinkwiki&amp;gt;10&amp;lt;/thinkwiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vogo</name></author>
		
	</entry>
	<entry>
		<id>https://www.thinkwiki.org/w/index.php?title=Integrated_Fingerprint_Reader&amp;diff=43391</id>
		<title>Integrated Fingerprint Reader</title>
		<link rel="alternate" type="text/html" href="https://www.thinkwiki.org/w/index.php?title=Integrated_Fingerprint_Reader&amp;diff=43391"/>
		<updated>2009-06-07T12:41:38Z</updated>

		<summary type="html">&lt;p&gt;Vogo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|style=&amp;quot;vertical-align:top;padding-right:20px;width:10px;&amp;quot; | [[Image:fingerprintreader.jpg|IBM Integrated Fingerprint Reader]] __NOTOC__&lt;br /&gt;
|style=&amp;quot;vertical-align:top&amp;quot; |&lt;br /&gt;
&amp;lt;div style=&amp;quot;margin: 0; margin-right:10px; border: 1px solid #dfdfdf; padding: 0em 1em 1em 1em; background-color:#F8F8FF; align:right;&amp;quot;&amp;gt;&lt;br /&gt;
===Integrated Fingerprint Reader===&lt;br /&gt;
IBMs second generation of T42 models (released in Autumn 2004) was the first to feature an integrated fingerprint reader. Various models since then have had this feature, actually implemented with a number of different devices, all of which appear on the USB bus. Some are just scanners, others do the recognition in the device itself. &lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! Thinkpad Models !! Reader !! Software &lt;br /&gt;
|-&lt;br /&gt;
|T42(p) T43(p) T60(p) T61(p) R60 X41 X60s Z61(t/p/m)|| [http://reactivated.net/fprint/wiki/Upekts UPEK]  || thinkfinger or fprint &lt;br /&gt;
|-&lt;br /&gt;
|V100 V200    || [http://reactivated.net/fprint/wiki/Aes1610 Authentec AES1610] || fprint &lt;br /&gt;
|-&lt;br /&gt;
|N100 N200     || [http://reactivated.net/fprint/wiki/Aes2501 Authentec AES2501] || fprint &lt;br /&gt;
|-&lt;br /&gt;
|R61    || [http://www.reactivated.net/fprint/wiki/Upeksonly Upeksonly] || fprint &lt;br /&gt;
|-&lt;br /&gt;
|T400 T500 X200(s) X301 W500 R400 || Authentec 2810 || unsupported &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Read more about the various models of reader on the [http://reactivated.net/fprint/wiki/Supported_devices libfprint wiki]&lt;br /&gt;
&lt;br /&gt;
The UPEK device is supported by thinkfinger. Those devices and Authentec ones are supported by libfprint. &lt;br /&gt;
&lt;br /&gt;
However: The fingerprint reader is an INSECURE device and gives a false sense of security! There has been quite a bit of research by a hacker named Starbug, a member of the Chaos Computer Club, Berlin, Germany. He outlined in two very good talks how to forge each and every available fingerprint sensor available at the cost of a few euros, using materials from your local hardware store, a digicam and a laser printer! Here's some links:&lt;br /&gt;
* [http://www.ccc.de/updates/2007/umsonst-im-supermarkt?language=en  Fingerprint recognition in supermarkets]&lt;br /&gt;
* [ftp://ftp.ccc.de/pub/documentation/Fingerabdruck_Hack/fingerabdruck.mpg?language=en Video tutorial for forging fingerprints]&lt;br /&gt;
Remember, using fingerprints for authentication is much similar to having a password which is written on anything you touch.&lt;br /&gt;
&lt;br /&gt;
==Free Software==&lt;br /&gt;
&lt;br /&gt;
For some time various projects provided support for various readers. That work is being unified under the fprint library, and thus libfprint and libpam-fprint (which provides authentication via PAM) are the best way to go. These are not yet available in all distros, and for those, where you have supported hardware, thinkfinger is more widely available at the time of writing.&lt;br /&gt;
&lt;br /&gt;
Thinkfinger is at http://thinkfinger.sourceforge.net; see the [[How to enable the fingerprint reader with ThinkFinger]] for detailed instructions. It is also in Debian Lenny. This integrates seamlessly with PAM and doesn't produce a tacky graphical prompt.&lt;br /&gt;
&lt;br /&gt;
{{HINT|If you've followed the instructions and &amp;quot;tf-tool --verify&amp;quot; works, but nothing else does, make sure that the &amp;quot;uinput&amp;quot; module is loaded.}}&lt;br /&gt;
&lt;br /&gt;
==Binary Only==&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/dl_linux_bsp.asp; see the [[How to enable the fingerprint reader|corresponding HOWTO]] for detailed instructions. It however tends to be less stable than the above opensource drivers.&lt;br /&gt;
&lt;br /&gt;
==Related Links==&lt;br /&gt;
* [http://www.trustedreviews.com/article.aspx?page=1643&amp;amp;head=36 Review from TrustedReviews of the fingerprint scanner]&lt;br /&gt;
* [http://www.reactivated.net/fprint/wiki/Main_Page fprint project]&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.upek.com/support/pdf/UPEK_flyer_TCS3_TCD4.pdf TouchStrip TCS3/TCD4 spec sheet]&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;
&lt;br /&gt;
==Models featuring this Technology==&lt;br /&gt;
*ThinkPad {{R52}}, {{R60}}, {{R61}}&lt;br /&gt;
*ThinkPad {{T42}}, {{T42p}}, {{T43}}, {{T43p}}, {{T60}}, {{T60p}}, {{T61}}, {{T61p}}&lt;br /&gt;
*ThinkPad {{X41}}, {{X41T}}, {{X60}}, {{X60s}}, {{X61s}}, {{X61_Tablet}}, {{X200}}, {{X301}}&lt;br /&gt;
*ThinkPad {{Z60m}}, {{Z60t}}, {{Z61m}}, {{Z61p}}, {{Z61t}}&lt;br /&gt;
*ThinkPad {{T400}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Glossary]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;thinkwiki&amp;gt;10&amp;lt;/thinkwiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vogo</name></author>
		
	</entry>
</feed>