lf consiglia

Articoli Recenti

25 novembre 2012

La CPU è sempre al massimo da quando usi Ubuntu 12.10 e derivate? Proviamo a risolvere...

-
Da quando usi Ubuntu 12.10 quantal o sue derivate, hai notato che la batteria del tuo pc si scarica subito? 
Hai notato che la CPU è sempre al massimo? Hai notato che la ventola di raffreddamento è sempre al massimo?

Non aver paura molto probabile che il problema sia dovuto alla scheda grafica del tuo portatile come è altrettanto probabile che sia una NVIDIA o una ATI/AMD Radeon e che i driver che stai usando non sono quelli proprietari ma quelli open source della stessa distribuzione.



E' noto che questo tipo di schede video proprietarie funzionino in modo regolare solo con i propri driver proprietari senza i quali consumano in modo notevole la carica della batteria in pochissimo tempo.
Purtroppo fino a Ubuntu 12.04 e derivate, il problema veniva risolto installando i driver proprietari, ma da qualche mese e specialmente chi possiede una scheda grafica AMD Radeon anche installando i driver proprietari molte volte non risolve un bel niente.
Allora cosa fare? Far finta che la batteria non si scarica subito? Far finta che non si sente il rumore insistente della ventola di raffreddamento al massimo?
Certo che no... in qualche caso possiamo risolvere questo problema pur mantenendo i driver open source. Vediamo come.
Molti portatili con schede grafiche dedicate come NVIDIA o ATI/AMD sono muniti di una seconda scheda grafica INTEL incorporata che in questi casi è la nostra salvezza in attesa dell'uscita dei driver proprietari.

Premetto che la soluzione che propongo, e che io stesso ho adottato con successo, è una tra quelle indicate sul sito ufficiale di Ubuntu ma che ritengo la migliore.

Procediamo.

Prima di tutto dobbiamo verificare la presenza delle due schede grafiche digitando dal terminale questo comando:

lspci -k | grep -A3 VGA

dovremmo avere un risultato del genere

00:02.0 VGA compatible controller: Intel Corporation 2nd Generation Core Processor Family Integrated Graphics Controller (rev 09)
Subsystem: Samsung Electronics Co Ltd Device c0c7
Kernel driver in use: i915
Kernel modules: i915
--
01:00.0 VGA compatible controller: Advanced Micro Devices [AMD] nee ATI Thames [Radeon 7500M/7600M Series]
Subsystem: Samsung Electronics Co Ltd Device c0c7
Kernel modules: radeon
02:00.0 Network controller: Intel Corporation Centrino Advanced-N 6230 (rev 34)

dal quale si evidenzia la presenza delle due schede grafiche.

Ciò che adesso dobbiamo fare è rendere predefinita la scheda INTEL al posto della AMD Radeon per normalizzare il funzionamento del nostro pc e per fare ciò useremo l'opzione di sistema vga_switcheroo durante la fase di boot.

Creiamo il file /etc/initramfs-tools/scripts/local-top/hybrid_boot_options con questo comando da terminale:

sudo gedit /etc/initramfs-tools/scripts/local-top/hybrid_boot_options

copiamo dentro il file il seguente contenuto

##########################################################
# Standard initramfs preamble
#
prereqs()
{
:
}

case $1 in
prereqs)
        prereqs
        exit 0
        ;;
esac

# source for log_*_msg() functions, see LP: #272301
. /scripts/functions

#
# Helper functions
#
message()
{
        if [ -x /bin/plymouth ] && plymouth --ping; then
                plymouth message --text="$@"
        elif [ -p /dev/.initramfs/usplash_outfifo ] && [ -x /sbin/usplash_write ]; then
                usplash_write "TEXT-URGENT $@"
        else
                echo "$@" >&2
        fi
        return 0
}

run_switcheroo()
{
        local hybridopts
        hybridopts="$1"

        if [ -z "$hybridopts" ]; then
                return 1
        fi

        local IFS=" ,"
        for x in $hybridopts; do
                message "Switching hybrid graphics to $x"
                echo $x > /sys/kernel/debug/vgaswitcheroo/switch
        done
        return 0
}

#
# Begin real processing
#

# Do we have any kernel boot arguments?
for opt in $(cat /proc/cmdline); do
        case $opt in
        hybridopts=*)
                run_switcheroo "${opt#hybridopts=}"
                ;;
        esac
done

exit 0
########################################


A questo punto rendiamo il file eseguibile con questo comando:

chmod +x /etc/initramfs-tools/scripts/local-top/hybrid_boot_options

Creiamo la nuova immagine di avvio con:

update-initramfs -c -k all

Apriamo il file /etc/default/grub con

sudo gedit /etc/default/grub

modifichiamo adesso la proprietà GRUB_CMDLINE_LINUX_DEFAULT in questo modo

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash modeset=1 hybridopts=ON,IGD,OFF"

ed aggiorniamo GRUB in questo modo

update-grub

Riavviare il pc ed il gioco è fatto poichè abbiamo semplicemente fatto partire il kernel attivando la scheda grafica integrata come primaria e disattivando la secondaria come la nvidia o la amd.
Nel momento in cui vogliamo riattivare la scheda grafica proprietaria, ad esempio perchè sono usciti i driver proprietari compatibili, modifichiamo la proprietà GRUB_CMDLINE_LINUX_DEFAULT nel file /etc/default/grub in questo modo.

Apriamo il file /etc/default/grub con

sudo gedit /etc/default/grub

modifichiamo adesso la proprietà GRUB_CMDLINE_LINUX_DEFAULT in questo modo

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"

e avremo la disattivazione della scheda grafica integrata e l'attivazione di quella proprietaria nella speranza che i driver proprietari, che andremo ad installare, funzionino in modo corretto.