January 30, 2010
[bardo@forty-two ~]$ uprecords -sm1
# Uptime | System Boot up
----------------------------+---------------------------------------------------
-> 1 25 days, 00:39:39 | Linux 2.6.32-ARCH Sun Jan 3 15:34:58 2010
Un peccato dover riavviare
Fastidio a parte, questo significa che la nuova beta dei driver nvidia ha finalmente risolto il fastidioso problema che freezava il sistema, e finalmente arch è rock stable
E questo 2.6.33, poi, non vedo l’ora che esca, sto testando la rc6 e mi gusta assai, in particolare per l’attesissima introduzione della headphone detection sui Macbook 5,1 e 5,2.
Posted by bardo under arch, g33k1ng around, | | Comments (2)
June 28, 2009
Chi ha regolarmente la malaugurata idea di leggere i ChangeLog del kernel sa bene di cosa sto parlando: dopo un po’ va insieme la vista e l’intera operazione diventa una sofferenza. Quelli delle rc1 in particolare sono decisamente corpose (l’ultimo supera i 5MB di testo non compresso, per un totale di 8739 commit spalmati in 140663 umili righe): la lettura diventa presto qualcosa di impossibile, dato che l’occhio comincia a saltellare su e giù e dopo un po’ dà forfait.
In questo ci viene d’aiuto il buon vecchio vim: prima di tutto per il testo bianco su sfondo nero, che è decisamente più riposante dell’opposto se usato con un font decente. In proposito consiglio terminus (pacman -S terminus-font), un monospace pensato appositamente per i terminali che mantiene un’ottima leggibilità anche in queste condizioni, in corpo 8 per chi ha la vista buona come il sottoscritto, 10 per gli altri. Poi c’è la syntax highlighting, che rende molto più facile il gioco della caccia al commit, da usare regolarmente in congiunzione con la linea set background=dark in /etc/vimrc o in ~/.vimrc per avere il giusto contrasto di colore.
Tutto questo è un buon inizio, resta il problema del saltellamento del bulbo oculare, la vera piaga di tutta la faccenda. Mentre si delineava nella mia testa tutto questo bel giochino ho pensato che un semplice /^commit seguito da tante n sarebbe bastato, e invece no: il cursore va a piazzarsi a fondo pagina, col risultato che vedo solo l’id del commit perdendomi completamente il contenuto. Essendo un utente medio di vim conosco qualche comandino da tastiera, ma non mi sono mai lanciato nell’uso avanzato. Mi sono quindi messo alla ricerca di un modo per far sì che la riga che matcha diventasse la prima della pagina, in modo da avere sempre la descrizione nello stesso punto e risparmiarmi una pupilla che sembra muoversi di moto browniano. E l’ho trovato.
Per far sì che la riga del cursore venga messa in cima alla pagina basta premere zt in modalità comandi. Dato che premere nzt 8739 volte non mi attirava granché, ho pensato di attivare un mapping che mi consentisse di usare un solo tasto per fare tutto. E dunque, ecco svelato l’arcano:
:nmap n nzt
Una volta fatto ciò, ad ogni pressione di n sarà come aver premuto in sequenza i tasti nzt, e dopo aver lanciato la ricerca (/^commit, come si diceva) potremo usare questo tasto per navigare comodamente il ChangeLog.
Posted by bardo under arch, g33k1ng around | Comments (4)
June 21, 2009
Torno ancora sull’argomento perché negli ultimi due kernel sono state introdotte novità interessanti. La prima e indubbiamente più importante è l’integrazione, nella versione 2.6.30, delle patch per il supporto multitouch e del driver bcm5974. Grazie a questo cambiamento finalmente il supporto per il trackpad è disponibile nativamente, e possiamo togliere la patch dal nostro PKGBUILD!
In aggiunta ho scoperto da poco che qualcuno ha scritto finalmente una patch per ALSA 1.0.19 (ma comunque compatibile con la 1.0.20) che integra il supporto ai MacBook 5,1. Sono quindi utilizzabili tutti i canali audio, anche se i controlli non sono ancora il massimo della vita. La scheda dovrebbe essere automaticamente riconosciuta per i 5,1; i 5,2 hanno una scheda simile, e il riconoscimento può essere forzato inserendo la riga “options snd_hda_intel model=mb5″ in /etc/modprobe.d/modprobe.conf. Attenzione a chi prima aveva impostato il parametro model=mbp, quella linea va eliminata perché tutto funzioni correttamente.
Ma andiamo a vedere i controlli. Nell’immagine che segue possiamo vedere come si presenta il mixer con il kernel 2.6.30.

Al momento non è supportata la headphone detection, quindi esistono tre switch principali: PCM, ovvero il controllo volume principale, Master, che controlla l’uscita dalle casse integrate, e HP, che controlla l’uscita cuffie. È da notare che azzerare il volume di uno o dell’altro non è sufficiente a zittire completamente l’uscita corrispondente, è necessario mettere in muto il canale.
I MacBook, poi, sono provvisti di un piccolo woofer interno. Questo, al momento, è controllato tramite lo slider LFE, mentre il volume dei due midrange/tweeter si imposta sullo slider Front. Le cuffie, chiaramente, non hanno di questi problemi essendo altoparlanti stereo tradizionali, quindi l’unico controllo volume necessario è HP.
Sembrano non avere effetto gli slider Surround e Line, e lo switch Channel, che prima serviva a passare dalle cuffie alle casse integrate. O forse sono io che di tutta questa roba non so che farmene. In compenso, udite udite, finalmente il microfono funziona!
Qualche problema il kernel invece sembra darlo dal lato del wireless: fatico molto, con il craptastico driver proprietario della Broadcom, a recuperare una connessione wireless dopo la sospensione, cosa che non avveniva in precedenza, neanche nelle ultime RC di questa release.
Potete scaricare il PKGBUILD con la configurazione e la patch qui. Buon divertimento!
Posted by bardo under arch, g33k1ng around | Comments (3)
January 24, 2009
Visto il successo del post precedente sull’argomento ho pensato bene di integrarlo un po’ con altre informazioni utili, e di aggiornare lo stato corrente della cosa.
Prima di tutto l’audio. Al momento il chipset non è perfettamente supportato, ma funziona, con qualche scomodità, passando l’opzione model=mpb3 al modulo snd-hda-intel. Perché sia fatto automagicamente all’avvio è sufficiente aggiungere, in /etc/modprobe.conf, la riga:
options snd_hda_intel model=mbp3
Il mixer ci presenta diversi canali e switch. Uno con cui dobbiamo fare conoscenza subito è Channel, che può passare da due a sei canali: 2ch indica le cuffie, 6ch le casse integrate. Purtroppo ancora non viene rilevato automaticamente se abbiamo collegato delle cuffie, quindi per il momento va impostato a mano. I due slider associati al volume delle casse sono Master (ma dai?) e Line-out, mentre se siamo in modalità cuffia oltre a Master dobbiamo regolare Front, e lo switch Speaker ci dà la possibilità di mettere in muto completamente il suono. Inoltre lo switch IEC958 attiva l’uscita ottica (potrete notare che, togliendo il muto, si accende una luce rossa nell’uscita cuffie).
Purtroppo l’audio non è così semplice da far funzionare. Il kernel 2.6.28 è passato in [core] nel giro di pochi giorni, seguito a ruota dal 2.6.28.1. Mentre la 2.6.28 andava bene, quest’ultima dà qualche grattacapo. Evidentemente uno dei tre commit sul driver snd-hda-intel ha portato ad una regressione, segnalata anche da qualche altro utente su portatili diversi. La soluzione è stata scaricare la nuova versione di alsa-lib, la 1.0.19 e ricompilarla per il nuovo kernel. Le possibilità sono due: sovrascrivere ALSA direttamente nel kernel e ricreare il pacchetto oppure compilare ALSA a parte e mettere i moduli nella cartella /lib/modules/kernel-2.6.28-ARCH/updates, dove saranno letti prima di quelli originali. Una volta fatto questo l’audio dovrebbe ritornare come prima (caveat emptor: reboot necessario).
Ho lavorato un po’ anche sul fronte power saving, prima di tutto installando cpufrequtils, laptop-mode-tools, pm-utils, bc, nvclock e xscreensaver. A livello di risparmio energetico il governor migliore per il processore è ondemand (sì, è meglio anche di conservative), quindi l’ho impostato in /etc/conf.d/cpufreq e ho inserito il demone cpufreq in /etc/rc.conf. Ho poi modificato /etc/acpi/handler.sh in diversi punti; ne riporto le parti interessate.
Premere il pulsante di accensione fa fare al sistema uno shutdown ACPI:
button/power)
#echo "PowerButton pressed!">/dev/tty5
case "$2" in
PWRF)
logger "PowerButton pressed: $2"
halt
;;
Collegare e scollegare il portatile dalla rete elettrica modifica la luminosità dello schermo e avvia o ferma il laptop-mode:
ac_adapter)
case "$2" in
AC)
case "$4" in
00000000)
#echo -n $minspeed >$setspeed
/usr/bin/nvclock -S -15 >/dev/null 2>&1
/etc/rc.d/laptop-mode start
;;
00000001)
#echo -n $maxspeed >$setspeed
/usr/bin/nvclock -S +15 >/dev/null 2>&1
/etc/rc.d/laptop-mode stop
;;
esac
;;
La chiusura del lid, come su OS X, mette il sistema in sospensione e, alla riapertura, chiede la password tramite xscreensaver (questo solo se il demone è attivo):
button/lid)
#echo "LID switched!">/dev/tty5
case "$2" in
LID0)
_res=$( bc <<< "ibase=16; $( tr [:lower:] [:upper:] <<< $4 )%2" )
case "$_res" in
0)
nvclock -S $( cat /tmp/.bllev )
rm -f /tmp/.bllev
;;
1)
echo $( nvclock -i | grep '^Backlight' | cut -d' ' -f3 ) > /tmp/.bllev
xset dpms force off
pidof xscreensaver >/dev/null 2>&1
if [ "$?" -eq 0 ] ; then
xscreensaver-command -lock >/dev/null 2>&1
fi
pm-suspend
;;
esac
;;
*) logger "ACPI action undefined: $2" ;;
esac
;;
Anche per questa volta è tutto, ma aspettatevi nuovi post quando avrò altre informazioni utili sottomano
Posted by bardo under arch, g33k1ng around | Comments (7)
January 11, 2009
Ora che il portatile nuovo è configurato a fondo mi sento pronto per condividere qualche consiglio con chi si è appena ritrovato in mano uno di questi gioiellini e sta cercando di capire se valga la pena di installarci linux e a che punto sia il supporto hardware. Più che un howto, questo post è una serie di consigli, con qualche configurazione sparsa qua e là. Personalmente ho optato per la versione a 64 bit (come ho già detto nel post precedente) perché ormai tutti i plugin principali sono disponibili, e a parte wine, di cui fortunatamente non ho bisogno, c’è tutto quello che può servire. Ma andiamo avanti.
Prima di tutto è pressoché fondamentale il kernel 2.6.28, che al momento si trova in [testing], perché è il primo ad introdurre il supporto alla maggior parte dell’hardware per questo portatile. In particolare i moduli hid-apple, bcm5974 e applesmc hanno ricevuto in questa release importanti aggiornamenti. Al kernel ho poi applicato alcune patch recuperate dalla LKML, quattro specifiche per il modulo bcm5974, quello che si occupa del trackpad, una per la ethernet e una per l’undervolting. Le patch sono allegate a questo post, per chi fosse interessato ad applicarle, insieme alla configurazione del kernel che ho utilizzato, e nel corso del post spiegherò cosa fanno esattamente. Ci tengo a precisare che non ricompilo un kernel da un annetto, quindi potrei aver infilato dentro tonnellate di opzioni inutili, ma funziona bene, è molto rapido (12 secondi da grub al login prompt della shell) e c’è più o meno tutto quel che serve.
Dopo pochi giorni di test della home condivisa mi sento di sconsigliarla: mi sono capitate diverse corruzioni del filesystem nel giro di pochi giorni che mi hanno costretto ad un intervento da Mac OS X, dato che gli hfsprogs segfaultano su linux a 64 bit. Ho quindi lasciato OS X su una sola partizione (che mi risparmia alcuni mali di testa anche da quel lato) e formattato la nuova home in ext4. La root è rimasta in ext3.
La scheda wireless funziona abbastanza bene con il driver broadcom-wl, che sta in AUR, anche se alcuni (me compreso) segnalano qualche problema con alcune reti WPA.
Le ultime versioni di pommed e gpomme danno supporto pressoché completo ai tasti funzione della tastiera Apple, retroilluminazione compresa. Entrambi i pacchetti sono disponibili, non aggiornati, in AUR, quindi è necessario modificare $pkgver in 1.25 e l’url di download (quanto odio le url non uniformi…) sostituendo il numero 2689 con 2707. Due i bug riscontrati: la retroilluminazione della tastiera, quando azzerata del tutto, torna da sola a circa un terzo e la retroilluminazione dello schermo non funziona in X. Per quest’ultimo problema il workaround, che permette di risparmiare anche 3W, è spostarsi in shell pura e cambiare da lì la retroilluminazione, per poi tornare nella sessione grafica.
A livello di durata della batteria OS X è piuttosto impressionante… supera tranquillamente le cinque ore in caso di utilizzo “leggero” (navigazione su Internet, posta elettronica, editing di documenti). Molti, su Internet, facevano notare la grande differenza sotto linux, che difficilmente superava le tre ore, io ho deciso di vedere fin dove si può arrivare. Un pacman -S powertop mi ha dato un’idea del consumo effettivo, almeno sotto linux. 15W circa. Molto meno del mio vecchio Compal CL56 classe 2004, ma non certo un gran risultato. Oltretutto, scaldava parecchio più che sotto OS X, dove era praticamente freddo. Ho provveduto all’installazione del pacchetto cpufrequtils, e ho impostato conservative come default governor in /etc/conf.d/cpufreq.
Sempre tramite powertop, oltre ad applicare i consigli di default proposti dal programma, mi sono accorto che circa metà degli interrupt dell’intero sistema, 100 al secondo, veniva dal driver della ethernet, forcedeth. Ho così scoperto che, per un bug presente in molti chipset nforce, gli interrupt sui TX devono essere forzati via software. La nostra scheda fa parte della stessa famiglia di chip, e anche se non presenta il bug il kernel la forza ai 100 int/s perché non fa parte della lista di esclusione presente nel sorgente del modulo, forcedeth.c. La patch aggiunge la periferica a questa lista, riducendo non di poco il consumo del laptop.
Dato che comunque tutto questo aiutava a diminuire il calore fino ad un certo punto (compresa la modalità powersave di cpufreq) mi sono detto che OS X doveva fare qualcos’altro al processore. Undervolting? Ho deciso di provarci, e ho aggiunto phc.patch, inserendo in /etc/rc.local un paio di righe per impostare le tensioni al minimo. Pare che non serva a molto, funzionare sembra funzionare, a leggere i valori in /proc, ma non ho notato una grossa differenza di riscaldamento o consumo. Comunque ho tenuto la patch just in case.
Che cosa fa quindi OS X? Magari clock dinamici sulla scheda nVidia. Ho impostato l’opzione CoolBits in xorg.conf e ho cercato di modificare il clock della scheda, prima tramite nvclock, poi con nvidia-settings. Nessuno dei due programmi ha funzionato, nemmeno con i driver nvidia-beta, disponibili in AUR. Probabilmente questo modello non è ancora supportato.
Dal punto di vista riscaldamento/consumi non sono riuscito ad arrivare oltre, ma comunque in idle sono tra i 9 e i 10 Watt, che dovrebbero garantirmi almeno 4 ore e potrebbero superare le 5 in alcuni casi. Non male direi
L’ultima patch che ho applicato (quattro in realtà, bcm5974-[1-4].patch) serve a fornire un buon supporto al trackpad. Con questa patch diventa possibile sfruttare il multitouch fino a quattro dita, esattamente come sotto OS X. Io, da fan del tapping, ho impostato il driver synaptics per fare clic destro su tapping a due dita e clic centrale su tapping a tre dita. La configurazione, in /etc/hal/fdi/policy/11-x11-synaptics.fdi ho inserito le seguenti opzioni, che rendono il trackpad funzionale, anche se un po’ troppo sensibile:
<merge key=”input.x11_options.EmulateMidButtonTime” type=”string”>75</merge>
<merge key=”input.x11_options.HorizTwoFingerScroll” type=”string”>1</merge>
<merge key=”input.x11_options.MaxTapTime” type=”string”>180</merge>
<merge key=”input.x11_options.PalmDetect” type=”string”>True</merge>
<merge key=”input.x11_options.SHMConfig” type=”string”>True</merge>
<merge key=”input.x11_options.TapButton1″ type=”string”>1</merge>
<merge key=”input.x11_options.TapButton2″ type=”string”>3</merge>
<merge key=”input.x11_options.TapButton3″ type=”string”>2</merge>
<merge key=”input.x11_options.VertTwoFingerScroll” type=”string”>1</merge>
Bene. Questo dovrebbe essere più o meno tutto. Ovviamente se qualcuno ha altre proposte o idee sarò felice di testarle e condividerle, ogni commento è bene accetto!
UPDATE: ho pubblicato la seconda parte del post, la trovate qui.
File allegato: moduli e configurazione per il kernel
Posted by bardo under arch, g33k1ng around | Comments (5)