Arch Linux on an IBM/Lenovo Thinkpad X60
Warning:
This site is currently outdated. I will take some time and update it in the near future. The main purpose for now is to provide for an easy way to regain fast direct rendering for Intel pre-965 chipsets on Archlinux. For long discussions of this topic see the Archlinux forums, e.g. http://bbs.archlinux.org/viewtopic.php?id=65460 and http://bbs.archlinux.org/viewtopic.php?id=61650
Since for now there seems to be no way to regain the old performance, I have created a repository of old Xorg packages. If you want to try downgrading X, mesa, and intel drivers, do the following:
Edit /etc/pacman.conf and add
[i810-repo]
Server=http://archlinux.freevar.com/i810-repo/
as the first repository entry.
Also, add xf86-video-intel to the IgnorePkg line
Please keep in mind that the X sever you are downgrading from has undergone a number of changes. This downgrade might therefore break functionality you came to rely on. Most importantly, the X server settings in /etc/X11/xorg.conf might not be adequate any more. If you have removed the mouse and keyboard input devices during the upgrade to xorg-server-1.5.x, you need to re-add the to the ServerLayout Section and reintroduce an InputDevice Section for each of them. Even more importantly, you need to choose the i810 (not intel) driver in the Device section. The following are the sections from my xorg.conf:
Section "ServerLayout"
Identifier "X.org Configured"
Screen 0 "Screen0" 0 0
InputDevice "Mouse0" "CorePointer"
InputDevice "Keyboard0" "CoreKeyboard"
Option "AIGLX" "true"
EndSection
Section "InputDevice"
Identifier "Keyboard0"
Driver "kbd"
EndSection
Section "InputDevice"
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/input/mice"
Option "ZAxisMapping" "4 5 6 7"
EndSection
[...]
Section "Device"
Identifier "Card0"
Driver "i810"
Option "DRI" "true"
Option "XAANoOffscreenPixmaps" "true"
Option "DevicePresence" "true"
Option "CheckLid" "false"
VendorName "Intel Corporation"
BoardName "Mobile Integrated Graphics Controller"
BusID "PCI:0:2:0"
EndSection
The files can also be downloaded directly from here:
i810-repo.db.tar.gz
intel-dri-7.0.4-1-i686.pkg.tar.gz
libdrm-2.3.0-3-i686.pkg.tar.gz
libgl-7.0.4-1-i686.pkg.tar.gz
libxfont-1.3.4-2-i686.pkg.tar.gz
mesa-7.0.4-1-i686.pkg.tar.gz
xf86-input-evdev-2.0.1-3-i686.pkg.tar.gz
xf86-input-keyboard-1.2.2-4-i686.pkg.tar.gz
xf86-input-mouse-1.3.0-1-i686.pkg.tar.gz
xf86-input-mouse-1.3.0-2-i686.pkg.tar.gz
xf86-video-i810-1.7.4-12-i686.pkg.tar.gz
xf86-video-intel-2.3.2-4-i686.pkg.tar.gz
xf86-video-vesa-1.3.0-8-i686.pkg.tar.gz
xorg-server-1.4.2-6-i686.pkg.tar.gz
Good luck!
Introduction:
This site documents my installation of Arch Linux on an
IBM/Lenovo Thinkpad X60. I had to install a new hard drive and used
this as an opportunity to document the Arch install on this marvelous
notebook.
First, I will shortly introduce the notebook and Arch Linux. Then I
describe the installation of the Arch Linux base system from CD, the
installation of the KDE desktop including many helpful programs and the
system configuration. At the end you will find links to the complete
configuration files which have been edited in the process for easy
review and also a few helpful links.
This is what my current desktop looks like. Click to enlarge.

About The X60:
The Thinkpad X60 is a extremely lightweight (sub)notebook. It may weigh
as little as 2.7 lbs. including the battery. With the extra large
battery I use it runs 6 to 7 hours. Trade offs are the tiny 12.1" XGA
screen and the lack of an internal CD/DVD drive. An additional UltraBay
dock may hold such a drive. Since I never need the drive outside of my
home I am happy not to carry it around with me.
For more details see Lenovo's and the Thinkwiki's X60 pages. For the technically curious, this is the output of lspci.
About Arch Linux:
Arch Linux is a rolling release system. It includes an own package
management, an Auto Build System (ABS) and a great and knowledgeable
user base providing scripts for building applications in the Arch User
Repository (AUR). Its system administration philosophy is strongly
influenced by BSD. At a first glance, it may resemble Gentoo in a way.
However, it is significantly different in a number of ways, most
notably in that it provides precompiled packages and is designed to be
much simpler to administer.
For reviews of Arch Linux check out Distrowatch's Arch Linux page. For a more detailed self-description read the ArchLinux entry in the Wiki.
Preparation:
Download the current Arch Linux Base Install CD from here.
If you need wireless for internet access, also download ipw3945d, ipw3945-ucode and ipw3945 from here, here and here. Copy these packages to a CD or USB drive.
CD Base Install:
Start the computer with the CD.
Run
$ /arch/setup
I have a 160 GB hard drive. I reserved 15 GB for the root file system
(even though 10 GB should be well enough), 1 GB for swap and the rest
for the home directory.
After the package installation, you need to edit /etc/rc.conf. I did
the following minimal adjustments; more changes should be done after
the installation of custom packages later on:
HARDWARECLOCK="UTC"
TIMEZONE="America/New_York"
...
HOSTNAME="[hostname]"
When editing /etc/locale.gen, I uncommented the US American utf-8 locale:
en_US.UTF-8 UTF-8
In grub's menu.lst I added the vga=792 to the kernel line to get a nice
1024x768 resolution for the console. I also deleted the uncommented
entry for Windows (since I do not have Windows):
kernel /boot/vmlinuz26 root=/dev/sda1 ro vga=792
Finish the setup, take the CD out of the drive and reboot.
New Mirrors And First Update:
If you use internet access via Ethernet, you are all set. During
installation process your e1000 Ethernet card has been recognized and
added to /etc/rc.conf, so that the device is ready. A simple
should connect you.
If you use wireless, install the three packages copied to CD or USB
device. Mount the device which is probably to be found at /dev/sr0 (CD)
or /dev/sdb (USB) or /dev/sdb1 (USB); then install the packages.
$ mkdir /mnt/usbstick
$ mount /dev/sdbX /mnt/usbstick
$ pacman -A /mnt/usbstick/ipw3945-X.X.X-X.pkg.tar.gz
$ pacman -A /mnt/usbstick/ipw3945-ucode-X.X.X-X.pkg.tar.gz
$ pacman -A /mnt/usbstick/ipw3945d-X.X.X-X.pkg.tar.gz
Then you need to load the driver:
$ modprobe ipw3945
$ /etc/rc.d/ipw3945d start
To configure your wireless card you need to know the network name ([e]ssid):
$ iwconfig eth1 essid "[network_name]"
$ dhcpcd eth1
One more thing should be done before updating the package database: The
extra, unstable and community repositories should be unmasked in
/etc/pacman.conf. Also, a
custom entry for the archlinuxfr server
should be added to be able to install the wonderful pacman wrapper
called yaourt. I am using the Northern American Ibiblio mirror, it is
sufficiently fast for me. Please do not use the archlinux.org mirrors.
They are under heavy strain and from time to time throttled.
[current]
Server = ftp://ibiblio.org/pub/linux/distributions/archlinux/current/os/i686
Include = /etc/pacman.d/current
[extra]
Server = ftp://ibiblio.org/pub/linux/distributions/archlinux/extra/os/i686
Include = /etc/pacman.d/extra
[unstable]
Server = ftp://ibiblio.org/pub/linux/distributions/archlinux/unstable/os/i686
Include = /etc/pacman.d/unstable
[community]
Server = ftp://ibiblio.org/pub/linux/distributions/archlinux/community/os/i686
Include = /etc/pacman.d/community
[archlinuxfr]
Server = http://repo.archlinux.fr/i686
Now you can update the package database and the base system:
Desktop Installation:
Before the next step I recommend installing the console web browser
elinks. It can kill time while waiting for downloads and installation
to complete. :)
To switch to a different virtual console to run elinks, press control-alt+[2-6]. To get back, press control-alt-1.
Now the bulk of the system. I use a KDE-centric system with Firefox as
my web browser and Openoffice for my daily work. The following command
includes everything I installed at this point. This may include a few
packages not of interest for some. I do think, however, that they
generally helpful and may reflect more or less what most people expect
from a desktop: web and office applications, multimedia and
administration tools. If you do not know all of these programs, google
(or whatever) is your friend.
$ pacman -S artwiz-fonts acroread alsa-oss alsa-utils
amarok-base amule aspell-de aspell-en audacity bash-completion
cpufrequtils cups-pdf digikamimageplugins easytag fakeroot filelight
firefox flashplugin foomatic-db foomatic-db-ppd gimp gparted
gtk-qt-engine gtkpod gwenview htop k3b kdeadmin kdebindings kdegraphics
kdemultimedia kdenetwork kdepim kdeutils kipi-plugins knetworkmanager
konversation kplayer mac mc mplayer-plugin musepack-tools mysql namcap
ooodi2 openoffice-spell-de openoffice-spell-en openntpd openssh opera
rpmextract rxvt-unicode scribus skype sudo tpb ttf-cheapskate
vorbis-tools xf86-video-i810 xorg yaourt
Beware, this can take a while, it is well over 600 MB to be downloaded and installed.
User Management:
Now add regular users to the system. I recommend the adduser script, since it is amazingly simple"
Alternatively, you can add a user by doing
$ useradd -m -s /bin/bash [username]
$ passwd [username]
At this point you should also add yourself to the sudoers, so that you
can take advantage of sudo. I know about the different opinions about
it. I consider it very helpful. If you do not like it, leave it.
Also, for yaourt to build packages from source without using root
account (and therefore heightened security), you need to allow poweruser
status to yaourt when using the Arch tools srcpac, abs, pacman and
pacdiffviewer. I have included all of this in the following. This is
what my changes to /etc/sudoers look like:
# User alias specification
User_Alias POWERUSER=[username]
# Cmnd alias specification
Cmnd_Alias YAOURT=/usr/bin/srcpac, /usr/bin/abs, /usr/bin/pacman, /usr/bin/pacdiffviewer
# User privilege specification
root ALL=(ALL) ALL
POWERUSER ALL=(ALL) YAOURT
# Uncomment to allow people in group wheel to run all commands
%wheel ALL=(ALL) ALL
When installing software from AUR using yaourt, you will be asked which
editor you prefer. To avoid this as have it started automatically, add
the following to ~/.bashrc
# set Nano as yaourt's default editor
export EDITOR="nano"
To enable bash completion when using sudo add this to the same file:
# enable bash completion when using sudo
complete -cf sudo
Now log out to use the advantaged of user account + sudo
and log in as the new user.
Much of the system administration done in Arch is regulated by access
to groups. To take full advantage of the Arch User Repository (AUR) and
the Arch Build System (ABS) though yaourt, for example, you need to
create a group "abs", become member of it and make the local build
directory owned by that group (well, there are other ways, but I prefer
this):
$ sudo groupadd abs
$ sudo gpasswd -a [username] abs
$ sudo chown root.abs /var/abs/local
$ sudo chmod 775 /var/abs/local
Other groups are necessary for access to a number of devices like
external drives, cameras, the wireless card, etc. For more information
see this page (though incomplete). Become a member of these groups:
wheel log video audio optical floppy storage slocate camera scanner hal dbus network
by doing this:
$ sudo gpasswd -a [username] [groupname]
/etc/rc.conf (basic system configuration):
Now let us finish editing the most central configuration file of Arch Linux - /etc/rc.conf.
Add the following modules to the MODULES array. They allow for printing
over USB, IBM-specific ACPI functions, CPU frequency scaling over ACPI,
hot plug for the PCI controller and support for the SD-card slot.
usblp ibm_acpi acpi-cpufreq shpchp sdhci
In the network section, below the "lo" entry, enter
eth0="dhcp"
eth1="dhcp"
and adapt the INTERFACES array as follows:
INTERFACES=(lo !eth0 !eth1)
These are both important for using NetworkManager to handle all network
connections. Wrong settings in this part might well be the number one
error for networking encountered in the Arch forums.
Then update the DAEMONS array as follows. The ordering of daemons is,
again,
particularly important for NetworkManager which needs ipw3945d, dbus,
hal and dhcdbd loaded in that very order. Note that network should be
commented out for NetworkManager to work. alsa, netfs and cups can be
safely started in the background. You may like to try this with others
as well. cpufreq is a daemon to control the CPU frequency (how to set
it up is described below), alsa enables sound (setup also described
below), cups is for printing (you need to set it up in KDE's Control
Center) and KDM starts KDE's login screen.
DAEMONS=(syslog-ng cpufreq ipw3945d dbus hal !network crond @alsa @netfs \
dhcdbd networkmanager networkmanager-dispatcher @cups kdm)
Sound:
To set up your sound card, run
and choose "hda-intel".
/etc/X11/xorg.conf (X window system configuration):
For a rough configuration of X for your system do
To use direct rendering and easy switching from LCD to external projectors fine-tune /etc/X11/xorg.conf as follows.
In the section "ServerLayout" add:
Option "AIGLX" "true"
In the section "Module" add:
Load "ic2"
Load "bitmap"
Load "ddc"
Load "int10"
Load "vbe"
My "Device" section looks like this:
Identifier "Card0"
Driver "i810"
Option
"DRI"
"true"
Option "XAANoOffscreenPixmaps" "true"
Option "MonitorLayout" "NONE,LFP+CRT"
Option "DevicePresence" "true"
Option
"CheckLid" "false"
VendorName "Intel Corporation"
BoardName "Mobile Integrated Graphics Controller"
BusID "PCI:0:2:0"
In the section "Screen" set the default color depth to 24 bit. Add the following before the first subsection:
DefaultDepth 24
The sections "DRI" and "Extensions" look as follows:
Section "DRI"
Mode 0666
EndSection
Section "Extensions"
Option "Composite" "Enable"
EndSection
CPU Frequency Scaling:
For CPU frequency scaling with the extremely simple cpufreq daemon, we
have already loaded the correct modules and daemons in /etc/rc.conf. We
now need to edit /etc/rc.local to send the current commands to both CPUs at startup. This works
perfectly, unlike many of the desktop 'solutions' that regulate only
one CPU (Kubuntu Guidance, anyone?).
# Set CPU Frequency Scaling
echo "ondemand" > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo "ondemand" > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
cat /sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_max_freq > \ /sys/devices/system/cpu/cpu1/cpufreq/scaling_max_freq
cat /sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_max_freq > \ /sys/devices/system/cpu/cpu1/cpufreq/scaling_max_freq
Thinkpad Extra Keys:
For some of the Thinkpad's features you need access to the kernel's nvram module. First do the following:
$ sudo groupadd thinkpad
$ sudo gpasswd -a thinkpad [username]
Then edit /etc/udev/rules.d/udev.rules and change the line containing "nvram" to:
KERNEL=="nvram", NAME="misc/%k", SYMLINK+="%k", GROUP="thinkpad", MODE="0664"
Then do:
$ sudo modprobe -rv nvram
$ sudo udevcontrol reload_rules
$ sudo modprobe -v nvram
If /dev/nvram does not exist, do:
$ sudo mknod /dev/nvram c 10 144
$ sudo udevcontrol reload_rules
$ sudo modprobe nvram
Finally, we need to edit /etc/rc.local again to make the kernel module for the Thinkpad extra keys which we worked on before available at startup:
# Thinkpad Extra Keys
modprobe nvram
To use the 'page forward' and 'page backward' keys in Firefox we have
make them simulate function keys because of the internal workings
of Firefox which disallow setting this in its config. To achieve this a
simple hack to ~/.Xmodmap is sufficient:
keycode 234 = F19
keycode 233 = F20
In Firefox, type about:config in the address bar and set the values of the variables keyconfig.main.goBackKb2 and keyconfig.main.goBackKb2 to ][][VK_F19 and ][][VK_F20 accordingly. (No, those brackets are not errors.)
To set this into effect, create a file called (e.g.) ~/.kde/Autostart/xmodmap-for-navi and enter:
#!/bin/bash
xmodmap ~/.Xmodmap
Then make the file executable:
$ chmod +x ~/.kde/Autostart/xmodmap-for-navi
The tpb program adjusts the volume when pressing the Thinkpad's volume
keys and displays the current loudness using a little OSD program. To
start tpb with Every start of KDE, create a file ~/.kde/Autostart/tpb-exec and enter
#!/bin/bash
tpb &
tpb &
I start this twice because for some reason I have not yet figured out,
it sometimes fails. This little script also needs to be executable:
$ sudo chmod +x ~/.kde/Autostart/xmodmap-for-navi ~/.kde/Autostart/tpb-exec
Urxvt As A Desktop Background:
As you can see in my screenshot, I have worked a little on the Rxvt
Unicode console emulator (also called Urxvt). This is achieved by some
settings in ~/.Xdefaults and a tweaking of the application's
window settings in KDE. The former (~/.Xdefaults) settings are these:
urxvt*background: #000000
urxvt*foreground: #ffffff
urxvt*color0: #000000
urxvt*color1: #9e1828
urxvt*color2: #aece92
urxvt*color3: #968a38
urxvt*color4: #414171
urxvt*color5: #963c59
urxvt*color6: #418179
urxvt*color7: #bebebe
urxvt*color8: #666666
urxvt*color9: #cf6171
urxvt*color10: #c5f779
urxvt*color11: #fff796
urxvt*color12: #4186be
urxvt*color13: #cf9ebe
urxvt*color14: #71bebe
urxvt*color15: #ffffff
urxvt*fading: 15
urxvt*tintColor: #ffffff
urxvt*shading: 60
urxvt*inheritPixmap: True
urxvt*scrollBar: False
#urxvt*font: -*-*-*-*-*-*-*-*-*-*-*-*-iso8859-*
URxvt*urlLauncher: firefox
*perl-ext-common:matcher
*matcher.button: 1
urxvt.saveLines: 10000
urxvt.cursorBlink: true
urxvt*scrollTtyKeypress: true
urxvt*scrollTtyOutput: false
urxvt*scrollWithBuffer: false
urxvt.scrollstyle: plain
urxvt.secondaryScroll: true
urxvt*font: xft:DejaVu Sans Mono:pixelsize=11:antialias=true:hinting=true
urxvt*boldFont: xft:DejaVu Sans Mono:pixelsize=11:antialias=true:bold:hinting=true
urxvt*italicFont: xft:DejaVu Sans Mono:pixelsize=11:antialias=true:italic:autohint=true:hinti
ng=true
urxvt*bolditalicFont: xft:DejaVu Sans Mono:pixelsize=11:antialias=true:bold:italic:autohint=t
rue:hinting=true
urxvt*title: Terminal
urxvt*termName: rxvt-unicode
KDE's special application window settings are as follows:
[Geometry]
Position: Apply initially - 44,47
Size: Apply initially - 656,523
Desktop: Apply initially - All desktops
[Peferences]
Keep below: Apply initially
No border: Force
Skip taskbar: Force
Skip pager: Force
Rebooting:
That is about it. Happy rebooting!
You will be greeted by kdm. Congratulations!
Some More Helpful Programs:
I also installes a number of programs from the AUR using yaourt. You
could do this e.g. in KDE's konsole or urxvt. The three KDE plugin
packages are especially interesting since I refuse to install the
kdeaddons package which pulls in kdegames. However, I like the plugins
which, for example, add Ark functionality to the context menu in
Konqueror. beagle-no-gnome and kerry-no-gnome are packages that provide
for the search tools Beagle and Kerry, but avoid the Gnome dependencies
that come with the default packages in Arch Linux. All in all the AUR
is really worth a closer look. Arch users are great!
$ yaourt -S beagle-no-gnome bibletime bibus hwinfo jmemorize
kate-plugins kdeaddon-kfile-plugins kdeicons-oxygen-svn kerry-no-gnome
kftpgrabber konq-plugins nvu-kde nvu-extension-firefox ttf-ms-fonts
ttf-nastaliq ttf-sil-arabic ttf-sil-fonts truecrypt-gui-kommander zekr
Random Stuff:
I am extremely annoyed by system beeps. In KDE and in Konsole these can
be turned off, but Arch Linux's standard kernel does not disable it. If
you do not want to recompile the kernel anyways, a simple series of
commands reduces the beep's length to zero, thus stopping this
annoyance. For this, once more edit /etc/rc.local:
$ Disable System Beep
setterm -blength 0 > /dev/vc/1
setterm -blength 0 > /dev/vc/2
setterm -blength 0 > /dev/vc/3
setterm -blength 0 > /dev/vc/4
setterm -blength 0 > /dev/vc/5
setterm -blength 0 > /dev/vc/6
setterm -blength 0 > /dev/vc/7
setterm -blength 0 > /dev/vc/8
To speed up web browsing, you may want to disable the ipv6 protocol
that is still unsupported by some providers. Edit /etc/modprobe.conf
and add
alias net-pf-10 off
at the end of the file.
If you experience problems with some websites that expect "Bon Echo" to
be different from "Firefox" and deny some (or all) of their
functionality, with a simple step you can change the browser
identification to Firefox. Enter about:config in Firefox's location bar and set the variable "general.useragent.extra.firefox" from "BonEcho/X.X.X" to "Firefox/X.X.X". Done.
If you keep tinkering now, you may wish to create your slocate database:
To administer the network, start KNetworkmanager from "Internet" in the
KDE menu. If you do not exit the program it will automatically start up
at login and choose a network connection. For file search start Kerry
from "Utilities". Same here. You may
want to change Kerry's settings.
If you install Google Earth [$ yaourt -S google-earth], disable
"Atmosphere" in the "View" menu, otherwise the screen will turn grayish
when zooming.
Afterthoughts:
In case of reinstalling the whole system, make sure to back up the
/home directory and to restore those files/folders in the ~/.kde folder
that are necessary, e.g. ~/.kde/Autostart/
~/.kde/share/config (esp. the subfolders kmail*, kadd*, kwall*)
~/.kde/share/apps (esp. the subfolders kmail, kabc, kwallet),
as well as some other hidden folders like
~/.mozilla
It also makes sense to copy the newest version of each package stored
in /var/cache/pacman/pkg to a CD or USB device. These can be copied to
the harddisk before the first pacman -Syu and will save a lot of
waiting time and bandwidth.
Configuration Files For Easy Review:
~/.Xdefaults
~/.Xmodmap
~/.kde/Autostart/xmodmap-for-navi
/etc/rc.conf
/etc/rc.local
/etc/pacman.conf
/etc/sudoers
/etc/locale.gen
/etc/modprobe.conf
/etc/X11/xorg.conf
Links:
Arch Linux
Arch Linux Wiki
Arch Linux Forum
Arch Linux User Repository (AUR).
Linux on IBM/Lenovo Thinkpads

