mercoledì 24 gennaio 2007

Gestione dell'energia con ACPI

Fedora consente di gestire l'energia del laptop Toshiba attraverso APM e ACPI. Tuttavia, ACPI ( Advanced Configuration and Power Interface ) è pienamente supportato dal kernel Fedora, ed è inoltre una specifica nativa Toshiba, nel senso che Toshiba è una delle case promotrici di tale standard, quindi rappresenta una scelta quasi naturale nella gestione dell'energia del laptop.

Attivare ACPI come servizio al boot della macchina, al posto di APM, potrebbe comunque non bastare, perchè non sono nuove situazioni nelle quali la macchina, a seguito di un resume, non funziona appropriatamente: blank screen, audio muto, ecc.

La modalità che ho scelto per la gestione tramite ACPI della sospensione e del riavvio del sistema è per ora legata solamente alla sospensione su RAM ( stand-by ). Opzioni quali la sospensione su disco o l'ibernazione completa non sono ancora state provate; in particolare, l'ibernazione richiede moduli software aggiuntivi.

La sospensione viene realizzata semplicemente chiudendo il portatile; riaprendolo, il sistema riparte automaticamente. Non faccio uso delle opzioni messe a disposizione dal modulo KDE Klaptop, non perchè esse non funzionino, ma perchè occorre una impostazione specifica che al momento non mi occorre. E' molto semplice chiudere il portatile ed attivare lo stand-by, e riaprirlo, attivando automaticamente il resume.

Per ottenere questo risultato, da utente root, seguire i passi seguenti.

Nella directory /etc/acpi/actions, inserire il file lid.sh e attivare i permessi di esecuzione. Il file avrà questo contenuto:

#!/bin/sh
/path/to/suspend.sh

dove /path/to va sostituito con il percorso assoluto dello script shell che si occupa della sospensione e della riattivazione del sistema. Un esempio è stato inserito sotto.

Nella directory /etc/acpi/events, inserire il file lid. Il file avrà questo contenuto:

event=button[ /]lid.*
action=/etc/acpi/actions/lid.sh

Questo file determina quale script verrà eseguito alla chiusura del portatile, nel nostro caso lid.sh, che a sua volta invocherà [..]/suspend.sh.

Questo è il file suspend.sh nella mia macchina:
#!/bin/sh

# discover video card's ID
ID=`lspci | grep VGA | awk '{ print $1 }' | sed -e 's@0000:@@' -e 's@:@/@'`

# securely create a temporary file
#TMP_FILE=`mktemp /var/tmp/video_state.XXXXXX`
TMP_FILE=`mktemp /tmp/video_state.XXXXXX`
trap 'rm -f $TMP_FILE' 0 1 15

# switch to virtual terminal 1 to avoid graphics
# corruption in X
chvt 1

# write all unwritten data (just in case)
sync

# dump current data from the video card to the
# temporary file
cat /proc/bus/pci/$ID > $TMP_FILE

# Arresto il network prima del suspend
/etc/init.d/network stop

# Evito che ALSA si inchiodi al resume
amixer -c 0 sset Master mute

# suspend
echo -n mem > /sys/power/state

# restore video card data from the temporary file
# on resume
cat $TMP_FILE > /proc/bus/pci/$ID

# switch back to virtual terminal 7 (running X)
chvt 7

# Riabilito ALSA
amixer -c 0 sset Master unmute

# Riattivo il network dopo il suspend
/etc/init.d/network start

# remove temporary file
rm -f $TMP_FILE


Naturalmente, il file deve avere i permessi di esecuzione.

Questo script gestisce appropriatamente lo schermo, ed evita il blank screen se si chiude il portatile in ambiente X. In ambiente console, occorre riattivare la console con [CTRL] [ALT] [Fx], dove x sta per la console desiderata.

Lo script, che è stato prelevato da questo ottimo articolo assieme ai passi per attivare il supporto ACPI in modalità minimale di stand-by, è stato arricchito da alcune operazioni ( evidenziate in verde ) volte a sospendere e ripristinare correttamente l'intero sistema.

In particolare, prima della sospensione vengono disattivate tutte le interfacce di rete correntemente attive, e viene disattivato il Master control di ALSA, in quanto la sospensione del sistema ( con ALSA come layer sonoro ) blocca ALSA alla riattivazione, disattivando conseguentemente l'audio. Dato che Fedora non ha ( nella release 5 e superiori ) sistemi semplici di riattivazione di ALSA senza effettuare un reboot, l'inserimento di questa semplice sequenza di comandi sembra riattivare correttamente il supporto sonoro. Grazie alle informazioni presenti in questo articolo, e ai files gentilmente messi a disposizione dall'autore, è stato possibile arrivare a questa soluzione.

La riattivazione delle interfacce di rete, necessaria alla mia specifica configurazione, viene effettuata invece automaticamente dallo script.

Etichette:

0 Commenti:

Posta un commento

Iscriviti a Commenti sul post [Atom]

<< Home page