Linux on iBook G4 12″ 1,2 Ghz

This howto describes the linux installation on an Ibook G4 12″ 1,2 Ghz ( LinuxOnIbookG4 )

Here you can find the files related to this document:

Download Configuration Files

This is my iBook G4 Version:

cpu info:

[sourcecode language=”java”]
root@abook aronchi # cat /proc/cpuinfo

processor : 0
cpu : 7447A, altivec supported
clock : 1200MHz
revision : 1.1 (pvr 8003 0101)
bogomips : 598.01
machine : PowerBook6,5
motherboard : PowerBook6,5 MacRISC3 Power Macintosh
detected as : 287 (iBook G4)
pmac flags : 0000001b
L2 cache : 512K unified
memory : 512MB
pmac-generation : NewWorld

The clock speed could be different because of speedfreq use, see below for more informations.

lspci info:

[sourcecode language=”java”]
root@abook aronchi # lspci
0000:00:0b.0 Host bridge: Apple Computer Inc. UniNorth 2 AGP
0000:00:10.0 VGA compatible controller: ATI Technologies Inc M9+ 5C63 [Radeon Mobility 9200 (AGP)] (rev 01)
0001:10:0b.0 Host bridge: Apple Computer Inc. UniNorth 2 PCI
0001:10:12.0 Network controller: Broadcom Corporation BCM4306 802.11b/g Wireless LAN Controller (rev 03)
0001:10:17.0 Class ff00: Apple Computer Inc. KeyLargo/Intrepid Mac I/O
0001:10:18.0 USB Controller: Apple Computer Inc. KeyLargo/Intrepid USB
0001:10:19.0 USB Controller: Apple Computer Inc. KeyLargo/Intrepid USB
0001:10:1a.0 USB Controller: Apple Computer Inc. KeyLargo/Intrepid USB
0001:10:1b.0 USB Controller: NEC Corporation USB (rev 43)
0001:10:1b.1 USB Controller: NEC Corporation USB (rev 43)
0001:10:1b.2 USB Controller: NEC Corporation USB 2.0 (rev 04)
0002:20:0b.0 Host bridge: Apple Computer Inc. UniNorth 2 Internal PCI
0002:20:0d.0 Class ff00: Apple Computer Inc. UniNorth/Intrepid ATA/100
0002:20:0e.0 FireWire (IEEE 1394): Apple Computer Inc. UniNorth 2 FireWire (rev 81)
0002:20:0f.0 Ethernet controller: Apple Computer Inc. UniNorth 2 GMAC (Sun GEM) (rev 80)

Linux Installation

I’ve installed a Gentoo, following the ppc handbook. After a base installation, you can use my conf files to make your iBook G4 a real lovely GNU/Linux (Gentoo) home.

Kernel Config

Copy my .config file into /usr/src/linux (or wherever you did copy the kernel source files) and do a

[sourcecode language=”java”]make oldconfig[/sourcecode]



This is my make.conf file:


I’ve managed to make 3D acceleration with DRI work and VGA out, also together.
So, If you want to use 3D acceleration without MergedFB or Xinerama, take my xorg.conf

This option make a faster 3D acceleration, but video output will not work.

But if you want to use Xinerama with dual head configuration, without 3D acceleration (both clone mode and one screen left of the other), you want to use that:
Xorg.conf.dual with a cvs or => 6.8.2 Xorg version (because you need these xorg radeon patches, merged only in newer xorg versions. If you don’t want to overwrite your existing xorg version, you can build xorg from cvs as in this xorg-cvs-howto.txt , with my host.def.

NB: if you want to have the two screens spanning on OSX you must patch your iBook with that Spanning Patch Ibook: I suggest you to do that if you know what you’re doing. It’s not necessary if you use only Linux.

I made MergedFB working, so now I have a clone mode (VGA out is the same of the TFT) with 3D DRI acceleration.
You must use this simple configuration:

NB: These 3 configurations are alternative, you can use one.

Make the Apple key works as Altgr and the keyboard more linux confortable

My Apple G4 12″ doesn’t have any Altgr Key, so it’s impossibile to write composed symbols as @ or #. To correct this problem, you can do this procedure on Gnome:

1. Computer -> Desktop Preferences -> Keyboard
2. “Layout Options” tab
3. In the right-hand list open the “Third level choosers” group
4. Highlight “Press Left Win-key to choose 3rd level”
5. Click “Add”

Or add this to keyboard section on /etc/X11/xorg.conf file:

[sourcecode language=”java”]”XkbOptions” “lv3:lwin_switch”[/sourcecode]

My xorg.conf file keyboard section is:

[sourcecode language=”java”]
Section “InputDevice”
Identifier “Keyboard0”
Driver “keyboard”
Option “XkbKeycodes” “macintosh”
Option “XkbSymbols” “macintosh/us”
Option “XkbGeometry” “macintosh”
Option “XkbOptions” “ctrl:nocaps, lv3:lwin_switch”
Option “XkbRules” “xfree86”
Option “XkbModel” “pc105”
Option “LeftAlt” “Meta”
Option “RightAlt” “LWin”
Option “XkbLayout” “it”

On the US keyboard, the ~ and +/- keys aren’t mapped correctly.
add these lines to a startup script:

[sourcecode language=”java”]
xmodmap -e “keycode 49 = section plusminus”
xmodmap -e “keycode 94 = quoteleft asciitilde”

Three Button Mouse Emulation

I usually use an external USB three button mouse, but I want to have an alternative access to the middle and right button without the external mouse.
To use an alternative key to emulate the mouse buttons, you must do:

[sourcecode language=”java”]
echo “1” > /proc/sys/dev/mac_hid/mouse_button_emulation

The standard keys now are on Fn+CTRL for middle button and Fn+alt for right button.
If you want to change the keys, you must do:

[sourcecode language=”java”]
echo “68” > /proc/sys/dev/mac_hid/mouse_button2_keycode
echo “87” > /proc/sys/dev/mac_hid/mouse_button3_keycode

Remember, you must do these commands every boot, so you can add to an init script.

You can change the keycodes 68 and 87 writing your own. To view what keycode is a button press you can use:

[sourcecode language=”java”]
[sourcecode language=”java”]

If your distro supports /etc/sysctl.conf, you can add these lines to this file:
[sourcecode language=”java”]
# Mouse button emulation:
dev/mac_hid/mouse_button_emulation = 1
#dev/mac_hid/mouse_button2_keycode = 68
#dev/mac_hid/mouse_button3_keycode = 87

Uncomment the last lines if you want to edit the keycodes.


In order to make the keyword and the power management more usable, i use pbbuttons:

[sourcecode language=”java”
emerge pbbuttonsd
rc-update add pbbuttonsd default

Now you must configure the /etc/pbbuttons.conf file. Here is mine:


Kernel 2.6.11 comes with support for putting the iBook G4 to sleep. However you still have to enable it when configuring the kernel.

Benh has released a patch that supports Apple iBook g4 sleep: you need it if you have a kernel version < 2.6.11.
You can find the 2.6.9 patch version also here:
Just apply it to kernel source with

[sourcecode language=”java”]
cp ./albook-ibookg4-sleep-4.diff.gz /usr/src/linux
cd /usr/src/linux
gunzip ./albook-ibookg4-sleep-4.diff.gz
patch -p1 < albook-ibookg4-sleep-4.diff make menuconfig [/sourcecode] And add the Powerbook Power Management in the Drivers -> Macintosh kernel configuration section

After that, you can use pbbuttons to make the iBook sleep when the LCD is closed.


Some problems with sleep function comes from modules loaded (usb, thermal, etc). You can solve them if you use powerprefs. Before going to sleep, your iBook must do:

[sourcecode language=”java”]
lsmod | cut -f 1 -d ” ” | grep -v Module | xargs > /tmp/modules.loaded
rmmod `cat /tmp/modules.loaded`

and after resume it must do:

[sourcecode language=”java”]
for module in `cat /tmp/modules.loaded`
modprobe $module

In gentoo you must install app-laptop/powerprefs and use my /etc/power/event.d/modules file.

CPU Variable Speed

To make you iBook a less battery user, you can alter automagically the cpu freq in order to use only the calculation power you need. So, when you use all the cpu, it works at the 100% of his speed, but when you don’t use it the cpu runs slower to get colder.

I’ve used speedfreq:

[sourcecode language=”java”]
emerge speedfreq
rc-update add speedfreqd default

Fan speed

To get a better control of your iBook G4 temperature and fan speed, you can use the module therm_adt746x.

[sourcecode language=”java”]
modprobe therm_adt746x

or put the module into your /etc/modules.autoload file


The module I use and I load at startup are written into a file called /etc/modules.autoload.d/kernel-2.6:
modules.autoload ( My /etc/modules.autoload.d/kernel-2.6 )

[sourcecode language=”java”] sungem
ohci_hcd #usb 1
ehci_hcd #usb 2
ohci1394 #firewire
usb_storage #mp3 mplayer and Sony digital camera
snd-powermac #for sound
snd-pcm-oss #for sound
usb-serial #for GPRS using my sony ericsson phone
visor # for palm m125
#apm_emu #emulate APM (power management)
therm_adt746 #fan control (I use fan_speed=128)
uinput #for mouseemu
uninorth-agp #for DRI (agpgart will come with it)
radeon #for DRI 3D video acceleration
therm_adt746x # to control fan speed and temp


You can configure the sound card with alsa modules and either using a sound daemon (i.e. arts), or by using oss emulation output. You can insert arts in USE flags, as I do.

Mac On Linux

Mol runs correctly on my iBook, with networking enabled.
It’s necessary to add this use flag:


before emerging //MOL//.


[sourcecode language=”java”]

and now edit


to get fullscreen with MOL. Now you have linux on CTRL+ALT+F7 an MacOSX on CTRL+ALT+F8

I use an external ADSL eth0 router with dhcp, so I’ve used tun.ko kernel module and this configuration for mol:


I use the internal dhcp so in MOL I don’t have to specify an address.


I use this settings for hdparm, to increase hard disk performances and decrease the hdd temperature:
[sourcecode language=”java”]
hdparm -S 1 -d1 -m16 -c1 -X udma5 /dev/hda

Make sure to load this settings on every boot.

Time config

Since I have also MacOSX, I had a problem with my clock settings. The hardware clock is set to UTC time by MacOSX, and my Linux system on everyboot read the time from the hardware clock, thinking this is set against my local time (Europe/Rome, CEST).
To solve this problem, you must tell hwclock to use –utc when used to update your system time.
In a RedHat/Fedora system is really simple, once known the origin of the problem:
Simply write this few lines into /etc/sysconfig/clock

[sourcecode language=”java”]

Airport Extreme Wireless Driver

It seems ( someone has written a driver for the Broadcom 43xx wireless chip, the one inside AirPort Extreme included into our iBook G4. It needs 2.6.14 kernel, and I’ve uploaded my config file for the 2.6.14-rc4 (the latest 2.6.14 branch I’ve found at this time).

Now you must get the firmware of your driver. Let /media/macosx be the MacOSX partition mount point. then you must use the fwcutter utility in the package:

[sourcecode language=”java”]
./fwcutter /media/macosx/System/Library/Extensions/AppleAirPort2.kext/Contents/MacOS/AppleAirPort2

and then copy the *.fw files on

[sourcecode language=”java”]
cp *.fw /lib/firmware/

If you want, I’ve made a copy of the driver you can download:
I loaded the bcm430x driver correctly, but I don’t have a wireless access point here, so I cannot try if it works.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *