Lenovo ThinkPad T400

From ArchWiki
Revision as of 00:52, 23 October 2009 by Takedown (Talk | contribs)

Jump to: navigation, search

System Sepcification

  • CPU : Intel® Core™2 Duo Processor T9400 (6M Cache, 2.53 GHz, 1066 MHz FSB)
  • Memory : 3GB PC3-8500 DDR3
  • WiFi : Intel WiFi Link 5300
  • Hard-Drive : 160GB, 7200rpm
  • Optical Drive : DVD Recordable
  • Integrated Graphics : Intel 4500MHD
  • Discrete Graphics : AMD M82XT Hybrid 256 MB (ATI Mobility Radeon HD 3470)
  • Screen : 14.1" WXGA+ TFT with LED Backlit
  • Gigabit Ethernet, Modem
  • Express Card & PC Card Slots
  • Integrated Bluetooth PAN
  • No camera
  • No fingerprint reader
  • No Intel Turbo Memory


Ethernet Card

The kernel module to get the network card to work is e1000e. I had no problem getting it to work.


Lenovo offers different options in paragraph wireless hardware:

Intel chipset

  • Wifi link 5100 and 5300

The drivers are included in the 2.6.27 kernel. However, it's important to make sure that you have the correct firmware. I installed the iwlwifi-5000-ucode. See this section for more details.

Realtek chipset

  • Rtl8192SE
 11b/g/n Wireless Lan Mini-PCI Express Adapter II
 03:00.0 Network controller: Realtek Semiconductor Co., Ltd. Device 8172 (rev 10)

See http://www.thinkwiki.org/wiki/ThinkPad_11b/g/n_Wireless_LAN_Mini-PCI_Express_Adapter_II for more details.

Realtek r8192se_pci Driver

Finally came the expected driver (alpha? beta?), I think it's premature but it works perfectly.

Here the driver (r8192se_pci):

 32 bits: http://launchpadlibrarian.net/33927923/rtl8192se_linux_2.6.0010.1012.2009.tar.gz
 64 bits: http://launchpadlibrarian.net/34090326/rtl8192se_linux_2.6.0010.1012.2009_64bit.tar.gz

untar; make; make install; reboot and enjoy it

I test it with:

  • netcfg
  • standar commands:
 ifconfig wlan0 up
 iwlist wlan0 scan
 iwconfig wlan0 essid MySsid
 wpa_supplicant -B -Dwext -i wlan0 -c /etc/wpa_supplicant.conf
 dhcpcd wlan0

Ndiswrapper option: If you have a 32-bit version of arch, it should be possible to get it working with ndiswrapper:

 7z x rtl-8191se_1080.7.0520(www.station-drivers.com).exe

Unfortunately, if you are running a 64-bit version of arch then it seems you are out of luck currently; the WinX64 drivers included in the above package do not work.

For more information, see http://ubuntuforums.org/showthread.php?t=1182457 and http://forums.lenovo.com/lnv/board/message?board.id=Special_Interest_Linux&message.id=1196 .


There is a module "hsfmodem" provided by http://www.linuxant.com/.

Graphics/Xorg Configuration

Note that it's not possible to switch the graphics adapter without restarting X. First of enable Integrated, Discrete or both graphics cards in your BIOS. This setting is under "Config->Display". If you choose both/switchable you must set the "BusID"-tag for each card in yor "xorg.conf" (see #Hotplugging).

Note that I enabled the testing repository, which gave me access to :

  • xorg-server version 1.5.3
  • xf86-video-intel version 2.4.3
  • xf86-video-ati version 6.10.0
  • xf86-video-radeonhd 1.2.4
  • catalyst version 8.12

Integrated Graphics

After installing xorg, I installed the xf86-video-intel drivers. As root, I then ran X -configure. The generated xorg.conf worked fine. I did apply the 2D and 3D optimization, and performances in compositing window managers (like compiz or kwin) seem to have increased. I have not made any scientific measurements though.

Note : Some people have encountered problems with 3D on 2.6.28 kernels and xf86-video-intel version 2.4.3.

The following xorg.conf file was tested on a T400 with an integrated card with the 1280x800 resolution provided by the default Intel Integrated Intel GMA 4500MHD (I included the Input devices for reference)

 Section "InputDevice"
   Identifier    "Generic Keyboard"
   Driver        "kbd"
   Option        "XkbRules"    "xorg"
   Option        "XkbModel"    "pc104"
   Option        "XkbLayout"    "us"
 Section "InputDevice"
   Identifier    "Configured Mouse"
   Driver        "mouse"
   Option        "SendCoreEvents"
   Option        "Device" "/dev/input/mice"
   Option        "Emulate3Buttons" "true"
 Section "InputDevice"
   Identifier     "Synaptics Touchpad"
   Driver         "synaptics"
   Option         "CorePointer"
   Option         "Device" "/dev/psaux"
   Option         "Protocol" "auto-dev"
   Option       "Emulate3Buttons" "true"
   Option         "HorizScrollDelta" "0"
   Option       "Emulate3Buttons" "true"
   Option       "LeftEdge" "1700"
   Option       "RightEdge" "5300"
   Option       "TopEdge" "1700"
   Option       "BottomEdge" "4200"
   Option       "FingerLow" "25"
   Option       "FingerHigh" "30"
   Option       "MaxTapTime" "180"
   Option       "MaxTapMove" "220"
   Option       "VertScrollDelta" "100"
   Option       "MinSpeed" "0.06"
   Option       "MaxSpeed" "0.10"
   Option       "AccelFactor" "0.0010"
   #Option       "SHMConfig" "1"
   Option       "UpDownScrolling" "1"
   Option       "CircularScrolling" "0"
   Option       "LockedDrags" "0"
   Option       "TouchpadOff" "0"
   #Option       "Repeater" "/dev/ps2mouse"
 Section "Monitor"
   Identifier    "Configured Monitor"
 Section "Monitor"
   Identifier    "HDMI-1"
   Option        "Ignore" "True"
 Section "Monitor"
   Identifier    "HDMI-2"
   Option        "Ignore" "True"
 Section "Device"
   Identifier    "Configured Video Device"
   Driver        "intel"
   Option        "monitor-HDMI-1" "HDMI-1"
   Option        "monitor-HDMI-2" "HDMI-2"
 Section "Screen"
   Identifier    "Default Screen"
   Monitor        "Configured Monitor"
   Device        "Configured Video Device"
   DefaultDepth    24
   SubSection "Display"
       Modes    "1280x800"
 Section "ServerLayout"
   Identifier    "Default Layout"
   Screen        "Default Screen"
   InputDevice    "Synaptics Touchpad"
   InputDevice    "Configured Mouse"

NB Installing extra/libdrm and forcing discrete graphics in the bios fixed hanging problems when X quit.

Here is a minimal xorg.conf in which the Virtual screen size is specified, so that one enables support for dual monitor.

Section "Monitor"
   Identifier	"Configured Monitor"

Section "Screen"
   Identifier	"Default Screen"
   Monitor		"Configured Monitor"
   Device		"Configured Video Device"
   SubSection "Display"
       Virtual	2464 1500

Section "Device"
   Identifier	"Configured Video Device"

Discrete Graphics

All 3 ATI drivers worked. That is both open-source drivers (xf86-video-ati and xf86-video-radeonhd) and fglrx (the catalyst proprietary drivers).

I could not get the xf86-video-radeonhd drivers to detect my external monitor, but xf86-video-ati worked fine. Remember to remove catalyst and catalyst-utils before using an open source ATI drivers. ATI uses its own OpenGL library in its proprietary drivers, which is included in catalyst-utils and conflicts with libgl. As it did with the integrated graphics, running X -configure generated a working xorg.conf.

To get the catalyst drivers working, you do have to configure your xorg.conf properly. I used aticonfig --initial to generate a working xorg.conf. I did encounter a problem that I have not been able to solve yet : resizing a window in a compositing window manager takes 1-2 seconds. This makes the drivers pretty much unusable.

Synaptic, UltraNav

If you want to be able to use horizontal and vertical scroll with your touchpad add this lines to your xorg.conf

Section "Module"
 Load    "synaptics"

Section "InputDevice"
 Identifier  "Touchpad"
 Driver    "synaptics"
 Option    "AlwaysCore"
 Option    "Device" "/dev/input/mouse1"
 Option    "Protocol" "auto-dev"
 Option    "SendCoreEvents"  "true"
 Option    "LeftEdge"    "1632"
 Option    "RightEdge"     "5312"
 Option    "TopEdge"     "1575"
 Option    "BottomEdge"    "4281"
 Option    "FingerLow"     "25"
 Option    "FingerHigh"    "30"
 Option    "MaxTapTime"    "180"
 Option    "MaxTapMove"    "220"
 Option    "VertScrollDelta"   "100"
 Option    "MinSpeed"    "0.06"
 Option    "MaxSpeed"    "0.12"
 Option    "AccelFactor"     "0.0010"
 Option    "VertEdgeScroll"  "on"
 Option    "HorizEdgeScroll"   "on"
 # Option HorizScrollDelta""0"                               
 Option    "SHMConfig"   "on"

for trakpoint with third button paste & scroll add this few lines to xorg.conf too

Section "InputDevice"
 Identifier  "Trackpoint"
 Driver      "mouse"
 Option "CorePointer"
 Option "Device" "/dev/input/mice"
 Option "Protocol" "Auto"
 Option "Emulate3Buttons"
 Option "Emulate3Timeout" "50"
 Option "EmulateWheel" "on"
 Option "EmulateWheelTimeout" "200" # adjust third button paste timeout. 
 Option "EmulateWheelButton" "2"
 Option "YAxisMapping" "4 5"
 Option "XAxisMapping" "6 7"
 Option "YAxisMapping" "4 5"

finally update your layout

Section "ServerLayout"
 InputDevice    "Trackpoint" "CorePointer"
 InputDevice    "Touchpad"
 InputDevice    "Keyboard0" "CoreKeyboard"


If you want to enable hotplugging you may end up with an xorg-file like the one just below. Notis that all the mouse/keyboard configuration is taken care of by HAL. Remeber to run:

 lspci | grep -i vga

to find your PCI BusIDs

 Section "ServerLayout"                                      
   Identifier     "Xorg Configured"                    
   Screen      0  "Screen0" 0 0                        
 Section "ServerFlags"
   Option "DontZap" "false" # enable ctrl-alt-backspace
   Option "AutoAddDevices" "true" # enable hotplugging 
   Option "AllowMouseOpenFail"  "true" # Do we need this?
 Section "Files"
   ModulePath   "/usr/lib/xorg/modules"
   FontPath     "/usr/share/fonts/misc:unscaled"
   FontPath     "/usr/share/fonts/misc"         
   FontPath     "/usr/share/fonts/75dpi:unscaled"
   FontPath     "/usr/share/fonts/75dpi"         
   FontPath     "/usr/share/fonts/100dpi:unscaled"
   FontPath     "/usr/share/fonts/100dpi"         
   FontPath     "/usr/share/fonts/PEX"            
   # Additional fonts: Locale, Gimp, TTF...               
   FontPath     "/usr/share/fonts/cyrillic"       
   #FontPath     "/usr/share/lib/X11/fonts/latin2/75dpi"
   #FontPath     "/usr/share/lib/X11/fonts/latin2/100dpi"
   # True type and type1 fonts are also handled via xftlib, see /etc/X11/XftConfig!
   FontPath     "/usr/share/fonts/Type1"                                   
   FontPath     "/usr/share/fonts/ttf/western"                             
   FontPath     "/usr/share/fonts/ttf/decoratives"                         
   FontPath     "/usr/share/fonts/truetype"                                
   FontPath     "/usr/share/fonts/truetype/openoffice"                     
   FontPath     "/usr/share/fonts/truetype/ttf-bitstream-vera"             
   FontPath     "/usr/share/fonts/latex-ttf-fonts"                         
   FontPath     "/usr/share/fonts/defoma/CID"                              
   FontPath     "/usr/share/fonts/defoma/TrueType"                         
 Section "Module"
   Load  "ddc"  # ddc probing of monitor
   Load  "dbe"                          
   Load  "dri"                          
   Load  "extmod"                       
   Load  "glx"                          
   Load  "drm"                          
   Load  "bitmap" # bitmap-fonts        
   #Load  "type1"                       
   #Load  "freetype"                    
   Load  "record"                       
   Load  "synaptics" # pacman -S xf86-input-synaptics  
 Section "Device"
   Identifier  "Integrated"
   Driver      "intel" # pacman -S xf86-video-intel
   VendorName  "Intel Corporation"
   BoardName   "Mobile 4 Series Chipset Integrated Graphics Controller"
   BusID       "PCI:0:2:0" # To get your intel/ati busIDs run: "lspci | grep -i vga"
 Section "Device"
   Identifier  "Discrete"
   Driver      "radeonhd" # pacman -S xf86-video-radeonhd
   #Driver      "ati"     # pacman -S xf86-video-ati 
   VendorName  "ATI Technologies Inc"
   BoardName   "Mobility Radeon HD 3400 Series"
   BusID       "PCI:1:0:0"                     
 Section "Screen"
   Identifier "Screen0"
   Device     "Integrated" # Switch between Integrated and Discrete graphics here,
   #Device     "Discrete"  # then restart X-server (ctrl-alt-backspace).
   Monitor    "Monitor0"
   DefaultColorDepth 24
   SubSection "Display"
     Depth     24
     Modes "1440x900"

You will then also need some config files in "/etc/hal/fdi/policy/" For instant "mouse-wheel.fdi" to enable TrackPoint-scrolling:

 <match key="info.product" string="TPPS/2 IBM TrackPoint">
   <merge key="input.x11_options.EmulateWheel" type="string">true</merge>
   <merge key="input.x11_options.EmulateWheelButton" type="string">2</merge>
   <merge key="input.x11_options.YAxisMapping" type="string">4 5</merge>
   <merge key="input.x11_options.XAxisMapping" type="string">6 7</merge>
   <merge key="input.x11_options.Emulate3Buttons" type="string">true</merge>
   <merge key="input.x11_options.EmulateWheelTimeout" type="string">200</merge>

More information in the TrackPoint can be found here: http://www.thinkwiki.org/wiki/How_to_configure_the_TrackPoint. The Keyboard layout is controlled by "/etc/hal/fdi/policy/10-keymap.fdi" Modify it like this to change your layout. If you have any more questions on hotplugging (like how to enable tapping), take a look at it's wiki page.


Once you have ALSA installed, fire up alsamixer and make sure that sound is not muted. You might also want to press the Volume Up or Volume Down button. It seems than the Mute button mutes everything, even system beeps. Pressing the Volume Up or Volume Down button can unmute, but not pressing the Mute button again.

Here's the modules I have loaded that are relevant to sound :

  $ lsmod | grep snd
  snd_seq_oss            35584  0
  snd_seq_midi_event      9344  1 snd_seq_oss
  snd_seq                58336  4 snd_seq_oss,snd_seq_midi_event
  snd_seq_device          9364  2 snd_seq_oss,snd_seq
  snd_hda_intel         474672  2
  snd_hwdep              10632  1 snd_hda_intel
  snd_pcm_oss            45568  0
  snd_pcm                82440  2 snd_hda_intel,snd_pcm_oss
  snd_timer              24720  2 snd_seq,snd_pcm
  snd_page_alloc         10640  2 snd_hda_intel,snd_pcm
  snd_mixer_oss          18944  1 snd_pcm_oss
  snd                    64840  16    snd_seq_oss,snd_seq,snd_seq_device,snd_hda_intel,snd_hwdep,snd_pcm_oss,snd_pcm,snd_timer,snd_mixer_oss
  soundcore               9632  1 snd

Additionally, there is a patch for the audio driver for conexant's chipsets provided by http://www.linuxant.com which can be downloaded at http://www.linuxant.com/alsa-driver/.

Multimedia Keys

The screen brightness controls and the flashlight work without any tweaking. The other keys can be mapped using xev and xbindkeys. By following this guide you should be able to get everything working, but here's summary :

  • First, open a terminal and type xev. This starts the "Event tester".
  • Place your cursor on the "Event tester" window.
  • When you press a key on your keyboard or move your mouse, it should get displayed in a terminal. For instance, this is what shows up if you press Fn+F2
   KeyRelease event, serial 33, synthetic NO, window 0x3000001,
   root 0x86, subw 0x0, time 5537544, (76,110), root:(81,938),
   state 0x0, keycode 146 (keysym 0x0, NoSymbol), same_screen YES,
   XLookupString gives 0 bytes:
   XFilterEvent returns: False

It basically says that keycode 146 is not bound (NoSymbol). Here are all the keycodes of all multimedia buttons:

  Volume Down : keycode 174
  Volume Up : keycode 176
  Fn+F2 : keycode 146
  Fn+F3 : keycode 241
  Fn+F4 : keycode 223
  Fn+F5 : Not responding to events ??
  Fn+F7 : keycode 214
  Fn+F8 : keycode 249
  Fn+F9 : keycode 207
  Fn+F12 : keycode 165
  Fn+Up : keycode 164
  Fn+Down : keycode 162
  Fn+Left : keycode 144
  Fn+Right : keycode 153
  Fn+Home : keycode 212
  Fn+End : keycode 101
  • Type xmodmap -pke > ~/.Xmodmap in a terminal. This creates a file, .Xmodmap, containing your current keyboard mapping.
  • Now open the file with a text editor and find the keycodes you're interested in. You can map any keycode with a symbol from this list.
  • To get your new .Xmodmap loaded when you start X, just add xmodmap ~/.Xmodmap to your .xinitrc.
  • To get your new .Xmodmap loaded immediately, type xmodmap ~/.Xmodmap in a terminal.

You can now assign functions to your newly bound keys by using facilities provided by your window desktop environment or by using xbindkeys.

To use xbindkeys,

  • Start by installing it
  pacman -S xbindkeys
  • Then add xbindkeys & to your .xinitrc.
  • And finally, in your home directory, create a file called .xbindkeysrc.scm with content that would look something like
  (xbindkey '("XF86Standby") "sudo killall dhcpcd && sudo pm-suspend")
  (xbindkey '("XF86AudioRaiseVolume") "amixer set Master 2dB+ unmute")
  (xbindkey '("XF86AudioLowerVolume") "amixer set Master 2dB- unmute")


To get the mute button to work, it is necessary to pass the string acpi_osi="Linux" to the kernel as a boot parameter. See here for more details.


To enable the fan speed control, it's necessary to load the thinkpad_acpi with option fan_control=1. After the thinkpad_acpi module is loaded with this option, you can monitor and adjust the fan speed via /proc/acpi/ibm/fan.


People have been having issues with suspend resume with the current intel xf86-video-intel drivers in combination with the 4500mhd chipset. This is apparently an issue with concurrency as adding the following script (with mod 755) in /etc/pm/sleep.d fixes things. to some extent...

# Workaround for concurrency bug in xserver-xorg-video-intel 2:2.4.1-1ubuntu10.
# Save this as /etc/pm/sleep.d/00CPU 

. "/usr/lib/pm-utils/functions"
case "$1" in
		for i in /sys/devices/system/cpu/cpu*/online ; do
			echo 0 >$i
		sleep 10	# run with one core for 10 secs
		for i in /sys/devices/system/cpu/cpu*/online ; do
			echo 1 >$i

From http://ubuntu-virginia.ubuntuforums.org/showpost.php?p=6105510&postcount=12 petri4 on the ubuntu forums.

7-1 Media Card Reader

Tested for SD cards only. Works after loading modules sdhci and ricoh_mmc in /etc/rc.conf. Sometimes there are problems initializing the SD card (check dmesg) after inserting it. In such cases, try re-inserting it again.



The procedure described in the Bluetooth section of the Arch Wiki worked perfectly for me.