Arch Linux [1] is running on my laptop since 2006. Its rolling release system makes it easy to keep it up to date without having to install or upgrade to newer versions. Current kernel version is 2.6.33.
After booting the Arch CD (Version 0.7.1) from the external FireWire DVD drive, I had to enter loaddisc /dev/scd0 to mount the CD. I selected a keymap via km, skipped font selection, ran /arch/setup, created partitions, installed all base packages, edited /etc/rc.conf and installed the boot loader in the MBR. After rebooting I set a root password (in more recent versions of Arch this has become part of the installation process) and created a user account
passwd useradd -m -s /bin/bash [username] passwd [username]
I modified /etc/mkinitcpio.conf as follows:
MODULES="ata_piix sd_mod ext2 ext3 intel_agp agpgart i810fb" BINARIES="" FILES="/etc/modprobe.d/i810fb.conf" HOOKS="base udev uresume"
The module i810fb provides a 1024x768 framebuffer. It may as well be placed in the MODULES section of /etc/rc.conf, but including it in the initial ramdisk makes the higher resolution appear earlier. Module options reside in /etc/modprobe.d/i810fb.conf
options i810fb vram=4 xres=1024 yres=768 bpp=16 hsync1=30 \ hsync2=50 vsync1=60 vsync2=60 accel
A drawback of enabling framebuffer is that after suspending to RAM the screen remains black, see below.
Due to the new Xorg hotplugging my /etc/X11/xorg.conf currently only contains a Monitor and Screen section. The HorizSync value must be specified to get a fullscreen 1024x768 resolution (by default it's only 800x600 with big black bars). Direct rendering works only with a color depth of 16 (by default 24 is used, causing a slow "software rasterizer" to be applied).
Section "Monitor" Identifier "Monitor0" HorizSync 31.5 - 50.0 VertRefresh 50.0 - 70.0 EndSection Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" DefaultDepth 16 SubSection "Display" Viewport 0 0 Depth 16 Modes "1024x768" "800x600" "640x480" EndSubSection EndSection
DPMS is not working; the screen only blanks after some time (or immediately via xset dpms force standby), but backlight is never turned off.
Steps to select keymap and enable touchpad tapping is described in the ArchWiki [3]. For Fn-keys and Jog-Dial the module sonypi (or sony-laptop with sonypi compatibility enabled) should be added to the MODULES array in /etc/rc.conf. I created PKGBUILDS for rsjog and ruby-gtk (updated 01/09). rsjog requires ruby<1.9.1 and ruby-gtk currently doesn't build.
I installed alsa-utils, ran alsaconf and alsamixer and added alsa to the DAEMONS string in /etc/rc.conf. Users must be in group sound:
gpasswd -a [username] sound
To avoid changing device names for wired and wireless network the latter is determined by its MAC adress in /etc/udev/rules.d/10-local.rules:
SUBSYSTEM=="net", ATTR{address}=="00:02:2d:6a:5d:63", NAME="wlan0"
This way wlan0 becomes the WLAN interface name, while eth0 is used for LAN, which is configured in a network profile/etc/network.d/lan
CONNECTION="ethernet" DESCRIPTION="" INTERFACE=eth0 IP="dhcp" DHCP_TIMEOUT=10
To auto-connect upon cable insertion I installed ifplugd, added it to the DAEMONS array in /etc/rc.conf and disabled the network daemon. Here is my /etc/ifplugd/ifplugd.conf
NET_IFS="eth0" ARGS="-fwIl -u0 -d10"
and the modified part of /etc/ifplugd/ifplugd.action
up) netcfg -a netcfg lan ;; down) netcfg -a netcfg wpa ;;
If an ethernet cable is plugged in (or present at boot time), ifplugd will disable all connected profiles (i.e. WLAN, see below) and start LAN - and vice versa. Due to the option -l this also works, if initially there is no cable: The action script is then run with the down agument, hence the WLAN profile will be started.
As pccardctl ident reveals, it's a Hermes I card, supported by the orinoco_cs module.
Socket 0: no product info available Socket 1: product info: "Lucent Technologies", "WaveLAN/IEEE", "Version 01.01", "" manfid: 0x0156, 0x0002 function: 6 (network)
Since kernel 2.6.29 orinoco_cs has support for WPA. A firmware file is required, which can be downloaded from here. Unpack and copy orinoco.fw to /lib/firmware/agere_sta_fw.bin.
For kernel<=2.6.28 I had to install a modified version of an old driver by Agere [5], which is available in the AUR [6]. Added !orinoco_cs wlags49_h1_cs to the MODULES array in /etc/rc.conf to use it instead of the default orinoco driver.
WLAN is configured in a network profile /etc/network.d/wpa
CONNECTION='wireless' INTERFACE=wlan0 SECURITY='wpa-configsection' ESSID='My Network' IP='dhcp' CONFIGSECTION=' scan_ssid=1 proto=WPA ssid="My Network" key_mgmt=WPA-PSK group=TKIP pairwise=TKIP psk=................................................................ '
Initially the devices for partitions on MemorySticks were not created unless the stick was inserted at boot time or the module usb_storage was reloaded after insertion. To force creation of device nodes I used this udev rule
SUBSYSTEMS=="scsi", ATTRS{model}=="MSC-U03", NAME{all_partitions}="memstick%n"
where the model name was identified by udevadm info -a -p /sys/block/sda. A MemoryStick's first partition was then /dev/memstick1 instead of /dev/sda1. Meanwhile this rule is no longer necessary, a MemoryStick is detected just like a USB stick.
I bought a PCMCIA adaptor which provides a USB 2.0 interface. Tested successfully with a USB 2.0 DVB-T Stick (that does not work on the 1.1 interface) and with a USB 2.0 hard disk drive (containing the drive that was originally inside the laptop). Connection speed of the latter is about ten times higher than at the USB 1.1 device.
To switch on the bluetooth LED the spicctrl utility from AUR can be used:
spicctrl -l 1
Now the the bluetooth device appears in the output of lsusb
Bus 002 Device 003: ID 044e:3001 Alps Electric Co., Ltd UGTZ4 Bluetooth
The bluetooth daemon (from package bluez) is started automatically. Since blueman is currently not working I used
bluez-simple-agent hci0 <device>
as root to force pairing with my mobile phone (the device name is displayed by hcitool scan). After that I got access to the phone using wammu. Pairing needs to be done only once.
You can edit /etc/bluetooth/rfcomm.conf for binding the device /dev/rfcomm0 to a remote device. For dial-up connections the module ppp_generic is required.
Suspend to RAM is working now. I tested the utility s2ram from the Linux suspend project [7] with different parameters. The following combination was successful:
s2ram -f -s
While the option -a 2 seems to have no effect, -a 1 and -a 3 cause the laptop to not wake up properly (high CPU load, no reaction). If the option -s is omitted or -p is set, the screen keeps blank (blindly typing halt makes it shut down normally). Unfortunately, this also happens when the i810fb framebuffer driver is used. Option -f must be set, because the laptop is not in the database. s2ram -n reports
Machine is unknown. This machine can be identified by: sys_vendor = "Sony Corporation " sys_product = "PCG-SRX51P(DE) " sys_version = "01 " bios_version = "R0221U2"
A package for suspend called uswsusp is in the community repository. As an alternative pm-suspend from pm-utils can be used. The option required here is --quirk-vbestate-restore. Since pm-suspend is usually called from HAL/dbus (e.g. via the Xfce logout menu) this option should be placed in a file /etc/pm/config.d/config:
ADD_PARAMETERS="--quirk-vbestate-restore" SLEEP_MODULE="uswsusp"
Suspending to disk via pm-hibernate works as well. Swap partition is specified in /etc/suspend.conf
snapshot device = /dev/snapshot resume device = /dev/sda8 compress = y
You also have to add the uresume hook in /etc/mkinitcpio.conf and run mkinitcpio -p kernel26.
To avoid supending to RAM if a framebuffer device is present I placed a hook in /etc/pm/sleep.d/00fbdev and made that file executable.
#!/bin/bash case "$1" in suspend) if [ -e /dev/fb0 ]; then exit 1 ; fi ;; esac
Suspending may also be initiated when the laptop's lid is closed. While acpid is stopped cat /proc/acpi/event shows, that closing the lid is an ACPI event:
button/lid LID 00000080 00000001 button/lid LID 00000080 00000002
So I created a file /etc/acpi/events/lid with the following content:
event=button/lid LID 00000080 action=pm-suspend
Now, if acpid is started, closing the lid will make the laptop suspend to RAM.
To use the buttons from the Xfce logout menu I had to edit /etc/PolicyKit/PolicyKit.conf
<config version="0.1"> <match action="org.freedesktop.hal.power-management.*"> <return result="yes"/> </match> </config>
Currently my laptop always crashes at shutdown or logout from X after previous suspend to disk.
To enable CPU speedstepping the module acpi_cpufreq must be loaded.
[1] http://www.archlinux.org/
[2] http://wiki.archlinux.org/index.php/Fbsplash
[3] http://wiki.archlinux.org/index.php/Xorg_input_hotplugging
[4] http://reactivated.net/writing_udev_rules.html
[5] http://ubuntuforums.org/showthread.php?t=304217
[6] http://aur.archlinux.org/packages.php?do_Details=1&ID=9637
[7] http://en.opensuse.org/S2ram