Running Linux on an Apple Macbook 2,1

This page documents my attempts (and successes!) to get Linux fully working on an Intel-based Apple MacBook, 2007 model.

Note: I no longer have this device.

DISCLAIMER: This information is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. If you fry your system by using this information that’s _your_ problem. Not mine. I accept no responsability for what happens with this information whatsoever.

PCI Specs

00:00.0 Host bridge: Intel Corporation Mobile 945GM/PM/GMS, 943/940GML and 945GT Express Memory Controller Hub (rev 03)
00:02.0 VGA compatible controller: Intel Corporation Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller (rev 03)
00:02.1 Display controller: Intel Corporation Mobile 945GM/GMS/GME, 943/940GML Express Integrated Graphics Controller (rev 03)
00:07.0 Performance counters: Intel Corporation Device 27a3 (rev 03)
00:1b.0 Audio device: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller (rev 02)
00:1c.0 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 1 (rev 02)
00:1c.1 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 2 (rev 02)
00:1d.0 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #1 (rev 02)
00:1d.1 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #2 (rev 02)
00:1d.2 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #3 (rev 02)
00:1d.3 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #4 (rev 02)
00:1d.7 USB Controller: Intel Corporation 82801G (ICH7 Family) USB2 EHCI Controller (rev 02)
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev e2)
00:1f.0 ISA bridge: Intel Corporation 82801GBM (ICH7-M) LPC Interface Bridge (rev 02)
00:1f.1 IDE interface: Intel Corporation 82801G (ICH7 Family) IDE Controller (rev 02)
00:1f.2 IDE interface: Intel Corporation 82801GBM/GHM (ICH7 Family) SATA IDE Controller (rev 02)
00:1f.3 SMBus: Intel Corporation 82801G (ICH7 Family) SMBus Controller (rev 02)
01:00.0 Ethernet controller: Marvell Technology Group Ltd. 88E8053 PCI-E Gigabit Ethernet Controller (rev 22)
02:00.0 Network controller: Atheros Communications Inc. AR5418 802.11abgn Wireless PCI Express Adapter (rev 01)
03:03.0 FireWire (IEEE 1394): Agere Systems FW323 (rev 61)

Here’s a detailed pci listing.

Linux 2.6.x kernel

The latest 2.6 kernel is: 2.6.39.4.
Here’s my 2.6.26 kernel configuration. This is actually the stock debian kernel.

USB

Hardware: this is the Intel Corporation 82801G (ICH7 Family) USB chip.

USB worked out of the box by loading the following modules:

  • usb-uhci (USB 1.x support)
  • ehci-hcd (USB 2 support)

It is required to install the udev package.

10/100/1000 MBit ethernet LAN

Hardware: this is a Marvell Technology Group Ltd. 88E8053 PCI-E Gigabit Ethernet Controller chip.

Works out of the box, using the sky2 module.

Soundchip

Hardware: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller

Works out of the box with the ALSA module called snd_hda_intel module.

VGA Framebuffer console

Hardware: Intel Corporation Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller

Since the inception of kernel-mode-setting (KMS), no additional work is needed to get
a decent framebuffer console. Load the i915 module, and you’re set.

VGA X.Org

Hardware: Intel Corporation Mobile 945GM/GMS, 943/940GML Express Integrated Graphics Controller

To make it working just set your video driver to intel:

		Section "Device"
			Identifier	"Generic Video Card"
			Driver		"intel"
		EndSection

With modern Xorg versions, you don’t even need to specify this anymore.

CDRW/DVDRW

Hardware: HL-DT-ST DVDRW GWA4080MA.

Works out of the box, using libata.

Bluetooth

Hardeware: Apple, Inc. Bluetooth HCI MacBookPro.

Works perfectly with the bluetooth and btusb modules.

Debian users might want to install the bluetooth package.

Harddisk

SATA drive. Works out of the box, if you enable the ata_piix module.

DMA is automagically enabled. I use hdparm to set an extra parameter: hdparm -F /dev/sda

Explanation:

  • -F: set security-freeze (so that nothing can accidentily lock your disk with a password)

For Debian; check the hdparm package.

Speedstep

You need this if you don’t want your CPU to eat your batteries empty. It’s included in the kernel config.

It works perfectly after loading the acpi_cpufreq and any of the cpufreq- modules.

You can either install the cpufreqd daemon, or use the cpufreq_ondemand module (which modulates the speed by requirement).

For Debian, check the cpufreqd or powernowd packages.

Wireless Lan

Hardware: Atheros Communications Inc. AR5418 802.11abgn Wireless PCI Express Adapter

Works out of the box with the ath9k kernel module.

Firewire

Hardware: Atheros Communications Inc. AR5418 802.11abgn Wireless PCI Express Adapter

This also works pretty much out of the box. The kernel module to use is ochi_1394.

Infrared

Currently not supported by the linux kernel. Possible patch: is here. Untested

Multimedia Keys

This laptop has several function keys which allow for the changing of the volume, brightness, …

After installation of pommed, these keys work perfectly.

Debian users can install the pommed and gpomme packages.

(Userspace) Software Suspend

Works: suspend to ram (s2ram). I’m using the following parameters: -f (force) -p (do VBE post) -m (save/restore VBE mode)

Doesn’t work: suspend to disk (s2disk,s2both): causes a full system freeze, need to dig into this further.

iSight webcam

Works with kernel supplied driver.

You need to extract the firmware first from the Mac OS X driver, use isight-firmware-tools. Debian users can use the isight-firmware-tools package.

Touchpad in console

You can use the touchpad with gpm, using the exps2 driver.

Touchpad in X.Org

This is an AppleTouch touchpad. You can use it with this driver.

Add the following to the /etc/X11/xorg.conf file:

Section "InputDevice"
        Identifier      "AppleTouch"
        Driver          "synaptics"
        Option          "AccelFactor"           "0.015"
        Option          "BottomEdge"            "310"
        Option          "Device"                "/dev/psaux"
        Option          "FingerHigh"            "30"
        Option          "FingerLow"             "20"
        Option          "HorizScrollDelta"      "0"
        Option          "LeftEdge"              "100"
        Option          "MaxDoubleTapTime"      "180"
        Option          "MaxSpeed"              "0.88"
        Option          "MaxTapMove"            "220"
        Option          "MaxTapTime"            "150"
        Option          "MinSpeed"              "0.79"
        Option          "Protocol"              "auto-dev"
        Option          "RightEdge"             "1120"
        Option          "SendCoreEvents"        "true"
        Option          "SHMConfig"             "on"
        Option          "TapButton2"            "3"
        Option          "TapButton3"            "2"
        Option          "TopEdge"               "50"
        Option          "VertScrollDelta"       "25"
        Option          "VertTwoFingerScroll"   "true"
EndSection

Here’s my complete xorg.conf file

It’s advisable to run syndaemon after starting X, to prevent accidental taps while you’re typing.
example: syndaemon -i 2 -t -d

Debian users can install the xserver-xorg-input-synaptics package.

Links

Multiseat on Debian

Since I have a rather well-scaled desktop PC (nothing really fancy by today’s specs, but it’s underused as it is), and my gf sometimes wants to use it, and sometimes we both want to use it at the same time, I decided to turn it into a multiseat configuration.

What’s a multiseat? Basically you connect a second set of input peripherals (keyboard, mouse) and a second screen (and if necessary a second video card) and reconfigure it to act as a separate pc.
And with Linux, you just can, without a lot of trouble.

There are some different multiseat setups: those that run separate X servers (one per display), and those that run one X server for all displays and then run a nested server on top of that to split out the actual displays. The ‘problem’ wit the latter is that you usually don’t have any 3D acceleration left, though if you use Xephyr these days that seems to work aswell.

I opted for the first option.

My hardware (that matters for this setup):

  • Mice: 2 simple Logitech usb mice
  • Keyboards: 2 usb keyboards (one Cherry Cymotion Linux Master & one labtec Ultraflat)
  • Graphics: an onboard ATI Radeon HD 3200 (this is part of the AMD 780 chipset) video chip on my Asrock motherboard (was originally disabled and enabled for this multiseat setup) and an addon ATI Radeon HD 4850 card (with an RV700 chip).
  • Screens: two screens – in this case, one 20.1″ Viewsonic VX2025wm and one 22″ (newly purchased) LG w2253TW

Notes:

  1. It is advised to use chips that can be driven with the same driver for a multiseat setup!
  2. If you use an onboard chipset (like I do), you’ll need to change the boot order so that this chip is actually used as the primary device, otherwise it won’t be initialised correctly.

Originally I had the ATI binary driver fglrx installed, but this does _not_ play well with a multiseat setup. The initialisation of the second card causes the system to hardlock.
Since this driver doesn’t work, I went for the xf86-video-ati driver, which is completely opensource, and in combination with a recent kernel allows for kernel mode setting. You do need the firmware for the card, usually found in the firmware-linux packages of your favourite distribution.

So, the works:

Requirements

  1. Get a spankingly fresh kernel. 2.6.33 at least, preferably newer. Compile it with KMS support enabled. Note that when you enable KMS support, you’ll lose your console unless you compile in fbcon, but I advise against this, as this doesn’t seem to play well with a multiseat setup.
  2. Install the linux-firmware package or get the necessary firmwares for your cards (to get 3D acceleration)
  3. Get a decently fresh Mesa (7.7 branch)
  4. Lastly, get a mjummy fresh xf86-video-ati driver.

Originally, I compiled all these and installed them over the existing binaries in /usr, but fortunately my favourite distribution Debian has the necessary components in Sid and Experimental. these days.

Xorg.conf changes

After everything is installed, you need to modify your xorg.conf file.

ServerFlags

Section "ServerFlags"
        Option      "DefaultServerLayout" "seat0"
        Option      "AllowMouseOpenFail"  "true"
        Option      "AutoAddDevices" "false"
EndSection

The AutoAddDevices line is important, otherwise we can’t map the devices to the right seat.

The actual graphic chips/cards:

Section "Device"
        Identifier  "ATI RadeonHD 4850"
        Driver      "ati"
        BusID       "PCI:2:0:0"
        Option      "Int10" "off"
EndSection

Section "Device"
        Identifier   "ATI RadeonHD 3200"
        driver       "ati"
        BusID        "PCI:1:5:0"
        Option       "Int10" "off"
EndSection

Int10 off is important here, otherwise the second card will fail to initialise.
Do not forget to change the PCI identifiers! They probably won’t match my setup. You can find them by using lspci, for instance on my setup:

lspci | grep  "Radeon HD"
01:05.0 VGA compatible controller: ATI Technologies Inc Radeon HD 3200 Graphics
02:00.0 VGA compatible controller: ATI Technologies Inc RV770 [Radeon HD 4850]

So you can see that the HD3200 is on address 1:5 and the HD4580 is on address 2:0.

The monitors (nothing fancy)

Section "Monitor"
        Identifier   "Viewsonic Vx2025wm"
        Option      "DPMS"
EndSection

Section "Monitor"
        Identifier    "LG W2253TW"
        Option       "DPMS"
EndSection

Screen section (mapping monitors and cards)

 
Section "Screen"
        Identifier        "Screen0"
        Device           "ATI RadeonHD 4850"
        DefaultDepth   24
EndSection

Section "Screen"
        Identifier        "Screen1"
        Device           "ATI RadeonHD 3200"
        DefaultDepth   24
EndSection

Next, the ServerLayout sections, one per seat:

Section "ServerLayout"
        Identifier     "seat0"
        Screen      0  "Screen0" 0 0
        InputDevice    "Mouse0" "CorePointer"
        InputDevice    "Keyboard0" "CoreKeyboard"
EndSection

Section "ServerLayout"
        Identifier     "seat1"
        Screen      1  "Screen1" 0 0
        InputDevice    "Mouse1" "CorePointer"
        InputDevice    "Keyboard1" "CoreKeyboard"
EndSection

Next, the input devices:

Section "InputDevice"
    Identifier     "Keyboard0"
    Driver         "evdev"
    Option         "Device" "/dev/input/by-path/pci-0000:00:12.1-usb-0:3:1.0-event-kbd"
    Option         "XkbModel" "pc105"
    Option         "XkbLayout" "us"
    Option         "XkbRules"   "xorg"
EndSection

Section "InputDevice"
    Identifier     "Mouse0"
    Driver         "evdev"
    Option         "Protocol" "ExplorerPS/2"
    Option         "Device" "/dev/input/by-path/pci-0000:00:13.0-usb-0:3:1.0-event-mouse"
EndSection

Section "InputDevice"
    Identifier     "Keyboard1"
    Driver         "evdev"
    Option         "Device" "/dev/input/by-path/pci-0000:00:12.2-usb-0:3.1:1.0-event-kbd"
    Option         "XkbModel" "pc105"
    Option         "XkbLayout" "us"
    Option         "XkbRules"   "xorg"
EndSection

Section "InputDevice"
    Identifier     "Mouse1"
    Driver         "evdev"
    Option         "Protocol" "ExplorerPS/2"
    Option         "Device" "/dev/input/by-path/pci-0000:00:12.2-usb-0:3.2:1.0-event-mouse"
EndSection

You need to change the device paths to match the devices you want, either by checking /dev/input/by-path/ or by /dev/input/by-id/. The benefit of using by-id is that if you replug your devices, they’ll still be mapped correctly. Since I have devices with the same ID, this didn’t work for me.

All these changes sofar should allow you to manually start up the X servers with the respective keyboard/mouse/screen settings. You should be able to test it with these commands:

/usr/bin/X -br -nolisten tcp -layout seat0 -sharevts \ 
      -novtswitch -isolateDevice PCI:2:0:0

or

/usr/bin/X -br -nolisten tcp -layout seat1 -sharevts \ 
      -novtswitch -isolateDevice PCI:1:5:0

KDM changes

Now, since I want both the X servers to be available at boot time, and I’m using KDE anyway, I went with KDM.

In the [General] section, look for a line reading:

StaticServers=:0

change it to:

StaticServers=:0,:1

Also, change:

ReserveServers=:1,:2,:3

to:

ReserveServers=:2,:3

Next, look for the [X-:0-Core] section, and copy the entire block, creating a second block with the section name [X-:1-Core].

In the [X-:0-Core] section, look for the line

ServerArgsLocal=-br -nolisten tcp

and change it to

ServerArgsLocal=-br -nolisten tcp -layout seat0 -sharevts -novtswitch -isolateDevice PCI:2:0:0

In the [X-:1-Core] section, look for the line

ServerArgsLocal=-br -nolisten tcp

and change it to

ServerArgsLocal=-br -nolisten tcp -layout seat1 -sharevts -novtswitch -isolateDevice PCI:1:5:0

One KDM restart later (/etc/init.d/kdm restart) you should have two X servers running, both on their respective screens!

Last but not least, kudos to WKPG wiki for the helpful article ;)

Using an Alcatel X200 under Linux

I recently purchased an Alcatel Onetouch X200 3G USB modem, to be able to use internet on various locations where there is no wired or wifi available. Works fine under Windows/Mac OS X, bit more of a hassle under Linux.

Here are some hints on how to get it to work:

  • You need to install usb-modeswitch to switch the card from it’s builtin usb-storage mode to the USBModem mode. Configuration is done in /etc/usb_modeswitch.conf
  • Use /dev/ttyUSB2. The other two ports that your modem will give don’t really work well.
  • Also, use atleast kernel 2.6.31. Earlier ones might not work.
  • Disable PIN authentication on your SIMcard! This one thing was what kept it from working decently – I tried tons of things, and when I disabled the PIN, it worked nearly instantaneously.
    The command to do PIN auth is AT+CPIN=1111 (changing 1111 by your actual PIN), but when issuing this command the modem accepts it, but very often freaks out afterwards. Weird.
    You can find a nice list of GSM modem AT codes on gsm-modem.de.

Thats about it!

Linux on the Apple Macbook

I was bored recently, and decided to install Linux on my Macbook. I opted for the distribution I like best – Debian (unstable/Sid).

After some twiddling it all works rather well, I’m amazed how well ;) Even suspend to ram works flawlessly! (that was a different case a year ago, when I last had linux on a laptop). The only things I still have to get working is the framebuffer console (so I get something better than 80×25), and the infrared. Nothing very high on the agenda, though :)

I’ve detailed the installation instructions in this post.

Reading DRM’ed Adobe Ebooks on Linux

Sade linked me to this nice ebook by Neil Gaiman, Neverwhere. Unfortunately, you need Adobe Digital Editions for it, which only exists for Windows and Mac. Since she’s a Linux user, that one didn’t really fly with her.

So, to get that thing to work, here’s a very low-tech way of doing it:

  1. Install Digital Editions on a supported OS (I used Mac OS)
  2. Download/open the ebook’s ebx.etd file
  3. Let Digital Editions open, download and authenticate the file
  4. Print to PDF 40 pages (the damn thing won’t let you print more)
  5. Close the digital Editions app
  6. Delete (in my case) the ~/Documents/Digital Editions directory
  7. Reload the webpage
  8. Goto step 2

Repeating this until you have the entire ebook in PDF’s for easy reading at home, under your favourite OS / device! ;)

Iodine (dns tunnel) on your Mac (to escape those evil firewalls)

Here’s a short how-to to get the iodine dns tunnel working on your Mac.

In this short howto, I’ll assume you’ll be using a linux server to act as your gateway to the world. I’ll also assume you’ve read the iodine documentation and setup your DNS accordingly. For my example, I’ll be using a (nonexistant) DynDNS.org static DNS entry, iodine.rulestheworld.tld. I’ll also assume that you’ll be using a public internet address of 1.2.3.4, and a private subnet of 10.0.0.1.

  1. Install the tun/tap driver for Mac OS X. Easy as doing *click* *click* done! :p
  2. Next, install iodine on your Mac. Easy as download, extract, and typing make; make install
  3. Now, install iodine on your linux box. It’s included in the package repositories of the usual suspects, for instance debian: apt-get install iodine.

    Start it (or configure it to use) with:
    iodined -P <password> <unused private IP> <dns name>
    or in our example:
    iodined -P mypass 10.0.0.1 iodine.rulestheworld.tld

    This should return the following:

    Opened dns0
    Setting IP of dns0 to 10.0.0.1
    Setting MTU of dns0 to 1024
    Opened UDP socket
    Listening to dns for domain iodine.rulestheworld.tld

  4. Configure your linux box for IP forwarding: sysctl -e net.ipv4.ip_forward=1
    (and add this to your /etc/sysctl.conf file), and configuring your firewall (iptables) for masquerading:
    iptables -t nat -A POSTROUTING -s 10.0.0.0/255.255.255.0 -o eth0 -j MASQUERADE
  5. Next, download NStun.sh, a very handy script that does all the hard work of changing the routes and so on :p

    You’ll want to change the script: change the first lines as the script reads, and lower, change the

    NS=`grep nameserver /etc/resolv.conf|head -1|awk ‘{print $2}’`

    line to read

    NS=”62.213.207.197″

Now, start NStun.sh on your Mac, and surf away! (well, slowly, but freely, atleast!)

Running Linux on a Dell Latitude D610

This page documents my attempts (and successes!) to get Linux fully working on a Dell D610 laptop.

NOTE: The information contained herein assumes that you know how to work from the commandline, patch kernels and compile programs.

DISCLAIMER: This information is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. If you fry your system by using this information that’s _your_ problem. Not mine. I accept no responsability for what happens with this information whatsoever.

Update notes

I no longer have access to the Dell Latitude D610 laptop since I changed work, so I can no longer update this page. I’ll keep it up as a reference.

Technical Specifications

Intel Pentium M processor (1024KB L2 Cache), supports Enhanced Intel SpeedStep
Intel PRO/Wireless 2915AB network connection
Intel 915 chipset
Standard 512MB DDR SDRAM, upgradeable to max. 2048MB
Toshiba MK8026GA – 80GB Ultra ATA/100 HDD
14.0″ SXGA+ TFT colour LCD, 1400×1050, 16.7M colours
Intel 915 video chip, up to 128mb shared memory
SoundBlaster-Pro and MS DirectSound compatible
10/100/1000Mbps Fast Ethernet; Wake-on-LAN ready
56K ITU V.92 data/fax software modem; Wake-on-Ring ready
Integrated Bluetooth

PCI Specs

0000:00:00.0 Host bridge: Intel Corporation Mobile 915GM/PM/GMS/910GML Express Processor to DRAM Controller (rev 03)
0000:00:02.0 VGA compatible controller: Intel Corporation Mobile 915GM/GMS/910GML Express Graphics Controller (rev 03)
0000:00:02.1 Display controller: Intel Corporation Mobile 915GM/GMS/910GML Express Graphics Controller (rev 03)
0000:00:1c.0 PCI bridge: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) PCI Express Port 1 (rev 03)
0000:00:1d.0 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #1 (rev 03)
0000:00:1d.1 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #2 (rev 03)
0000:00:1d.2 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #3 (rev 03)
0000:00:1d.3 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB UHCI #4 (rev 03)
0000:00:1d.7 USB Controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB2 EHCI Controller (rev 03)
0000:00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev d3)
0000:00:1e.2 Multimedia audio controller: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Audio Controller (rev 03)
0000:00:1e.3 Modem: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Modem Controller (rev 03)
0000:00:1f.0 ISA bridge: Intel Corporation 82801FBM (ICH6M) LPC Interface Bridge (rev 03)
0000:00:1f.2 IDE interface: Intel Corporation 82801FBM (ICH6M) SATA Controller (rev 03)
0000:02:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5751 Gigabit Ethernet PCI Express (rev 01)
0000:03:01.0 CardBus bridge: Texas Instruments PCI6515 Cardbus Controller
0000:03:01.5 Communication controller: Texas Instruments PCI6515 SmartCard Controller
0000:03:03.0 Network controller: Intel Corporation PRO/Wireless 2915ABG MiniPCI Adapter (rev 05)

Here’s a detailed pci listing.

Linux 2.6.x kernel

The latest 2.6 kernel is: 2.6.39.4.
Here’s my 2.6.15.6 kernel configuration.

USB

Hardware: this is the Intel 82801FB/FBM/FR/FW/FRW (ICH6 Family) USB chip.

USB worked out of the box by loading the following modules:

  • usb-uhci (USB 1.x support)
  • ehci-hcd (USB 2 support)
  • usbcore (which is automatically loaded by the previous ones)

It is advisable to install the hotplug system so the necessary modules are loaded upon plugging. For Debian, install the hotplug package.

These days you’re actually better of installing the udev package, which also handles hotplug.

10/100/1000 MBit ethernet LAN

Hardware: this is a Broadcom Corporation Broadcom Corporation NetXtreme BCM5751 Gigabit Ethernet chip.

Lan also worked out of the box, using the tg3 module.

Soundcard

Hardware: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC’97 Audio Controller

What can I say? It worked perfectly with the ALSA module called snd_intel8x0 module.

For Debian, install the alsa-base and alsa-utils packages.

VGA Framebuffer console

Hardware: Intel Corporation Mobile 915GM/GMS/910GML Express Graphics Controller

You can use the intelfb framebuffer driver (titled Intel 830M/845G/852GM/855GM/865G support which comes included with the kernel.

To use it, specify this on your kernel command line: video=intelfb:mtrr,noaccel vga=0x834.

VGA XFree86/X.Org

Hardware: Intel Corporation Mobile 915GM/GMS/910GML Express Graphics Controller

To make it working just set your video driver to i810:

		Section "Device"
			Identifier	"Generic Video Card"
			Driver		"i810"
		EndSection

The screen section looks like this:

		Section "Screen"
			Identifier	"Default Screen"
			Device		"Generic Video Card"
			Monitor		"Generic Monitor"
			DefaultDepth	24
			SubSection "Display"
				Depth		24
				Modes		"1400x1050" "1024x768"
			EndSubSection
		EndSection

To get the 1400×1050 resolution working, you have to patch the video bios. There’s a utility for that called 915resolution.
(for debian install the 915resolution package). The command to run at every bootup is 915resolution 3c 1400 1050.
After this, X will accept the resolution.

Here’s my complete xorg.conf file

TV Out

This is rumored to work with the standard i810 X.Org driver. Not tested.

Modem

Hardware: Intel Corporation 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC’97 Modem Controller – Winmodem.

This modem can be gotten to work using the Linuxant HSF Softmodem drivers. Unfortunately, they are payware.
They also have a limited-speed test driver, you can see if that works for you before deciding to buy the driver.

NOTE: You have to compile your kernel without CONFIG_4KSTACKS! If you use this driver with 4K stacks enabled, it _will_ crash your system!

CDRW/DVDRW

Hardware: SONY DVD+-RW DW-Q58A.

To get this device working with the SATA driver, put libata.atapi_enabled=1 in your kernel parameters, in your boot loader (which usually is /etc/lilo.conf or /boot/grub/menu.lst.

You can use /dev/scd0 (the cdrom device) directly for cd burning.

BlueTooth

Hardeware: Dell Wireless 350 Bluetooth – connected to the USB bus.

Works perfectly with the bluez and hci-usb modules. In fact, if you install hotplug the driver will be loaded automatically if you press the bluetooth button!

Debian users might want to install the buetooth package.

Harddisk

Hardware: Toshiba MK8026GA

I’m not sure if this drive is a SATA or a PATA drive, but it’s behind the SATA bus. As such, you need to activate the SCSI SATA driver ata_piix.

DMA is automagically enabled. I use hdparm to set an extra parameter: hdparm -F /dev/sda

Explanation:

  • -F: set security-freeze (so that nothing can accidentily lock your disk with a password)

For Debian; check the hdparm package.

Speedstep

You need this if you don’t want your CPU to eat your batteries empty. It’s included in the kernel config.

It works perfectly after loading the speedstep-centrino and any of the cpufreq- modules.

You can either install the cpufreqd daemon, or use the cpufreq_ondemand module (which modulates the speed by requirement).
I use this init script to setup everything at bootup.

For Debian, check the cpufreqd or powernowd packages.

Wireless Lan

Hardware: Intel Corporation PRO/Wireless 2915ABG MiniPCI Adapter

Driver status: native linux driver available at http://ipw2200.sourceforge.net/

The native driver works out of the box. Just extract, compile (using make; make install) and run modprobe ipw2200.
For information on how to configure your wlan card, please see the above website.

If you want your nifty wlan led to light, add led=1 to the modprobe line, or add options ipw2200 led=1 to a file in /etc/modprobe.d/.

For Debian there are the ipw2200-source and ieee80211-source packages available, which simplifies following up on new releases.

PCMCIA

Hardware: Texas Instruments PCI6515 Cardbus Controller

You have to install the pcmciautils package, and enable the yenta_socket module in the kernel.

For Debian, check the pcmciautils package.

SmartCard reader

Hardware: ??

Not tested at the moment.

Infrared

Works with the FIR smsc-ircc2 module.

To get the smsc-ircc2 module, you need to enable ISA Support in the Bus Options menu.

Here’s what you need to do:

  1. Enable the port in the BIOS, and assign it to e.g. COM2
  2. Disable the tty port in linux: setserial /dev/ttyS1 uart none
  3. Load the smsc-ircc2 module with the correct parameters: modprobe smsc-ircc2 ircc_irq=3 ircc_dma=3 ircc_sir=0x2f8 ircc_fir=0x280
  4. Launch irattach on the irda0 device: irattach irda0 -s

For Debian, I advise the irda-utils package.

Multimedia Keys

This laptop has several ‘function’ and ‘multimedia’ keys, which are not mapped by the bios but generate scancodes.
These include:

  • Volume up (Fn-PgUp)
  • Volume down (Fn-PgDown)
  • Mute (Fn-End)
  • Hibernate (Fn-F1)
  • Battery (Fn-F3)
  • Eject CD (Fn-F10)

Normally the Mute, Eject CD, Battery and Hibernate buttons don’t generate key-up events, causing the, to ‘hang’. You can solve that problem by using this kernel patch. (apply it by using cat d610-fnkeys-fix.patch | patch -p1 in the kernel sourcedir)

The last three keys generate scancodes, but no keycodes by default. To fix this, you can map them using setkeycodes. You can also use this init.d script.

I used the hotkeys for it, with this delld610.def file in /usr/share/hotplug/ and then starting hotkeys as
hotkeys --no-splash --cdrom-dev=/dev/scd0 --osd=off from your .xsession file. I also use a seperate script to get the ACPI Battery status into a kdialog window, this is mapped to the Battery Status key.

Debian users can install the hotkeys package.

Thanks to Alexander Wintermans for the extra info on getting this to work.

Software Suspend

Not yet tried.

Suspend to RAM

This works pretty well – there are some caveats to take note off tho:

This site has some hints with respect to the SATA side of suspending.

On kernels < 2.6.16 you have to apply this patch to get the SATA suspend/resume to work.

To get the display back to life, you have to use vbetool (debian package vbetool).

I use the following suspend script in /etc/acpi/events (which is triggered when I press my suspend button), and this suspend2ram script to do the actual suspending.

Touchpad in XFree86/X.Org

This is a ALPS touchpad. You can use it with this driver.
Extract from the INSTALL file:

1. Copy the driver-module "synaptics_drv.o" into the XFree-module path
"ex. /usr/X11R6/lib/modules/input/".

2. Load the driver by changig the XFree configuration file through
adding the line 'Load "synaptics"' in the module section.

3. Add/Replace in the InputDevice-section for the touchpad the
following lines:

Section "InputDevice"
  Driver        "synaptics"
  Identifier    "Mouse[1]"
  Option        "Device"                "/dev/psaux"
  Option        "Protocol"              "auto-dev"
  Option        "LeftEdge"              "120"
  Option        "RightEdge"             "830"
  Option        "TopEdge"               "120"
  Option        "BottomEdge"            "650"
  Option        "FingerLow"             "14"
  Option        "FingerHigh"            "15"
  Option        "MaxTapTime"            "180"
  Option        "MaxTapMove"            "110"
  Option        "EmulateMidButtonTime"  "75"
  Option        "VertScrollDelta"       "20"
  Option        "HorizScrollDelta"      "20"
  Option        "MinSpeed"              "0.3"
  Option        "MaxSpeed"              "0.75"
  Option        "AccelFactor"           "0.015"
  Option        "EdgeMotionMinSpeed"    "200"
  Option        "EdgeMotionMaxSpeed"    "200"
  Option        "UpDownScrolling"       "1"
  Option        "CircularScrolling"     "1"
  Option        "CircScrollDelta"       "0.1"
  Option        "CircScrollTrigger"     "2"
EndSection

Change the Identifier to the same name as in the ServerLayout-section.

4. Add the "CorePointer" option to the InputDevice line at the ServerLayout section:

Section "ServerLayout"
...
InputDevice "Mouse[1]"  "CorePointer"
...

Here’s my complete xorg.conf file

Debian users can install the xfree86-driver-synaptics package (for both XFree86 and X.Org).

LID-switch problem

There’s a BIOS bug in this laptop which causes the display to stay blank when the lid is closed. As a workaround, we re-enable the LCD display after the lid has been opened again.

For this to work, you need to activate the video ACPI module.

Install this lidswitch event script in /etc/acpi/events, and lidswitch trigger script in /etc/acpi.

What we basically do is echo 0x80000001 > /proc/acpi/video/VID/LCD/state, which reactivates the LCD screen.

Links

Running Linux on an Acer TravelMate 800 series laptop

This page documents my attempts (and successes!) to get Linux fully working on an Acer Travelmate 800 series laptop.

NOTE: The information contained herein assumes that you know how to work from the commandline, patch kernels and compile programs.

DISCLAIMER: This information is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. If you fry your system by using this information that’s _your_ problem. Not mine. I accept no responsability for what happens with this information whatsoever.

Update notes

I no longer have the Acer Travelmate 800 series laptop (sold it), so I can no longer update this page. I’ll keep it up as a reference.

On March 10 2005 I’ve decided to give this page a complete overhaul, and throw out any references to the 2.4 series of kernels since I don’t run them anymore, and IMO users should upgrade to 2.6 to make 100% decent use of their laptops.
For reference purposes I’ve put up a file which contains the 2.4 stuff, but it will not be updated any longer.

Technical Specifications

Intel Pentium M processor (1024KB L2 Cache), supports Enhanced Intel SpeedStep
Intel PRO/Wireless 2100 network connection
Intel 855PM chipset with 400MHz processor system bus
Standard 512MB DDR-266 SDRAM, upgradeable to max. 2048MB
Hitachi IC25N040ATMR04-0 – 40GB Ultra ATA/100 HDD with Disc Anti-Shock Protection system
Acer MediaBay for modules: hot swappable standard 24/10/8/24x DVD/CD-RW combo drive
15.0″ SXGA+ TFT colour LCD, 1400×1050, 16.7M colours
ATI Radeon 9000, dedicated 64MB DDR video memory
SoundBlaster-Pro and MS DirectSound compatible
TravelMate SmartCard solution including PlatinumSecret suite
10/100Mbps Fast Ethernet; Wake-on-LAN ready
56K ITU V.92 data/fax software modem; Wake-on-Ring ready
Integrated Bluetooth

PCI Specs

0000:00:00.0 Host bridge: Intel Corporation 82855PM Processor to I/O Controller (rev 03)
0000:00:01.0 PCI bridge: Intel Corporation 82855PM Processor to AGP Controller (rev 03)
0000:00:1d.0 USB Controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1 (rev 03)
0000:00:1d.1 USB Controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #2 (rev 03)
0000:00:1d.2 USB Controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3 (rev 03)
0000:00:1d.7 USB Controller: Intel Corporation 82801DB/DBM (ICH4/ICH4-M) USB2 EHCI Controller (rev 03)
0000:00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 83)
0000:00:1f.0 ISA bridge: Intel Corporation 82801DBM (ICH4-M) LPC Interface Bridge (rev 03)
0000:00:1f.1 IDE interface: Intel Corporation 82801DBM (ICH4-M) IDE Controller (rev 03)
0000:00:1f.3 SMBus: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) SMBus Controller (rev 03)
0000:00:1f.5 Multimedia audio controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Audio Controller (rev 03)
0000:00:1f.6 Modem: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Modem Controller (rev 03)
0000:01:00.0 VGA compatible controller: ATI Technologies Inc Radeon R250 Lf [FireGL 9000] (rev 01)
0000:02:02.0 Ethernet controller: Broadcom Corporation BCM4401 100Base-T (rev 01)
0000:02:04.0 Network controller: Intel Corporation PRO/Wireless LAN 2100 3B Mini PCI Adapter (rev 04)
0000:02:06.0 CardBus bridge: O2 Micro, Inc. OZ711M1/MC1 4-in-1 MemoryCardBus Controller (rev 20)
0000:02:06.1 CardBus bridge: O2 Micro, Inc. OZ711M1/MC1 4-in-1 MemoryCardBus Controller (rev 20)
0000:02:06.2 System peripheral: O2 Micro, Inc. OZ711Mx 4-in-1 MemoryCardBus Accelerator
0000:02:07.0 FireWire (IEEE 1394): Texas Instruments TSB43AB21 IEEE-1394a-2000 Controller (PHY/Link)

Here’s a detailed pci listing.

Subsystem Notes

Linux 2.6.x kernel

The latest 2.6 kernel is: 2.6.39.4.
Here’s my 2.6.14.2 kernel configuration.

USB

Hardware: this is the Intel 82801DB USB chip.

USB worked out of the box by loading the following modules:

  • usb-uhci (USB 1.x support)
  • ehci-hcd (USB 2 support)
  • usbcore (which is automatically loaded by the previous ones)

It is advisable to install the hotplug system so the necessary modules are loaded upon plugging. For Debian, install the hotplug package.

10/100 MBit ethernet LAN

Hardware: this is a Broadcom Corporation BCM4401 100Base chip.

Lan also worked out of the box, using the b44 module.

Soundcard

Hardware: Intel Corp. 82801DB AC’97 Audio Controller

What can I say? It worked out of the box using the OSS/Free i810_audio module.
You can also use the ALSA module, called snd_intel8x0 module. This is actually the preferred driver.

For Debian, install the alsa-base and alsa-utils packages.

VGA Framebuffer console

Hardware: ATI Radeon Mobility 9000 M9

Works out of the box by compiling ATI Radeon display support in the kernel.

NOTE: if you plan on using ATI’s fglrx driver (for better 3D performance) you have to choose the VESA display support option instead!

VGA XFree86/X.Org

Hardware: ATI Radeon Mobility 9000 M9

Make sure you’re using _atleast_ XFree86 4.3, or X.Org 6.8! Earlier releases don’t support the ATI Radeon M9

To make it working just set your video driver to radeon:

		Section "Device"
			Identifier	"Generic Video Card"
			Driver		"radeon"
			Option		"AGPMode"  "4"
		EndSection

The screen section looks like this:

		Section "Screen"
			Identifier	"Default Screen"
			Device		"Generic Video Card"
			Monitor		"Generic Monitor"
			DefaultDepth	24
			SubSection "Display"
				Depth		24
				Modes		"1400x1050" "1024x768"
			EndSubSection
		EndSection

An alternative driver is ATI‘s FireGL driver.
Debian users can look here for downloading and building the package.

Here’s my complete XF86Config-4 file

TV Out

This is rumored to work with ATI‘s FireGL driver. I haven’t confirmed this, tho.

Modem

Hardware: Intel Corp. 82801DB AC’97 Modem Controller – Winmodem.

this modem is made by Agere (a Lucent subsidiary).

You can get it to work by using the latest release from the smartlink driver:
Compile the driver (make) and install it (make install). Next, start the slmodemd daemon with the following parameters:
slmodemd -c <COUNTRY>
This will start the daemon and link it to the /dev/ttySL0 port. Now you can use that for dialout.
For more info, see this email on linmodems.org

Another way to get this to work is by using ALSA and enabling the Intel i8x0/MX440; SiS 7013; NForce; AMD768/8111 modems option in the kernel. Then you can just load slmodemd with the --alsa parameter.

For Debian, look for the sl-modem-daemon and sl-modem-source packages.

CDRW/DVD

Hardware: MATSHITA UJDA740 DVD/CDRW, burns CDR4s at 24x.

You can use /dev/hdx (the cdrom device) directly for cd burning.

BlueTooth

Hardeware: Cambridge Silicon Radio, Ltd – connected to the USB bus.

Works perfectly with the bluez and hci-usb modules. In fact, if you install hotplug the driver will be loaded automatically if you press the bluetooth button!

Debian users might want to install the bluetooth package.

I configured my Palm Tungsten T3 for Bluetooth sync, more info here: http://howto.pilot-link.org/bluesync/

FireWire (IEEE 1394)

Hardware: Texas Instruments TSB43AB21 IEEE-1394a-2000 Controller (PHY/Link)

To activate the port load the ieee1394 module.
It works perfectly with my sbp2 type external cd-writer.

Harddisk

Hardware: Seagate ST9808211A (earlier: IBM IC25N040ATMR04-0 and before that HITACHI DK23EA-40)

I added the following call to the bootup system to activate DMA transfers:
hdparm -c3 -d1 -A1 -m16 -u1 -a64 -F/dev/hda

Explanation:

  • -c3: enables 32-bit data transfers with special ‘sync’ sequence.
  • -d1: enable DMA
  • -A1: enable drive read-ahead
  • -m16: enable multiple sector mode (IDE Block Mode) with 16 sector-reads
  • -u1: set interrupt-unmask flag
  • -a64: set sector-count for filesystem read-ahead
  • -F: set security-freeze (so that nothing can accidentily lock your disk with a password)

For Debian; check the hdparm package.

Speedstep

You need this if you don’t want your CPU to eat your batteries empty. It’s included in the kernel config.

It works perfectly after loading the speedstep-centrino and any of the cpufreq- modules.

You can either install the cpufreqd daemon, or use the cpufreq_ondemand module (which modulates the speed by requirement).
I use this init script to setup everything at bootup.

For Debian, check the cpufreqd or powernowd packages.

Wireless Lan

Hardware: Intel Corp. PRO/Wireless LAN 2100 3B Mini PCI Adapter

Driver status: native linux driver available at http://ipw2100.sourceforge.net/

The native driver works out of the box. Just extract, compile (using make; make install) and run modprobe ipw2100.
For information on how to configure your wlan card, please see the above website.

For Debian there are the ipw2100-source and ieee80211-source packages available, which simplifies following up on new releases.

Acer Launchkeys

Most of these you can get to work with the acerhk driver.

For usage instructions, see the Gentoo wiki

PCMCIA

Hardware: O2 Micro, Inc. OZ711M1 SmartCardBus MultiMediaBay Controller

You have to install the pcmcia_cs or (for recent kernels) the pcmciautils package, and enable the yenta_socket module in the kernel.

For Debian, check the pcmcia-cs or the pcmciautils package.

SmartCard reader

Hardware: O2 Micro, Inc. OZ711Mx MultiMediaBay Accelerator

There’s a driver available at http://www.musclecard.com/sourcedrivers.html

I haven’t tried it out yet tho.

Infrared

I only got this to work with the FIR driver. Johannes Zellner did it with SIR, see the notes below.

I did get it to work with the nsc-ircc module.

To get the nsc-ircc module, you need to enable ISA Support in the Bus Options menu.

Here’s what you need to do:

  1. Enable the port in the BIOS
  2. Disable the tty port in linux: setserial /dev/ttyS1 uart none
  3. Load the nsc-ircc module with the correct parameters: modprobe nsc-ircc io=0x2f8 irq=3 dma=1
  4. Launch irattach on the irda0 device: irattach irda0 -s

Now you should be able to connect e.g. a palmpilot on /dev/ircomm0. Atleast, it works for me.

UPDATE: Johannes Zellner has informed me that this laptop can indeed do SIR, but you need to limit the baud speed.
I haven’t tested this myself, email follows:

You CAN get SIR on the irda chip and in fact you have to operate in SIR
mode for example if you want to connect (like me) to your gprs handy to
use it as a modem. The trick is to limit the baud speed:
(something like /etc/modules.conf):

# <snip>
	alias tty-ldisc-11 irtty
	alias char-major-161 ircomm-tty

	# see also http://www.cl.cam.ac.uk/Research/SRG/netos/coms/unix.html
	#
	options nsc-ircc irq=3 dma=3 io=0x2f8 dongle_id=0x09
	alias irda0 nsc-ircc
	pre-install nsc-ircc setserial /dev/ttyS1 port 0 irq 0

	# limit max baud rate to 115200 to avoid MIR/FIR bug.
	# !! This has to be done BEFORE doing 'irattach irda0 -s' !!
	#
	post-install nsc-ircc echo 115200 > /proc/sys/net/irda/max_baud_rate
# </snip>

For Debian, I advise the irda-utils package.

Multimedia Keys

This laptop has several ‘function’ and ‘multimedia’ keys, which are not mapped by the bios but generate scancodes.
These include:

  • Volume up
  • Volume down
  • Mute
  • Help (pops up a window with some basic info about the laptop under windows)
  • Setup (opens a program to change some bios settings)
  • Change power mode

I used the hotkeys for it, with this acertm800.def file in /usr/share/hotplug/ and then starting hotkeys as
hotkeys --no-splash --cdrom-dev=none --osd=off from your .xsession file.

Debian users can install the hotkeys package.

Software Suspend

Not yet tried.

Suspend to RAM

This works pretty well starting kernel 2.6.12.
You can’t use the ATI fglrx driver, and you can’t use the Radeon framebuffer.

I use the following suspend script in /etc/acpi/events (which is triggered when I press my suspend button), and this suspend2ram script to do the actual suspending.

Here you can find more information which might help you get it working.

Touchpad in XFree86/X.Org

This is a Synaptics touchpad. You can use it with this driver.
Extract from the INSTALL file:

1. Copy the driver-module "synaptics_drv.o" into the XFree-module path
"ex. /usr/X11R6/lib/modules/input/".

2. Load the driver by changig the XFree configuration file through
adding the line 'Load "synaptics"' in the module section.

3. Add/Replace in the InputDevice-section for the touchpad the
following lines:

Section "InputDevice"
Driver  	"synaptics"
Identifier  	"Mouse[1]"
Option 	"Device"  	"/dev/psaux"
Option	"Protocol"	"auto-dev"
Option	"LeftEdge"      "1900"
Option	"RightEdge"     "5400"
Option	"TopEdge"       "1800"
Option	"BottomEdge"    "3900"
Option	"FingerLow"		"25"
Option	"FingerHigh"	"30"
Option	"MaxTapTime"	"180"
Option	"MaxTapMove"	"220"
Option	"VertScrollDelta" "100"
Option	"MinSpeed"		"0.02"
Option	"MaxSpeed"		"0.18"
Option	"AccelFactor" 	"0.0010"
EndSection

Change the Identifier to the same name as in the ServerLayout-section.
The Option "Repeater" is at the moment for testing.

4. Add the "CorePointer" option to the InputDevice line at the ServerLayout section:

Section "ServerLayout"
...
InputDevice "Mouse[1]"  "CorePointer"
...

Here’s my complete XF86Config-4 file

Debian users can install the xfree86-driver-synaptics package (for both XFree86 and X.Org).

Links

atvsync 0.1

ATV Sync is a simple script that allows you to easily synchronise the premade ATV PalmOS databases to your PalmOS-powered handheld.

Usage

Put your list of channels in atvsync.conf (as they are listed on the webpage, substituting space for underscores and keeping capitalisation).
Next, make sure your Palm is around, you’re connected to the internet and run the atvsync script. This should then proceed to download the respective database files and next use pilot-xfer to transfer them to your Palm.

Requirements

  • Active internet connection (to get the database files)
  • Palm pilot (to sync them upon)
  • Pilot-link (at http://www.pilot-link.org/)
  • ATV TV Viewer (see ATV website)
  • wget (comes shipped with all linux distros)
atvsync-0.1.tgz (74 downloads)