Below find some dated contents for using Debian on a MacBook.

These contents contain tips for older kernel versions. Since leaving these in the main text interfares with the need of typical users, I have moved these parts here even though some parts of these may still be useful for newer systems. (osamu)

Installation

How to change the kernel to amd64 if i386 Debian installed (MacBook Core 2 Duo)

<!> If you wish to have true 64 bit system, I recommend you to use amd64 installer to install a fresh system. The method described in the following only switches kernel to 64bit. The user land tool remains as i386 binaries. The title is correct but this is nothing more than that. If others agree, this section may be removed. (osamu)

Even if you installed debian i386, it is possible to install the amd64 kernel afterwards.

Install the amd64 kernel: Simply run

aptitude install linux-image-amd64

This should install the amd64 kernel and also update the LILO boot loader to automatically boot into amd64.

Reboot: Reboot to start the amd64 kernel.

VALIDATION: To validate that the amd64 kernel is running, run

uname -r

The output should be something like

2.6.18-5-amd64

. TROUBLESHOOTING (1280x800 resolution is gone): Installing the amd64 kernel might disrupt the 1280x800 resolution. See the section Upgrade to resolution of 1280x800 for how to fix this. You will probably have to this manually. TROUBLESHOOTING (automatic update back to i686): After you have installed the amd64 kernel the old kernel i686 is still present and if you perform an automatic update under aptitude, the i686 might be updated and the LILO changed back to boot into the i686 kernel. It might therefore be advisable to remove the i686 kernel, see below. If you want to keep the i686 kernel but still boot into amd64, you can edit file /etc/lilo.conf and change the default variable to the amd64 image. You find valid values in the label entries and have to guess, which one is the amd64 image, because the names are not very instructive (it could be LinuxOLD, for example). After having changed the value, run lilo in a terminal to make the change active. Then reboot. It might also be an option to add

Remove the i686 kernel: To avoid the problem that an automatic update brings you back to the i686 kernel (see TROUBLESHOOTING (automatic update back to i686) above) you can remove the i686 kernel from within aptitude. Run aptitude, search forward (press '/') for linux-image, mark for purge (press '_' and not '-') all installed packages that start with linux-image and end on 686, perform the purge (press 'g' twice). Finally, run lilo in a shell (if required).

. TROUBLESHOOTING (Couldn't find valid RAM disk): With recent amd64 kernel images (at least 2.6.26 and probably also 2.6.25), the initial ramdisk is too large to be properly supported by LILO (even when the option large-memory is set). A solution is to set

(instead of MODULES=most) in /etc/initramfs-tools/initramfs.conf, so that the initrd.img file gets smaller at (re-)installation of the linux-image-amd64 package (see 479607 for a discussion).

Gigabit Ethernet

Your kernel must have support for the Yukon Gigabit Ethernet driver known as sky2; this is available in Debian 4.0 Etch (or kernel 2.6.16 and above).

See 378521

Suspend and sky2

s2ram -f -p -m works (for some values of "work") with original macbook (sys_product = "?MacBook1,1" sys_version = "1.0" bios_version = "MB11.88Z.0061.B03.0610121324") kernel 2.6.21.3 and mactel patches rev 126. Resumes with backlight off but can turn back on with pommed (usually...), also external display resumes with DPMS disabled. Apparently Ubuntu got the backlight turned on when resuming, need to investigate how to solve this issue.

Video

Note that kernel 2.6.23.1 somehow breaks the external display with stable i810 X.org - but works fine in 2.6.26.

915resolution now works automatically; the below (old) instructions show how to do it manually, but this is no longer necessary:

Upgrade to resolution of 1280x800 (for sarge)

<!> Not required in Lenny, x.org now supports the card properly

After installation of Debian, there will be only very few screen resolutions available, e.g. only 1024x768, 800x600, and 640x480 (1024x768 is the biggest normal size that fits the screen). The resolution of the screen of a MacBook (Intel 915, video chipset 945GM) is 1280x800 and rescaling the 1024x768 display to 1280x800 results in a fuzzy and distorted picture.

To get support for the 1280x800 resolution you have to install the 915resolution package.

Install 915resolution: As root run

aptitude install 915resolution

915resolution should automatically set the correct video mode for 1280x800 and configure X properly.

Restart X: Press Ctrl-Alt-Backspace to restart X, but close any sensitive application first.

If it works and you get high resolution, you should see it right away from the more focussed image. You can also check it under Main menu -> Desktop -> Preferences -> Screen resolution.

aptitude install 915resolution
915resolution -c 945 54 1280 800

then edit /etc/default/915resolution

#
# 915resolution default
#
# find free modes by  /usr/sbin/915resolution -l
# and set it to MODE
# e.g. use MODE=54
MODE=54
#
# and set resolutions for the mode.
# e.g. use XRESO=1024 and YRESO=768
XRESO=1280
YRESO=800
#
# We can also set the pixel mode.
# e.g. use BIT=32
# Please note that this is optional,
# you can also leave this value blank.
BIT=32

Adjust the Monitor section of /etc/X11/xorg.conf

Section "Monitor"
        Identifier      "Color LCD"
        Option          "DPMS"
        HorizSync       28-64
        VertRefresh     43-60
        Modeline "1280x800@60" 83.91 1280 1312 1624 1656 800 816 824 841
EndSection

and make sure the Screen sections uses "1280x800" as default resolution in the Modes lines and finally

/etc/init.d/915resolution start

Sound for etch and early testing of lenny

ALSA driver snd_hda_intel works for playback as of 2.6.18-rc1.

MacBook with Debian 4.0 Etch has no problem with sound. Although, you may need to run alsaconf as root.

If you hear any distortions even when all of the mixer settings are at least 20% below their maximum, it might help to load snd-hda-intel with the 'position_fix=1' option. In the file /etc/modprobe.d/alsa-base, change the line

install snd-hda-intel /sbin/modprobe --ignore-install snd-hda-intel $CMDLINE_OPTS && /lib/alsa/modprobe-post-install snd-hda-intel

to

install snd-hda-intel position_fix=1 /sbin/modprobe --ignore-install snd-hda-intel $CMDLINE_OPTS && /lib/alsa/modprobe-post-install snd-hda-intel

The microphone requires mactel patches and the following to activate (with original macbook, kernel 2.6.21.3 and mactel patches rev 126):

amixer sset 'Input Source' Line; amixer sset 'Input Source' Mic; amixer sset Mux 20.00dB

The microphone did not worked on debian testing with kernel 2.6.21. However I made it work by compiling alsa from subversion (as of 12/08/07) on kernel 2.6.21 without mactel patches.

Mixer channels are as follows (with original macbook, kernel 2.6.21.3, and mactel patches rev 126):

Master: Builtin tweeter level.  No effect on heaphones.
PCM: Master volume for speakers and headphones.  This is the channel controlled by pommed.
Front: Builtin woofer level.   Headphone level.
Surro..:  ?
Line In as Output: ?
IEC958: ?
Capture: ?
Input Source: ?  See above for builtin mic.
Mux: ?  See above for builtin mic.

Optical drive analog CD audio output doesn't appear to work (with original macbook, kernel 2.6.21.3, mactel patches rev 126, xmcd 2.6-19.1).

Important note for the headphones sound : the Surround volume controls the headphones sound; thus, in order to have sound in your headphones after plugging them into the laptop, you have to unmute the Surround volume and set it higher (you can set it at maximum) (you can use alsamixer for example : type alsamixer in a console, go to the 'Surround' volume with the 'right' and 'left' arrow keys, push the 'm' key until you see 'OO' instead of 'MM' and after that push the 'up' arrow key to set the volume higher)

Important note for new Macbook Users : since late 2007, macbooks have used the santa rosa platform as their chipset, consequently sound doesn't work out of the box with Etch, or Testing. Support is included in 2.6.24 kernel, however, it fails to auto-detect the chipset. You must edit /etc/modprobe.d/sound and add the following line:

 options snd-hda-intel model=mbp3 

Sound on ?MacBook2,1 distorted (sudo dmidecode -s system-product-name): Either a lack of sound, or distorted sound through one or both channels has been experienced on these macbooks. The fix seems to depend on the kernel version. In /etc/modprobe.d/sound try the following configs, removing and reloading the module after each change (rmmod snd_hda_intel && modprobe snd_hda_intel). Note, gnome-mixer and pulse audio will commonly prevent the unloading of these modules. To test run speaker-test -c2 -twav:

#<=2.6.26
options snd_hda_intel model=intel-mac-v3 position_fix=1

or

#==2.6.28
options snd_hda_intel model=intel-mac-auto position_fix=2

Synaptics Touchpad information for pre-lenny systems

<!> Although contents in this section are quite rich and interesting, these are old information which may not be exactly applicable to new lenny and later systems.

With 7.3 version of x.org and linux 2.6.22, it should work out of the box: the tapping of touchpad with two fingers should generate a middle-button click and tapping it with three fingers will generate a right-button click. Please see below more information if you wish to re-configure it.

For older versions, you need to have a kernel with at least:

Afterwards, edit /etc/X11/xorg.conf and in the Module section, add the following line:

        Load "synaptics"

If you want to use the Synaptics touchpad you may also need to add these lines to /etc/modprobe.d/

install usbhid /sbin/modprobe appletouch; /sbin/modprobe --ignore-install usbhid $CMDLINE_OPTS

Then add  appletouch  to /etc/initramfs-tools/modules and then run  update-initramfs 

This is just a tip for configuring the synaptics touchpad. You have to install the synaptics driver for Xorg for enabling the touchpad.

---

If you just want to reconfigure it with synaptics:

1. Add "synaptics" module in the module section. 2. If not present, add the correct identifier of the touchpad in the ?ServerLayout section. 3. Proceed with the guide.

One possible setup:

Replace the contents of the ?InputDevice section with the "Configured Mouse" identifier with the following: (from the ?AppleTouch driver site http://www.popies.net/atp/)

    Section "InputDevice"
        Identifier      "Configured Mouse"
        Driver          "synaptics"
        Option          "SendCoreEvents"        "true"
        Option          "Device"                "/dev/input/mice"
        Option          "Protocol"              "auto-dev"
        Option          "LeftEdge"              "0"
        Option          "RightEdge"             "850"
        Option          "TopEdge"               "0"
        Option          "BottomEdge"            "645"
        Option          "MinSpeed"              "0.4"
        Option          "MaxSpeed"              "1"
        Option          "AccelFactor"           "0.02"
        Option          "FingerLow"             "55"
        Option          "FingerHigh"            "60"
        Option          "MaxTapMove"            "20"
        Option          "MaxTapTime"            "100"
        Option          "HorizScrollDelta"      "0"
        Option          "VertScrollDelta"       "30"
        Option          "SHMConfig"             "on"
    EndSection

Another possible setup:

On my configuration, I set one finger tap on the pad = right mouse click and two finger tap = middle mouse click, I have disabled the two finger scrolling and let the vertical right edge scrolling. Here is the mouse section of my xorg.conf :

Section "InputDevice"
  Identifier      "Synaptics Touchpad"
  Driver          "synaptics"
  Option          "SendCoreEvents"        "true"
  Option          "Device"                "/dev/psaux"
  Option          "Protocol"              "auto-dev"
  Option          "SHMConfig"             "true"
  Option          "New AccelFactor"       "0.03"
  Option          "LeftEdge"              "100"
  Option          "RightEdge"             "1120"
  Option          "TopEdge"               "50"
  Option          "BottomEdge"            "310"
  Option          "FingerHigh"            "30"
  Option          "MinSpeed"              "0.94"
  Option          "MaxSpeed"              "1"
  Option          "AccelFactor"           "0.0015"
  Option          "FingerLow"             "20"
  Option          "HorizScrollDelta"      "0"
  Option          "MaxTapTime"            "150"
  Option          "TapButton1"            "3"
  Option          "TapButton3"            "0"
  Option          "VertEdgeScroll"        "1"
  Option          "HorizEdgeScroll"       "1"
  Option          "VertScrollDelta"       "5"
  Option          "VertTwoFingerScroll"   "0"
  Option          "HorizTwoFingerScroll"  "0"
EndSection

Yet another possible setup here...

Section "InputDevice"
        Identifier      "Synaptics Touchpad"
        Driver          "synaptics"
        Option          "AlwaysCore"
       #Option          "Device"                "/dev/input/by-id/usb-Apple_Computer_Apple_Internal_Keyboard_._Trackpad-mouse"
        Option          "Device"                "/dev/input/mice"
        Option          "Protocol"              "auto-dev"
        Option          "HorizScrollDelta"      "0"
        Option          "SHMConfig"             "true"
        Option          "TouchpaddOff"          "0"
        # How fast the two-finger scrolling scrolls. The lower, the faster.
        Option          "VertScrollDelta"       "25"
        Option          "HorizScrollDelta"      "25"
        # Location of the touchpad edges, somewhat sane values
        # that I found by testing. Xmin=0, Xmax=1216, Ymin=0,Ymax=387
        Option          "LeftEdge"              "100"
        Option          "RightEdge"             "1116"
        Option          "TopEdge"               "50"
        Option          "BottomEdge"            "337"
        # Touch and "untouch" thresholds
        Option          "FingerLow"             "25"
        Option          "FingerHigh"            "50"
        # We DO NOT want palm triggering middle/right mouse
        # button events, so a tap has to be quite fast
        Option          "MaxTapTime"            "100"
        Option          "MaxTapMove"            "100"
        Option          "MaxDoubleTapTime"      "200"
        # Enable vertical (right) edge scrolling with one finger
        Option          "VertEdgeScroll"        "1"
        # Enable horizontal (bottom) edge scrolling with one finger
        Option          "HorizEdgeScroll"       "0"
        # Disable two finger scrolling, as we have the edge scrolling enabled already
        Option          "VertTwoFingerScroll"   "0"
        Option          "HorizTwoFingerScroll"  "0"
        # Left top corner of the touchpad shall be the middle mouse button
        # Bottom buttons tend to get triggered accidentally.
        Option          "LTCornerButton"        "2"
        # Right top corner of the touchpad shall be the right mouse button
        Option          "RTCornerButton"        "3"
        # Disable bottom corners
        Option          "LBCornerButton"        "0"
        Option          "RBCornerButton"        "0"
        # Fast taps
        Option          "FastTaps"              "0"
        # Disable tapping of the touchpad (excluding the corners, of course)
        Option          "TapButton1"            "0"
        Option          "TapButton2"            "0"
        Option          "TapButton3"            "0"
        # Movement speed settings
        Option          "MinSpeed"              "0.2"
        Option          "MaxSpeed"              "0.6"
        Option          "AccelFactor"           "0.35"
        # Palm detection. Does not seem to work on Macbook
        Option          "PalmDetect"            "1"
        Option          "PalmMinWidth"          "10"    #1-15
        Option          "PalmMinZ"              "200"   #1-255
        # Various other variables
        Option          "UpDownScrolling"       "0"
        Option          "LeftRightScrolling"    "0"
EndSection

To find out about the synaptics options, see synaptics(5).

It's advisable to run syndaemon after starting X, to prevent accidental taps while you're typing.

If you have problems with the old etch kernel (2.6.18), you can work around this by editing appletouch.c and rebuild the kernel:

1. Open /usr/src/your-linux-source/drivers/usb/input/appletouch.c and replace probably unused PRODUCT ID of older Japanese MacBook model:

#define GEYSER3_JIS_PRODUCT_ID  0x0219

with your MacBook ?Core2Duo one (For English model, in newer source as GEYSER4_ANSI_PRODUCT_ID 0x021A)

#define GEYSER3_JIS_PRODUCT_ID  0x021A

2. Now rebuild the kernel and reboot.

Now synaptics should work fine with all options for English ?Core2Duo model. (without this work around, it should work without tapping and scrolling). New 2.6.25 kernel in lenny should be fine without this kind of workaround for all ?Core2Duo models.

Infrared Receiver before lenny

Use the usual HID device; kernel patch available as of 2006-07-17.

If the appleir driver is also compiled as a module, change the line described in the keyboard section of this page to the following, so appletouch and appleir get loaded before usbhid:

install usbhid /sbin/modprobe appletouch; /sbin/modprobe appleir; /sbin/modprobe --ignore-install usbhid $CMDLINE_OPTS

Also add appleir to /etc/initramfs-tools/modules and re-run update-initramfs.

How to get the remote working in 10 steps :

1)I have downloaded this patch http://www.madingley.org/macmini/kernel/ir.patch and copied each piece of it into my kernel sources (most of it goes into appleir.c)

2)After that I have added "CONFIG_USB_APPLEIR=m" at the section "USB HID Boot Protocol drivers" in the .config file from the kernel source.

3)I have recompiled and installed the modules.

4)I have added "appleir" to /etc/modules to have it loaded at boot.

5)Reboot. If after reboot, the command

lsinput 2>&1 | grep "Mac mini"

does not give you any output, add the following line in /etc/modprobe.d/appleir :

install usbhid /sbin/modprobe appletouch; /sbin/modprobe appleir; /sbin/modprobe --ignore-install usbhid $CMDLINE_OPTS

and reboot.

6)I have installed lirc and lirc-x with apt-get

7)I have created /etc/lirc/lircd.conf with some infos found on the web :

# this config file was automatically generated
# using lirc-0.8.0(userspace) on Fri Oct 20 01:12:42 2006
#
# contributed by Michael Olson
#
# brand:                       APPLE_REMOTE
# model no. of remote control:
# devices being controlled by this remote: 1
#
  begin remote
    name  APPLE_REMOTE
    bits            8
    eps            30
    aeps          100
    one             0     0
    zero            0     0
    gap          135863
    pre_data_bits   24
    pre_data       0x800100
    toggle_bit      0
    begin codes
     KEY_MENU 0x8B
     KEY_PP 0xA4
     KEY_N 0xA3
     KEY_P 0xA5
     KEY_VU 0x73
     KEY_VD 0x72
    end codes
 end remote

8)I have changed the following lines in /etc/lirc/hardware.conf :

# Run "lircd --driver=help" for a list of supported drivers.
DRIVER="dev/input"
# If DEVICE is set to /dev/lirc and devfs is in use /dev/lirc/0 will
# be
# automatically used instead
DEVICE="/dev/input/event1"
MODULES=""
# Default configuration files for your hardware if any
LIRCD_CONF="/etc/lirc/lircd.conf"

The tricky part is that /dev/input/event1 is not correct, so we have to generate the correct input event at each reboot. I have installed "lsinput" and modified the startup script /etc/init.d/lirc, by adding the following lines just before ". /etc/lirc/hardware.conf" :

mac_input=$(lsinput 2>&1 | grep -B 5 "Mac mini" | head -n 1)
sed -i "s;DEVICE=\".*\";DEVICE=\"$mac_input\";" /etc/lirc/hardware.conf

Now everything should be fine.

9)To test if it works, write into ~/.lircrc :

  begin
    flags = startup_mode
    mode = irexec
  end
  begin irexec
    begin
     prog = irexec
     remote = APPLE_REMOTE
     button = KEY_N
     config = xmms
     repeat = 0
    end
  end irexec

and start irexec with "irexec -d".

Now if you press the "next" key on the remote it should open xmms (if you have it installed).

10) I have attached to this page my .lircrc file (see the attachments); Don't forget to start the irxevent and irexec with 'irxevent -d & irexec -d'. Feel free to copy and modify it as you wish. The config file uses 2 other scripts (also attached to this page), named show.sh and show_volume.sh; The scripts are displaying information on the screen as you play with your remote; you will also need to install xosd.

CPU Core Temperature Sensor (manual methods)

tool available from: http://mactel-linux.svn.sourceforge.net/viewvc/mactel-linux/trunk/tools/temperature/

You need to load the msr module before using the coretemp tool : modprobe msr, or put msr in /etc/modules to make the module load on every boot.

Download Makefile and coretemp.c.

$ make
$ sudo ./coretemp
CPU 0: 69 C
CPU 1: 69 C

$ sudo hddtemp /dev/sda
/dev/sda: ST98823AS: 38°C

Note: no sensors are detected below, just EEPROMs.

MacBook contains the 82801G (ICH7 Family) and ICH7 is supported by lm_sensors since sensors 2.9.0 by the i2c-i801 kernel driver which has been in the kernel since 2.6.11.

# sensors-detect revision 1.413 (2006/01/19 20:28:00)
...
Probing for PCI bus adapters...
Use driver `i2c-i801' for device 00:1f.3: Intel ICH7
Probe succesfully concluded.
We will now try to load each adapter module in turn.
Module `i2c-i801' already loaded.
If you have undetectable or unsupported adapters, you can have them
scanned by manually loading the modules before running this script.
 To continue, we need module `i2c-dev' to be loaded.
 If it is built-in into your kernel, you can safely skip this.
 i2c-dev is not loaded. Do you want to load it now? (YES/no): yes
 Module loaded succesfully.
 We are now going to do the adapter probings. Some adapters may hang halfway
 through; we can't really help that. Also, some chips will be double detected;
 we choose the one with the highest confidence value in that case.
 If you found that the adapter hung after probing a certain address, you can
 specify that address to remain unprobed. That often
 includes address 0x69 (clock chip).
Next adapter: SMBus I801 adapter at efa0
Do you want to scan it? (YES/no/selectively):
Client found at address 0x08
Client found at address 0x38
Probing for `Philips Semiconductors SAA1064'... Failed!
Client found at address 0x3a
Probing for `Philips Semiconductors SAA1064'... Failed!
Client found at address 0x44
Probing for `Maxim MAX6633/MAX6634/MAX6635'... Failed!
Client found at address 0x50
Probing for `SPD EEPROM'... Success!
    (confidence 8, driver `eeprom')
Probing for `DDC monitor'... Failed!
Probing for `Maxim MAX6900'... Failed!
Client found at address 0x52
Probing for `SPD EEPROM'... Success!
    (confidence 8, driver `eeprom')
Client found at address 0x69
....
Driver `eeprom' (should be inserted):
  Detects correctly:
  * Bus `SMBus I801 adapter at efa0'
    Busdriver `i2c-i801', I2C address 0x50
    Chip `SPD EEPROM' (confidence: 8)
  * Bus `SMBus I801 adapter at efa0'
    Busdriver `i2c-i801', I2C address 0x52
    Chip `SPD EEPROM' (confidence: 8)
I will now generate the commands needed to load the I2C modules.
To make the sensors modules behave correctly, add these lines to
/etc/modules:
#----cut here----
# I2C adapter drivers
i2c-i801
# I2C chip drivers
eeprom
#----cut here----
# uname -a
Linux coreduo 2.6.18-rc1dancer #2 SMP Sun Jul 9 09:57:01 JST 2006 i686 GNU/Linux