IBM ThinkPad X31
From ArchWiki
Contents |
Introduction
The IBM Thinkpad X31 is a wonderful little laptop which contains everything you need for your everyday work, and even some gaming, if you tweak things a little. The X31 is rock solid, light (3.7 lbs), and nowadays very cheap. The only drawback is the lack of internal optical drive.You can see the specs of the X31 on ThinkWiki, a wonderful resource with additional informations.
Installation
A basic Arch Linux installation will do just fine for about everything, so I won't talk about sound or other basic stuff. No custom kernel needed. However, you will need the following particular packages:
- ipw2100-fw and wireless_tools for wireless
- xf86-video-ati for direct rendering (see above)
- uswsusp for hibernation (see above)
The following useful packages are in the AUR.
- rovclock for boosting direct rendering (see above)
Hibernation
Simply save this script as /usr/bin/hibernation:
#!/bin/bash modprobe -r ehci_hcd /usr/sbin/s2ram -rf modprobe ehci_hcd
You now just have to run this command whenever you want to suspend to ram:
# hibernation
To hibernate and resume simply by closing the lid of your laptop, simply run this command:
# echo -e "event=button[ /]lid\naction=/usr/bin/hibernation" > /etc/acpi/events/suspend.conf
It simply tells ACPI to run the command "hibernation" on the "lid closed" event.
Note for those with resume issues after updating to kernel >=2.6.31: disable kernel modesetting by appending "nomodeset" to your kernel parameters. --Tad 05:51, 19 October 2009 (EDT)
Xorg and direct rendering
Use my /etc/xorg.conf:
Note added by Benoitb: I could not start X with your conf file, I removed some contents of the ServerFlags section to get it to start on my configuration. Others, please report your experiences.
Note from IchiFish: I had to to remove the line beginning with 'RgbPath' from this configuration file to get my X server to start. I also found it to perform worse (in terms of glxgears fps) than a plain one from hwd -xa with the PageFlip, ColorTiling and AGPMode options added. Also, if you don't intend on running a compositing window manager, it's advisable to disable the composite extension, as it can really slow things down, I've found in particular when switching to and from full screen terminal windows in XFCE. Finally, note that XV output (at least under mplayer) won't work unless the color depth is set to 24-bit (which will significantly reduce glxgears fps).
Note from Gauteh: Im using a minimal xorg.conf, the rest is configured automatically, pretty much only to be able to change the Virtual screen when I need it. Since it DRI doesn't work with it: xorg.conf at ix.io. When KMS, ATI#AMD.2FAti_cards_and_kernel_mode-setting_.28KMS.29, gets ready this should not be needed anymore, the kernel should then resize the Virtual screen/Framebuffer on request.
Section "ServerLayout" Identifier "Xorg Configured" Screen 0 "Screen0" 0 0 InputDevice "Keyboard0" "CoreKeyboard" InputDevice "PS/2 Mouse" "CorePointer" Option "AIGLX" "true" # Serial Mouse not detected # USB Mouse not detected EndSection Section "ServerFlags" Option "AllowMouseOpenFail" "true" Option "PM" "off" Option "DPMS" "off" Option "Xinerama" "0" EndSection Section "Files" RgbPath "/usr/share/X11/rgb" 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" FontPath "/usr/share/fonts/artwiz-fonts" EndSection Section "Module" Load "ddc" # ddc probing of monitor Load "dbe" Load "record" Load "extmod" Load "dbe" Load "dri" Load "glx" Load "xtrap" Load "freetype" Load "type1" Load "speedo" Load "radeon" Load "drm" EndSection Section "InputDevice" Identifier "Keyboard0" Driver "keyboard" Option "CoreKeyboard" Option "XkbRules" "xorg" Option "XkbModel" "pc105" Option "XkbLayout" "us" Option "XkbVariant" Option "XkbOptions" "ctrl:nocaps" EndSection Section "InputDevice" Identifier "Serial Mouse" Driver "mouse" Option "Protocol" "Microsoft" Option "Device" "/dev/ttyS0" Option "Emulate3Buttons" "true" Option "Emulate3Timeout" "70" Option "SendCoreEvents" "true" EndSection Section "InputDevice" Identifier "PS/2 Mouse" Driver "mouse" Option "Protocol" "auto" Option "ZAxisMapping" "4 5" Option "Device" "/dev/psaux" Option "Emulate3Buttons" "true" Option "Emulate3Timeout" "70" Option "SendCoreEvents" "true" EndSection Section "InputDevice" Identifier "USB Mouse" Driver "mouse" Option "Device" "/dev/input/mice" Option "SendCoreEvents" "true" Option "Protocol" "IMPS/2" Option "ZAxisMapping" "4 5" Option "Buttons" "5" EndSection # Auto-generated by Archie mkxcfg Section "Monitor" Identifier "Monitor0" VendorName "IBM" ModelName "X31 TFT Screen" HorizSync 31.5 - 48.5 VertRefresh 40.0 - 70.0 # Option "DPMS" DisplaySize 243.84 182.88 EndSection Section "Device" Identifier "Card0" Driver "radeon" BusID "PCI:1:0:0" Option "AGPMode" "4" Option "AGPSize" "16" # default: 8 # Option "AGPFastWrite" "false" # MUST BE FALSE!!! # Option "SWcursor" "true" # MUST BE TRUE!!! Option "RingSize" "4" Option "BufferSize" "2" Option "EnablePageFlip" "true" # Option "EnableDepthMoves" "false" # MUST BE FALSE!!! Option "RenderAccel" "true" Option "AccelMethod" "XAA" # or XAA, EXA Option "DDCMode" Option "SubPixelOrder" "NONE" Option "ColorTiling" "true" Option "DynamicClocks" "true" Option "bioshotkeys" "True" # Option "XAANoOffscreenPixmaps" "true" Option "DRI" "true" EndSection Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" DefaultColorDepth 24 SubSection "Display" Depth 1 Modes "1024x768" "800x600" "640x480" EndSubSection SubSection "Display" Depth 4 Modes "1024x768" "800x600" "640x480" EndSubSection SubSection "Display" Depth 8 Modes "1024x768" "800x600" "640x480" EndSubSection SubSection "Display" Depth 15 Modes "1024x768" "800x600" "640x480" EndSubSection SubSection "Display" Depth 16 Modes "1024x768" "800x600" "640x480" EndSubSection SubSection "Display" Depth 24 Modes "1024x768" "800x600" "640x480" EndSubSection EndSection Section "DRI" Group "0" Mode 0666 EndSection Section "Extensions" Option "Composite" "Enable" EndSection
Dri
You can boost your performance by using this ~/.drirc:
<driconf> <device screen="0" driver="radeon"> <application name="Default"> <option name="force_s3tc_enable" value="true" /> <option name="no_rast" value="false" /> <option name="fthrottle_mode" value="2" /> <option name="tcl_mode" value="3" /> <option name="texture_depth" value="0" /> <option name="def_max_anisotropy" value="1.0" /> <option name="no_neg_lod_bias" value="false" /> <option name="texture_units" value="2" /> <option name="dither_mode" value="0" /> <option name="hyperz" value="true" /> <option name="round_mode" value="1" /> <option name="color_reduction" value="0" /> <option name="vblank_mode" value="0" /> <option name="allow_large_textures" value="2" /> </application> </device> </driconf>
This will massively improve performance. If you wish to play with your dri configuration, install driconf found in AUR.
Rovclock
You can also overclock your graphic card. As far as I know, there is no real drawback, but you can play it safe and only use it while running a game or compiz or any application using your graphic card:
# rovclock -c 220 -m 210
Use this command to get back to default settings:
# rovclock -c 144 -m 144
If you what to enable it permanently, you just have to add the first command in your ~/.xinitrc, or use any other way to run it once X is started. If, however, you barely use your graphic card, you can lower both power usage and temperature slightly by underclocking your graphic card at boot. Add this command to ~/.xinitrc :
# rovclock -c 90 -m 100
Dual Screen
If you want to use an external screen for a presentation or as an extended desktop, you can use xrandr. For an extended desktop, you should first add one line in your /etc/x11/xorg.conf configuration file at the SubSection "Display" area: Before:
SubSection "Display" Depth 24 Modes "1024x768" "800x600" "640x480" EndSubSection
After:
SubSection "Display" Depth 24 Modes "1024x768" "800x600" "640x480" Virtual 2304 1024 EndSubSection
The numbers are the total rectangular resolution that you need to use. In this case, I'm using the internal 1024x768 screen and an external 1280x1024 screen on the right. The total resolution is 1024+1280=2304 pixels large and 1024>768=1024 pixels height.
Note that in 24 bits with this option, the performance is affected for 3D drawing, so you may need to comment it and use only one screen when you need the graphical power.
Then restart your X server (ctrl-alt-backspace). You can issue this command in a shell:
xrandr --output VGA-0 --right-of LVDS
To find the exact name of the monitors and the maximum resolution that you set up in the configuration file, you can type just xrandr without arguments.
Powersaving
Here are various method to save power:
Laptop-mode
This will put your screen brightness to the minimum level when on battery and restore it to maximum when on ac power:
# echo -e '#!/bin/bash\necho 0 > /sys/class/backlight/thinkpad_screen/brightness' > /etc/laptop-mode/batt-start/battscript # chmod 0755 /etc/laptop-mode/batt-start/battscript # echo -e '#!/bin/bash\necho 7 > /sys/class/backlight/thinkpad_screen/brightness' > /etc/laptop-mode/lm-ac-start/acscript # chmod 0755 /etc/laptop-mode/lm-ac-start/acscript # ln -s /etc/laptop-mode/lm-ac-start/acscript /etc/laptop-mode/onlm-ac-start/acscript
It will create scripts, executed by the laptop-mode daemon when switching the power source, that change the brightness of your screen using the thinkpad_acpi module.
Undervolting
The X31 CPUs can be undervolted, which means they will offer you the same performance, but with more battery life and a cooler laptop. From personal experience, my CPU temperature,during 100% activity, dropped by 15-20°C just by using this patch. This is extremely easy using the linux-phc patch, but only if you know the proper values to give the CPU. Informations on how to find them is available here or here. I know it can be hard to find your own values, so here is a table were you can indicate what are the good values for each of the X31 CPUs:
- Pentium-m 1600MHz : 34 26 18 12 8 5
Please note you computer may freeze once a month because of those values. If you find more stable ones, please indicate them.
One you have your values, just run:
# echo VALUES > /sys/devices/system/cpu/cpu0/cpufreq/phc_vids
For example:
# echo 34 26 18 12 8 5 > /sys/devices/system/cpu/cpu0/cpufreq/phc_vids
You can add this command to your /etc/rc.local to make the undervolting permanent.
Modprobe.conf
Put those line in your /etc/modprobe.conf:
options usbcore autosuspend=1 options ipw2100 associate=0 options snd_ac97_codec power_save=1 options thinkpad-acpi experimental=1 fan_control=1
The three first lines put some of your devices in power-saving mode, respectively the USB ports, the wireless card and the sound card. Note that you need the last line in order to control your fan speed (see above)
Powertop
To see additional sources of power drain, install powertop:
# pacman -S powertop
And run it while on battery power.
Hard drive dilemna
As set earlier, the hard drive is on a power-saving mode that can make it spin off and on often. It may reduce its lifetime. You can install the smartmontools package and issue this command:
# smartctl -A /dev/sda | grep Load_Cycle_Count
If the number is growing too fast, you might want to set off the powersaving mode by issuing:
# hdparm -B 254 /dev/sda
See the above item rc.local to modify it at boot time.
Other
Fan-control
You can use a script from ThinkWiki to considerably lower your CPU temperature. Simply download it from here, rename it to tp-fancontrol, and run:
# chmod 0755 tp-fancontrol # mv tp-fancontrol /usr/bin
To run the script at each boot, add this line to your /etc/rc.local:
tp-fancontrol -d
Also, I suggest changing the first maximum temperature threshold (the CPU one) to 55. Just edit /usr/bin/tp-fancontrol, the file is self-explanatory.
Wireless and WPA
If you have the Cisco neta504 wifi card, it's a bit tricky to use the wpa encryption with it. Firstofall, remove and blacklist the airo and the airo_cs modules in your /etc/rc.conf remove the module airo from the kernel
# rmmod airo # rmmod airo_cs
then install ndiswrapper
# pacman -S ndiswrapper
download the neta504 driver for windows and unpack it (Be sure that you have unpacked the whole driver !) Then run :
# ndiswrapper -i /path/to/your/dir/netA504.inf
Save the ndiswrapper conf file :
# ndiswrapper -m # ndiswrapper -ma # ndiswrapper -mi
Now you can add to your kernel the module :
# modprobe ndiswrapper
and voilà ! I've tried this with wicd and it works flawlessly !
Audio keys
To enable the audio keys interfacing with ALSA, add:
event=ibm/hotkey HKEY 00000080 * action=/etc/acpi/soundkey.sh %e
to /etc/acpi/events/soundkey, and:
#!/bin/bash echo here > /tmp/fish echo $4 >> /tmp/fish case "$4" in 00001015) amixer -c 0 set Master playback unmute amixer -c 0 set Master playback 3%+ ;; 00001016) amixer -c 0 set Master playback unmute amixer -c 0 set Master playback 3%- ;; 00001017) amixer -c 0 set Master playback mute ;; esac
to /etc/acpi/soundkey.sh, and chown 755 it.
You'll also need to add:
echo enable,0xffffffff >/proc/acpi/ibm/hotkey
to /etc/rc.local or somewhere similiar for the events to be recognised.