venerdì 9 dicembre 2011

nVidia Optimus su Ubuntu 11.10

(premessa: come si capirà nel seguito, non sono assolutamente uno 'smanettone' di linux, e la mia conoscenza deriva da informazioni prese da internet che ho messo insieme più o meno coerentemente. Da prendere cum grano salis.)

Duuuunque, da dove cominciare. Ah, sì!
Ho un pc nuovo, un Asus N53SV, con doppio sistema operativo (da una parte Ubuntu 11.10 e dall'altra Windows 7. Quest'ultimo era incluso nel prezzo, e un giorno potrebbe servirmi...) e scheda grafica nVidia GeForce GT 555M. Il notebook ha anche una scheda grafica integrata Intel e - perlomeno su Win - la nVidia se ne è uscita con questa cosa di Optimus che switcha tra una scheda e l'altra in modo da ottimizzare il consumo energetico e le prestazioni. E su linux? Non è così facile, ovviamente: la nVidia rilascia sì dei driver per linux, ma lo switch deve essere ricostruito "a mano" dagli sviluppatori amanti del pinguino.

Visto che i videogiochi non sono la mia priorità, perlomeno non quando sto usando Linux, vorrei tanto spegnere la scheda grafica e accenderla le rarissime volte che mi serve (che ne so, mi guardo un blue-ray: non l'ho mai fatto, ma questo pc ha un lettore blue-ray, quindi perché no?).

Già prima di scegliere il pc avevo visto che esistono essenzialmente due programmi che eseguono lo switch tra le schede grafiche, Bumblebee e Ironhide [link a caso]: dato che Ironhide ha una GUI mi sono detto: non mi va di perderci le ore, metto questa :p

L'installazione è abbastanza semplice, basta aggiungere tra le repository quella dello sviluppatore e usare il gestore pacchetti:

sudo apt-add-repository ppa:mj-casalogic/ironhide
sudo apt-get update
sudo apt-get install ironhide

... e poi basta dire sempre ok, assicurandosi che le rotelle di glxgears funzionino sempre. Una volta installato, Ironhide dovrebbe permettere di:
-disattivare la scheda nVidia all'avvio;
-avviare un programma accendendo e usando la scheda nVidia, spegnendola alla chiusura dello stesso;
-più in generale, accendere e spegnere a piacimento la scheda. Non è ancora possibile farlo automaticamente come su Win, anche se forse in qualche mese si saprà qualcosa di più...

Naturalmente, dopo l'installazione i comandi funzionavano male, in modo pressoché casuale.
Dando, ad esempio, il comando optirun gedit si apre gedit, chiudendolo si otteneva:
Another ironhide powered application is running, keeping ironhide alive.

Questo comportamento non era ripetibile, nel senso che dopo il reboot i messaggi cambiavano. Ho risolto guardando qui, thread nel quale i tizi mostravano problemi simili. Sono andato in /usr/bin/ironhide-disablecard-on-powerup e ho commentato il comando $ENABLECARD nell'if, una cosa così:
if ! pidof -x /usr/bin/optirun /usr/bin/optirun32 /usr/bin/optirun64 >/dev/null; then
if [ `lspci -v -s \`grep BusID /etc/X11/xorg.conf.nvidia | sed -e "s/[\t]*BusID[ \t]*\"\(.*\)\"/\1/g" |cut -d: -f2,3\` | grep "\!" |wc -l` = 0 ]; then
if [ $IRONHIDE_ACPI_MODE = "1" ]; then
#$ENABLECARD
fi
$DISABLECARD
fi
fi
Adesso il comando optirun funziona perfettamente, passando alla scheda nVidia come richiesto (per controllare basta eseguire glxgears - le rotelle di prima - con e senza optirun e vedere come cambiano i frame al secondo).

Adesso il prossimo obiettivo è: dato che la scheda nVidia è sempre accesa (che la si usi o non la si usi), come si fa a spegnerla? Se e quando avrò novità aggiornerò il post...

Aggiornamento: 9 dicembre, ore 17.45
Toh, la scheda ha finalmente deciso di spegnersi. Il pc è alimentato a batteria, dò questi comandi:
matteo@matteo-N53SV:~$ ironhide-disablecard
ERROR: Module nvidia does not exist in /proc/modules
OFF Disabling NVIDIA card succeeded.
matteo@matteo-N53SV:~$ lspci | grep VGA
00:02.0 VGA compatible controller: Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller (rev 09)
01:00.0 VGA compatible controller: nVidia Corporation GF106 [GeForce GT 555M] (rev ff)
Il tempo rimanente alla scarica della batteria è zompato da un'ora a un'ora e 40 minuti. Tocca investigare...

Aggiornamento: 25 dicembre, ore 16.05
A quanto pare funziona tutto (non so bene come :p), nel senso che all'avvio la scheda è spenta:

matteo@matteo-N53SV:~$ ironhide-disablecard
ERROR: Module nvidia does not exist in /proc/modules
OFF Disabling NVIDIA card succeeded.

L'errore è semplicemente perché la scheda è GIÀ spenta. Infatti:


matteo@matteo-N53SV:~$ sudo ironhide-enablecard
ON Enabling NVIDIA card succeeded.
matteo@matteo-N53SV:~$ grep rate /proc/acpi/battery/BAT0/state
present rate:            25124 mW
matteo@matteo-N53SV:~$ sudo ironhide-disablecard
OFF Disabling NVIDIA card succeeded.
matteo@matteo-N53SV:~$ grep rate /proc/acpi/battery/BAT0/state
present rate:            18502 mW

Sette Watt di differenza non sono pochi... in questo modo arrivo a circa tre ore di autonomia. Insomma, tutto è bene quel che finisce bene :D

-mm

Nessun commento:

Posta un commento