Debian su MacBook Pro

Da LinuxVar, il LUG della provincia di Varese.

Con questo How-To intendo spiegare rapidamente i passi per montare un sistema Debian bootabile e che riconosca praticamente tutto l'hardware di un MacBook Pro da 15" 2,2 (comprato a settembre 2006) (occhio che le configurazioni sono in certe parti differenti dal 17" e dalle altre versioni). Per scoprire che versione si ha:

dmidecode -s system-product-name

da amministratore.

Per qualsiasi errore, mancanza, dubbio scrivetemi pure a rev at voo dot it.

Contenuti

Cosa serve

  • un macbook pro :)
  • un cd debian net install, consiglio l'ultima testing
  • connessione ad internet
  • pangocciole, 2 direi

Hardware

Funzionante

  • X con accelerazione 3d (Driver proprietari o open)
  • audio casse interne, esterne e mic (Alsa)
  • ethernet
  • modifica illuminazione schermo e tastiera
  • sensori di luce, inclinazione e temperatura
  • tastiera e telecomando incluso
  • touchpad ottimizzato
  • masterizzare cd
  • bluetooth
  • iSight, webcam integrata
  • wifi

Non testato

  • Fireware

NON FUnzionante

Per ora non ho nulla da segnalare

Partizionamento e installazione

Bootare il sistema da macosx.
Installare rEFIt [1] bootloader che ci consentira' di gestire il boot separato di macosx e linux fatto per architetture EFI. Dalla console di macosx copiamo la dir efi contenuta nel pacchetto di installazione nella root dir di macosx e lanciamo

cd /efi/refit
./enable-always.sh

Installiamo ora il pacchetto Bootcamp [2] per MacOsX e seguire le istruzioni per il partizionamento come se si volesse installare Win...Win....Windows (ok, scusate, ma l'idea di Windows sul Mac... brrr...). Quindi con bootcamp creiamo una partizione di dimensione adeguata per Linux, alla richiesta di inserire il cd di Windows inseriamo invece quello di Debian (carino no?), il ristema rebootera'.
A questo puto il cd di debian bootera' automaticamente. Seguire la normale procedura di installazione fino al momento di partizionare, qui io ho optato per un'unica partizione (la swap sara' un file) ma volendo potete farne anche due e usarne una come swap (il perche' farne una sola e' spiegato qui [3]).
Procediamo normalmente fino al momento di installare il bootloader, a questo punto con ctrl+f2 andiamo sulla console e apt-gettiamo rEFIt

chroot /target apt-get install refit
/target/sbin/gptsync /dev/sda

che sincronizzera' la partition table sul gpt e sull'mbr.
Questo e' un esempio del mio partizionamento dopo aver eseguito gptsync

Current GPT partition table:
 #      Start LBA      End LBA  Type
 1             40       409639  EFI System (FAT)
 2         409640     75907111  Mac OS X HFS+
 3       76169256    234441607  EFI System (FAT)

Current MBR partition table:
 # A    Start LBA      End LBA  Type
 1              1       409639  ee  EFI Protective
 2         409640     75907111  af  Mac OS X HFS+
 3 *     76169256    234441607  ef  EFI System (FAT)

Torniamo alla console d'installazione con ctrl+F1 e installiamo LILO (non grub!) e installiamolo all'inizio della partizione (NON NELL'MBR!). Completiamo l'installazione e reboot, al boot dovrebbe esserci rEFIt che ci consente di accede a MacOsX o Debian :)

Nota sulla partizione di Swap

Ho fatto successivi test aggiungendo anche la partizione di swap e il sistema sembra funzionare correttamente. In caso voleste procedere in questo modo perche' avere il file di swap vi da' particolarmente fastidio (anche se parlandoci chiaramente nn credo che serva piu' di tanto avere la swap su una macchina come questa) bisogna creare un'altra partizione da macosx di 2 GB oltre quella per linux, per crearle tutte e due senza usare bootcamp si puo' dare il comando

sudo diskutil resizeVolume disk0s2 100G "Swap" <name of swap volume> 2G "Linux" <name of linux volume> 50G

Alternativamente ne create una con bootcamp e una con il comando senza la parte della seconda partizione. Ovviamente piu' avanti non servira' seguire i passaggi per creare il file di swap.

Configurazione Debian

Alcuni passaggi standard:

  • montare la aprtizione di MacOsX aggiungendo all'fstab la linea
/dev/sda2	/mnt/macosx	hfsplus defaults 0 0

e modificare la linea per il cdrom con

/dev/scd0        /media/cdrom0   udf,iso9660 user,noauto     0       0
  • creare la partizione di swap se si e' deciso di fare una sola partizione
dd if=/dev/zero of=/swap bs=1024 count=2097152
mkswap /swap
swapon /swap

Kernel

Consiglio di installare l'ultimo kernel disponibile con la relativa patch mactel-linux reperibile su mactel-linux.org [4] o con

svn co https://svn.sourceforge.net/svnroot/mactel-linux mactel-linux

Ora rebootiamo con il nuovo kernel cosi' da non avere problemi quando usieremo module-assistant nel riconoscimento della versione del kernel attiva.

UPDATE: Installato il kernel 2.6.21.4 che dovrebbe essere piu' ottimizzato per il risparmio energetico e per altri aspetti, pero' se si una questa verisone e' necessario aggioranre alla unstable i seguenti pacchetti: fglrx-control_8.37.6-1_i386.deb fglrx-driver-dev_8.37.6-1_i386.deb libiw29_29~pre21-2_i386.deb fglrx-driver_8.37.6-1_i386.deb fglrx-kernel-src_8.37.6-1_i386.deb wireless-tools_29~pre21-2_i386.deb. Ovvero i pacchetti per i driver accelerati ATI e quelli del wireless-tool (ecco il .config per questa versione del kernel File:Config-2.6.21.4.gz che ho compilato per processori a 64 bit usando l'ARCH=x86_64 come parametro nel 'make menuconfig').

UPDATE: Installato il kernel 2.6.22-4 dai repository debian, patchato con mactel per far andare il touchpad e runnato con questo config File:Config-2.6.22.gz

CDROM

Con il kernel 2.6.25 disabilitiamo tutta la sezione relativa ai dispositivi IDE e il modulo ata_piix gestira' sia hd che cdrom. Da questa versione del kernel infatti per i controller che usano piix e sono sia ide (o pata) sia sata non si puo' piu' caricare 2 driver distinti ma ata_piix gestisce tutte e due le cose.

Suspend 2 RAM

Con il kernel 2.6.22 della debian e con il pacchetto uswsusp basta lanciare il comando

s2ram -f

e tutto si ferma fino a che non riapriamo il monitor del nostro mac book pro :)

Framebuffer

Una volta attivata nel kernel l'opzione per il vesafb aggiugnere al lilo.conf la riga: vga=0x317 per avere il boot con il pinguinozzo.

X e accelerazione 3D

Driver Open

Dalla configurazione che ho postato con il kernel 2.6.29 sono passato ai driver open. Bisogna fare delle modifiche a livello del file di configurazione di xorg (vedi relativa sezione) e apt-gettare qualche pacchetto tipo "firmware-linux".

Metodi per vedere se l'accelerazione e' abilitata: lanciare "driconf", lanciare "glxinfo | grep vendor" e dobbiamo avere SGI altrimenti potrebbero esserci dei residui di driver proprietari che rompono, lanciare "glxinfo | grep direct\ rendering". Controllare anche l'output di xvinfo.

Driver Closed

Serviranno dei driver proprietari ATI, editare quindi il source.conf dell'apt e inserire alla fine del proprio repository "contrib non-free".
Installiamo ora i pacchetti necessari:

apt-get install fglrx-driver fglrx-control fglrx-kernel-src

e quindi eseguiamo (apt-gettarlo se non fosse installato)

module-assistant

in module-assistant fare il prepare e l'updare, cercare quindi nel select il modulo fglrx e crearlo, la procedura e' intuitiva:). Dovremmo ora avere il nostro modulo fglrx pronto, carichiamolo ed eseguiamo

aticonfig --initial

per creare un file xorg.conf adatto. Rebootiamo X e controlliamo che sia tutto ok con

fglrxinfo

che dovrebbe restituire

Display: :0.0 screen: 0
OpenGL vendor string: ATI Technologies Inc.
OpenGL renderer string: ATI Mobility Radeon X1600 Generic
OpenGL version string: 2.0.5879 (8.26.18)

evviva X accelerato!
Ora dopo aver fatto un paio di partite al vostro gioco, avviamente 3d, preferito per gustare la potenza del nuovo mac passiamo al resto.

Per sicurezza allego il mio xorg.conf File:Xorg.conf.gz

Audio

Usare l'ultima versione dei driver alsa (io ho la 1.0.5) e kernel almeno alla versione 2.6.18.


Ecco come leggere i canali a disposizione:

  • PCM channel changes overall volume
  • Center and LFE channels change volume of headphones output left and right (which is at the jack labled as line in!)
  • Front channels change volume for the external speaker
  • Line in (only toggling mute possible) enables/disables built-in speakers
  • IEC958 enables/disables optical IO on jack labled as headphones

UPDATE: il problema del fastidioso rumore che si sentiva dal canale sinistro di ogni output e' stata risolta passando al kernel 2.6.25.

UPDATE: Con il kernel 2.6.25 anche i canali sono stati messi a posto e ora si usa solo il "Principale" per le cuffie, "Front" per gli altoparlanti interni e "PCM" il generale.

UPDATE: il problema che inserendo le cuffie l'audio continua ad essere emesso dagli altoparlanti del pc (tranne che se si boota con le cuffie gia' inserite) e' risolto passando alla versione 2.4.21.4 del kernel

WiFi

ath9k

Con il kernel 2.6.29 il driver ath9k funziona perfettamente senza bisogno di ulteriori maneggiamenti.

Ndiswrapper

Questa e' un po' sporca ma alla fine funziona:
Prima di tutto scarichiamo il driver per windows per la Atheros AR5008 File:NET5416.INF.gz.
Quindi installiamo i pacchetti che ci servono:

apt-get install ndiswrapper-source ndiswrapper-utils-1.9
m-a

ora, come per i driver ati, creiamo il modulo del kernel mediante module-assistan slezionando ndiswrapper questa volta. Quindi

ndiswrapper -i Driver/NET5416.INF #dove questo file e' quello prima scaricato
depmod -a
modprobe ndiswrapper

la scheda dovrebbe essere up and running :) ... proviamola con iwconfig.

MadWiFi

Funzionante con l'ultima versione di madwifi ma solo il WPA non riesco ancora a far andare il WEP. Ecco come ho fatto:

cd /usr/src/
svn checkout http://svn.madwifi.org/trunk madwifi
cd madwifi
make
make install

d'ora in poi per caricare wireless serve il modulo ath_pci e poi i comandi

ifconfig wlan0 up
wpa_supplicant -c /etc/wpa_supplicant/wpa_supplicant.conf -i wlan0 -Dmadwifi &
dhclient wlan0

avendo avuto la premura di settare un degno wpa_supplicant.conf del tipo

ctrl_interface=/var/run/wpa_supplicant
ctrl_interface_group=1000
update_config=1

network={
    ssid="NOME DELLA RETE"
    psk="WPA PASS PHRASE"
    proto=WPA
    key_mgmt=WPA-PSK
    pairwise=CCMP TKIP
}

per disinstallare tutto c'e' un comodo make uninstall.

Webcam

Allora, non e' difficile:

apt-get install linux-uvc-source linux-uvc-tools

installare il modulo uvc con module-assistant lanciando

m-a prepare
m-a a-i linux-uvc

poi prelevare il firmware dalla partizione di MacOsX e caricare il modulo

mkdir /mnt/macosx
mount -t hfsplus /dev/sda2 /mnt/macosx/
macbook-isight-firmware-loader /mnt/mac/System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/AppleUSBVideoSupport.kext/Contents/MacOS/AppleUSBVideoSupport
modprobe uvcvideo

provate se tutto funziona con ekiga. Date anche un occhio al README.Debian in /usr/src/modules/linux-uvc/debian/.

Se non comparisse al device /dev/vide0 si puo' risolvere con l'uvc patchato scaricabile da http://i-nz.net/projects/linux-kernel/. Se compilando restituisce un errore del tipo "1442: error: 'struct video_device' has no member named 'hardware'" basta depennare la riga 1442 dal codice. Funzionano sia ekiga e skype.

UPDATE: con gli ultimi kernel (sicuramente con dal 2.6.25) il driver uvc video e' incluso nel kernel, quindi non serve piu' fare i precedenti maneggiamenti.

Keyboard

Rimappiamo la tastiera in console e in X, compresi i tasti del telecomando. Per fare questo teniamo d'occhio qui [5] e usiamo il comando xev per sapere a quale tasto corrisponde quale keycode in X.

Questo e' il contenuto del mio file .Xmodmap che carico all'avvio di X:

!!testo centrale
keycode 162 = Return
!!tasto menu
keycode 158 = space
!! tasti su giu dx sx
keycode 176 = Up
keycode 174 = Down
keycode 144 = Right
keycode 153 = Left

!! rimappo ~
keycode 49 = section plusminus
keycode 94 = grave asciitilde

!! euro e beta
keysym e = e E EuroSign
keysym b = b B ssharp

!! mela
keycode 133 = Super_L
keycode 134 = Mode_switch

clear mod1
add mod1 = Alt_L
add mod1 = Super_L

clear mod2
add mod2 = Num_Lock

clear mod3
clear mod4
clear mod5

Mentre per settare quantomeno i tasti § e ` correttamente sulla console e attivare l'altgr con la mela destra modifichiamo /etc/console-tools/remap inserendovi

s/keycode  41 = grave            asciitilde/keycode  41 = section           plusminus/;
s/keycode  86 = less             greater          bar/keycode  86 =  grave            asciitilde/;
s/keycode 126 =/keycode 126 = AltGr/;

UPDATE: inserico un xmodmap.it completo datomi da Stefano D'Alessio File:Xmodmap.it.gz.

Touchpad

Servono i moduli (e devono essere moduli, non compialti monoliticamente nel kernel) chiamati: usbhid e appletouch. Il problema e' che il modulo appletouch deve essere caricato PRIMA dell'usbhid (stessa cosa per l'appleir), per far in modo che cio' avvenga sempre, aggiungiamo un file chiamato touchpad al /etc/modprobe.d e contenente

install usbhid /sbin/modprobe appletouch; /sbin/modprobe appleir; sleep 2; /sbin/modprobe --ignore-install usbhid

Nell'xorg.conf la sezione riguardante il mouse e':

Section "InputDevice"
       Identifier      "Touchpad"
       Driver          "synaptics"
       Option          "CorePointer"
       Option          "Device"                "/dev/input/mouse1"
       Option          "Protocol"              "auto-dev"
       Option  "LeftEdge"      "100"
       Option  "RightEdge"     "1120"
       Option  "TopEdge"       "50"
       Option  "BottomEdge"    "310"
       Option  "FingerLow"     "25"
       Option  "FingerHigh"    "30"
       Option  "MaxTapTime"    "180"
       Option  "MaxTapMove"    "220"
       Option  "MaxDoubleTapTime"      "180"
       Option  "VertScrollDelta"       "20"
       Option  "HorizScrollDelta"      "50"
       Option  "MinSpeed"      "0.79"
       Option  "MaxSpeed"      "0.88"
       Option  "AccelFactor"   "0.0015"
       Option  "SHMConfig"     "on"
EndSection

Illuminazione schermo, tastiera, sensori e tasti rapidi

Nicolas Boichat ha scritto dei driver per l'illuminazione di schermo e tastiera reperibili qui [6].
L'installazione e':

wget http://www.boichat.ch/nicolas/macbook-tools/macbook-tools-0.1.1.tar.bz2
tar xvfj macbook-tools-0.1.1.tar.bz2
cd macbook-tools-0.1.1
make

e proviamo i 2 eseguibili, sono di semplice utilizzo e la loro funzione e' intuitiva.
Per i sensori della temperatura sull'hd usare

apt-get install hddtemp
hddtemp /dev/sda

mentre per quelli sulle cpu usare

svn co https://svn.sourceforge.net/svnroot/mactel-linux mactel-linux
cd mactel-linux/trunk/tools/temperature/
make
modprobe msr # controllate di averlo abilitato nel kernel
./coretemp

Per la gestione automatica dell'illuminazion e della tastiera, nonche' per i tasti che settano la luminosita' del monitor consiglio di installare 'pommed' con l'accorgimento pero' di disabilitare le funzioni che sono gia' ricoperte da gnome o da acpi (quindi l'eject, il controllo del volume -settando lo step a 0- e il cambio di luminosita' se siamo in modalita' batteria). Questi cambiamenti intuitivi si fanno nell'/etc/pommed.conf.

ACPI e Powersafe

Power settings

Ho reperito in rete e modificato ad hoc per debian un paio di script utili che migliorano la durata della batteria. Basta posizionarli nella giusta directory. Il comando che compare ad un certo punto 'mac_monitor' e' uno dei due prog che reperiamo installando i macbook-tools.

/etc/acpi/power.conf

# config for acpi-power

# LIGHT: backlight brightness
# P: CPU P state. see /proc/acpi/processor/CPU?/limit
# T: CPU T state (throttling). see /proc/acpi/processor/CPU?/throttling
# CPU: online state of second core (0=off, 1=on)
# GOV: CPU freq scaling governor. see /sys/devices/system/cpu/cpu?/cpufreq/scaling_available_governors
# GOV_MIN/MAX: CPU freq frequencies. see /sys/devices/system/cpu/cpu?/cpufreq/scaling_available_frequencies
# LID_SUSPEND: 1=suspend when lid closed

# when on batteries
BAT_LIGHT=155
BAT_P=0
BAT_T=2
BAT_CPU=0
BAT_GOV=ondemand
BAT_GOV_MIN=1000000
BAT_GOV_MAX=1500000

# when on AC
AC_LIGHT=255
AC_P=0
AC_T=0
AC_CPU=1
AC_GOV=performance
AC_GOV_MIN=1000000
AC_GOV_MAX=2167000

# when lid closed
LID_SUSPEND=1
LID_LIGHT=0
LID_P=0
LID_T=7
LID_CPU=0
LID_GOV=powersave
LID_GOV_MIN=1000000
LID_GOV_MAX=1000000

/etc/acpi/battery.d/macbookpro-bat.sh (renderlo eseguibile)

#!/bin/sh

source /etc/acpi/power.conf

    # on batteries
    LIGHT=${BAT_LIGHT}
    P=${BAT_P}
    T=${BAT_T}
    C=${BAT_CPU}
    GOV=${BAT_GOV}
    GOV_MIN=${BAT_GOV_MIN}
    GOV_MAX=${BAT_GOV_MAX}

# control backlight
/usr/bin/mac_monitor ${LIGHT}

# power up/down second CPU
STATE=$(cat /sys/devices/system/cpu/cpu1/online)
if [ "${STATE}" != "${C}" ]; then
  echo ${C} > /sys/devices/system/cpu/cpu1/online # da quando ho il kernel 2.6.21.4 a volte provoca un crash di X
fi

# throttle CPUs and set governors
echo -n ${P}:${T} > /proc/acpi/processor/CPU0/limit
echo ${GOV} > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# must first set max, then min!
echo ${GOV_MAX} > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo ${GOV_MIN} > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
if [ "${C}" = "1" ]; then
  echo -n ${P}:${T} > /proc/acpi/processor/CPU1/limit
  echo ${GOV} > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
  # must first set max, then min!
  echo ${GOV_MAX} > /sys/devices/system/cpu/cpu1/cpufreq/scaling_max_freq
  echo ${GOV_MIN} > /sys/devices/system/cpu/cpu1/cpufreq/scaling_min_freq
fi

/etc/acpi/ac.d/macbookpro-ac.sh (renderlo eseguibile)

#!/bin/sh

source /etc/acpi/power.conf

    # on AC
    LIGHT=${AC_LIGHT}
    P=${AC_P}
    T=${AC_T}
    C=${AC_CPU}
    GOV=${AC_GOV}
    GOV_MIN=${AC_GOV_MIN}
    GOV_MAX=${AC_GOV_MAX}

# control backlight
/usr/bin/mac_monitor ${LIGHT}

# power up/down second CPU
STATE=$(cat /sys/devices/system/cpu/cpu1/online)
if [ "${STATE}" != "${C}" ]; then
  echo ${C} > /sys/devices/system/cpu/cpu1/online # da quando ho il kernel 2.6.21.4 a volte provoca un crash di X
fi

# throttle CPUs and set governors
echo -n ${P}:${T} > /proc/acpi/processor/CPU0/limit
echo ${GOV} > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# must first set max, then min!
echo ${GOV_MAX} > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo ${GOV_MIN} > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
if [ "${C}" = "1" ]; then
  echo -n ${P}:${T} > /proc/acpi/processor/CPU1/limit
  echo ${GOV} > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
  # must first set max, then min!
  echo ${GOV_MAX} > /sys/devices/system/cpu/cpu1/cpufreq/scaling_max_freq
  echo ${GOV_MIN} > /sys/devices/system/cpu/cpu1/cpufreq/scaling_min_freq
fi

Mentre per aggiugnere un paio di funzioni quando viene chiuso lo schermo bisogna modificare il file /etc/acpi/lid.sh (aggiugnendo le righe)

############# parte aggiutna da revoltek
grep -q closed /proc/acpi/button/lid/*/state
if [ $? = 0 ]
then
   . /etc/acpi/lid.d/macbookpro-lid-close.sh # aggiunto da revOltek
else
   . /etc/acpi/lid.d/macbookpro-lid-open.sh # aggiunto da revOltek
fi

e poi creare la dir lid.d contenente i due file /atc/acpi/lid.d/macbookpro-lid-open.sh (renderlo eseguibile)

#!/bin/sh

source /etc/acpi/power.conf

grep -q off-line /proc/acpi/ac_adapter/ADP1/state
if [ $? = 1 ]
then
    # on AC
    LIGHT=${AC_LIGHT}
    P=${AC_P}
    T=${AC_T}
    C=${AC_CPU}
    GOV=${AC_GOV}
    GOV_MIN=${AC_GOV_MIN}
    GOV_MAX=${AC_GOV_MAX}
else
    # on batteries
    LIGHT=${BAT_LIGHT}
    P=${BAT_P}
    T=${BAT_T}
    C=${BAT_CPU}
    GOV=${BAT_GOV}
    GOV_MIN=${BAT_GOV_MIN}
    GOV_MAX=${BAT_GOV_MAX}
fi

# control backlight
/usr/bin/mac_monitor ${LIGHT}

# power up/down second CPU
STATE=$(cat /sys/devices/system/cpu/cpu1/online)
if [ "${STATE}" != "${C}" ]; then
  echo ${C} > /sys/devices/system/cpu/cpu1/online # da quando ho il kernel 2.6.21.4 a volte provoca un crash di X
fi

# throttle CPUs and set governors
echo -n ${P}:${T} > /proc/acpi/processor/CPU0/limit
echo ${GOV} > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# must first set max, then min!
echo ${GOV_MAX} > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo ${GOV_MIN} > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
if [ "${C}" = "1" ]; then
  echo -n ${P}:${T} > /proc/acpi/processor/CPU1/limit
  echo ${GOV} > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
  # must first set max, then min!
  echo ${GOV_MAX} > /sys/devices/system/cpu/cpu1/cpufreq/scaling_max_freq
  echo ${GOV_MIN} > /sys/devices/system/cpu/cpu1/cpufreq/scaling_min_freq
fi

/atc/acpi/lid.d/macbookpro-lid-close.sh (renderlo eseguibile)

#!/bin/sh

source /etc/acpi/power.conf

    # lid closed
    LIGHT=${LID_LIGHT}
    P=${LID_P}
    T=${LID_T}
    C=${LID_CPU}
    GOV=${LID_GOV}
    GOV_MIN=${LID_GOV_MIN}
    GOV_MAX=${LID_GOV_MAX}

# control backlight
/usr/bin/mac_monitor ${LIGHT}

# power up/down second CPU
STATE=$(cat /sys/devices/system/cpu/cpu1/online)
if [ "${STATE}" != "${C}" ]; then
  echo ${C} > /sys/devices/system/cpu/cpu1/online
fi

# throttle CPUs and set governors
echo -n ${P}:${T} > /proc/acpi/processor/CPU0/limit
echo ${GOV} > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
# must first set max, then min!
echo ${GOV_MAX} > /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
echo ${GOV_MIN} > /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
if [ "${C}" = "1" ]; then
  echo -n ${P}:${T} > /proc/acpi/processor/CPU1/limit
  echo ${GOV} > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
  # must first set max, then min!
  echo ${GOV_MAX} > /sys/devices/system/cpu/cpu1/cpufreq/scaling_max_freq
  echo ${GOV_MIN} > /sys/devices/system/cpu/cpu1/cpufreq/scaling_min_freq
fi

Ventole

Aggiungo in ultimo un codice che ho scritto io per controllare rapidamente le ventole del nostro MBP (necessita dell'applesmc nel kernel abilitato)

#!/bin/sh

DIR=/sys/devices/platform/applesmc
MANUAL1=$DIR/fan1_manual
MANUAL2=$DIR/fan2_manual
POS1=$DIR/fan1_position
POS2=$DIR/fan2_position
GET1=$DIR/fan1_input
GET2=$DIR/fan2_input
SET1=$DIR/fan1_output
SET2=$DIR/fan2_output
MAX1=$DIR/fan1_min
MAX2=$DIR/fan2_min
MIN1=$DIR/fan1_max
MIN2=$DIR/fan2_max

# Default output
if [ x$1 == 'x' ]; then
        echo "Use mac_ventole fan_speed [or \"auto\" for the automatic mode]"
        echo "Actual speed are:"
        actual_speed1=`cat $GET1`
        position1=`cat $POS1`
        echo "Fan 1 ($position1): $actual_speed1"
        actual_speed2=`cat $GET2`
        position2=`cat $POS2`
        echo "Fan 2 ($position2): $actual_speed2"
        exit
fi

# Set to auto mode
if [ $1 == 'auto' ]; then
        if [ `cat $MANUAL1` == '1' ]; then
                echo "0" > $MANUAL1
        fi
        if [ `cat $MANUAL2` == '1' ]; then
                echo "0" > $MANUAL2
        fi
else
        # Set to manual mode fan1
        if [ x`echo $1 | egrep ^[0-9]+$` != 'x' ]; then
                if [ $1 -le `cat $MIN1` -a $1 -ge `cat $MAX1` -a $1 -le `cat $MIN2` -a $1 -ge `cat $MAX2` ]; then
                        if [ `cat $MANUAL1` == '0' ]; then
                                echo "1" > $MANUAL1
                        fi
                        if [ `cat $MANUAL2` == '0' ]; then
                                echo "1" > $MANUAL2
                        fi
                        echo "$1" > $SET1
                        echo "$1" > $SET2
                else
                        echo "Range for fan 1 is `cat $MIN1` t  `cat $MAX1`."
                        echo "Range for fan 2 is `cat $MIN2` t  `cat $MAX2`."
                fi
        else
                echo "Must be a number!"
        fi
fi

salviamolo in un file eseguibile e poi mettiamolo in /usr/bin/.

Qualcuno di voi si sara' accorto che il suo MBP ha sempre le ventole a palla se le lasciamo in modalita' "auto". Questo e' dovuto al fatto che la temperatura del pc e' mediamente molto alta, un buon modo per ridurre questo problema e' quello di mettere in modalita' "risparmio energetico" la scheda video (questo permette anche di allungare un po' la dirata da batteria). Per fare cio' di dovrebbe usare 'radeontool' ma e' buggato e per farlo necessitiamo un'apposito radeontool patchato reperibile qui http://www.g2inf.one.pl/~anszom/MBP-ATI/ mediante il quale si possono lanciare i comandi:

sudo ./radeontool power status
sudo ./radeontool power low
sudo ./radeontool power full

dal significato evidente. Consiglio di aggiungere il secondo di questi comandi ad uno script di boot.

Power button

Un ultimo aspetto, dato che e' una noia che quando premo il bottone di accensioni mi si spenga il pc senza chiedere nulla ho modificato lievemnte l'/etc/acpi/powerbtn.sh aggiungendo:

if ! ps -Af | grep gnome-power-manager
then
    /sbin/shutdown -h now "Power button pressed"
fi

al posto della sola riga di shutdown, di modo che se gnome-power-manager e' attivo ci pensa lui a beccare la pressione del bottone.

AIGLX, Compiz, Kiba e altre zarrate

Compiz-fusion

Per avere il cubo sul nostro sistema innanzi tutto sono necessari i driver proprietari ATI (vedi sezione scheda video) dalla versione 8.42.3 in poi. Questa versione supporta l'estensione per aiglx presente da xorg 7.1 e permette di avere un desktop accelerato. Installata questa versione dei draiver occorre utilizzare un repository che contenga le ultime versioni di compiz e altro software utile ovvero: deb http://download.tuxfamily.org/osrdebian unstable compiz-fusion-git, notare che questo repository contiene pacchetti per la unstable con dipendense quindi che si ttrovano in debian sid. A questo punto apt-gettiamo compiz-core e gli altri pacchetti che ci piacciono e diciamo a gnome ad ogni avvio di far partire un "compiz --replace".

Ecco il mio file di configurazione per compiz File:Compiz-setting.profile.gz.

NOTA: se c'e' copiz attivo tutti i programmi 3d mi sbarluccicano, nel senso che noto il refresh dello schermo. Per evitare il problema se si vuole usare un programma accelerato basta sospendere momentanamente compiz con "metacity --replace" e poi in caso riavviarlo dopo il match a openarena :).

Emerald

Installate anche emerald che fa da decoratore di finestre ed e' decisamente carino.

Allego il mio file di configurazione per emerald File:Emerald-setting.gz.

Kiba Dock

Per isntallare kiba dock bisogna partire dai sorgenti in quanti i pacchetti non sono ancora disponibili.

sudo aptitude install fakeroot automake1.9 build-essential libpango1.0-dev libgtk2.0-dev libgconf2-dev  libglitz-glx-dev  librsvg2-dev libglade2-dev libxcomposite-dev subversion libtool libgtop2-dev python-gtk2-dev intltool pidgin-dev

mkdir kiba-dock
cd kiba-dock
svn co https://kibadock.svn.sourceforge.net/svnroot/kibadock/trunk/akamaru/ akamaru
svn co https://kibadock.svn.sourceforge.net/svnroot/kibadock/trunk/kiba-dock/ kiba-dock
svn co https://kibadock.svn.sourceforge.net/svnroot/kibadock/trunk/kiba-plugins/ kiba-plugins
svn co https://kibadock.svn.sourceforge.net/svnroot/kibadock/trunk/kiba-dbus-plugins/ kiba-dbus-plugins
svn co https://kibadock.svn.sourceforge.net/svnroot/kibadock/trunk/kiba-gaim-plugin kiba-gaim-plugin

e quindi installiamo uno alla volta i sorgenti dopo averli compilati

cd akamaru/
./autogen.sh --prefix=/usr --exec-prefix=/usr
make; make install
cd ..
cd kiba-dock/
./autogen.sh
make; make install 
cd ..
cd kiba-plugins/
./autogen.sh
make' make install 
cd ..
cd kiba-dbus-plugins/
./autogen.sh
make; make install
cd ..
cd kiba-gaim-plugins/
./autogen.sh
make; make install
cd ..

Consiglio infine di tenere sottomano questi sorgenti cosicche' da poter disinstallare il pacchetto con "make uninstall".

Allego anche il config di kiba da posizionare in ~/.kiba/config File:Kiba-setting.gz.

Config File

Allego di seguito alcuni dei file di configurazione del sistema.

/etc/fstab

# /etc/fstab: static file system information.
#
# <file system> <mount point>   <type>  <options>       <dump>  <pass>

proc            /proc           proc    defaults        0       0
/dev/sda4       /               ext3    defaults,errors=remount-ro 0       1
/dev/sda3       none            swap    sw              0       0
/dev/scd0        /media/cdrom0  iso9660 user,noauto,ro  0       0
/dev/sda2       /mnt/macosx     hfsplus ro,exec,auto,users      0       0

/etc/lilo.conf

large-memory
boot=/dev/sda4
root=/dev/sda4
compact
lba32
map=/boot/map
timeout=20
vga=extended
default=Linux

image=/vmlinuz
        label=Linux
        read-only

image=/vmlinuz.old
        label=LinuxOLD
        read-only
        optional

/etc/X11/xorg.conf

Allego il file direttamente [7].

/usr/src/linux/.config

Controllare la sezione relativa al kernel, ne ho generati di diversi nel corso del tempo:).

Link utili

Xgl e Compiz

Rescue in caso di problemi

In caso qualcosa vada decisamente storto (se per esempio sbagliamo a ricompilare il kernel, ci panika al boot e furbescamente non abbimo una versione del kernel funzionante accessibile da lilo... ok, lo ammetto, l'ho fatto) si puo' sempre recuperare una precedente installazione bootando il pc con inserito il cd d'installazione di Debian e quindi bootare in modalita' rescue. A questo punto montare la partizione dove abbiamo piazzato il nostro sistema ed eseguire una shell cercando di riparare il riparabile :). Devo pero' sottolineare un fatto isolito, non mi e' chiaro come mai molto spesso al boot la tastiera del portatile non viene ricopnosciuta e quindi non si puo' far partire l'installazione, riavviando pero' dopo un po' di volte sembra funzionare... se qualcuno avesse una spiegazione mi farebbe molto piacere capire il perche' (in rete ho letto che e' possibile bypassare il problema con una tastiera esterna USB, pero' non ho porvato).

---

fine della rapida spiega, spero che sia stata utile, ciao:)

Francesco De Gasperin - revOltek

fdg at voo dot it

http://voo.it

Strumenti personali