Come al solito darò una spiegazione “fai da te”. In questo caso parlerò del risparmio energetico del mio mitico portatile Asus A8SC-4P107C
Strumenti utilizzati
A parte quelli di utilizzo normale del laptop ho usato i seguenti strumenti:
- pacchetto cpufreqd e relativo demone (facoltativo);
- pacchetto acpid e relativo demone;
- modulo asus_laptop (blacklistando asus-acpi);
- modulo acpi-cpufreq, cpufreq_ondemand, cpufreq_conservative (gli ultimi due non necessari, messi solo per scrupolo)
Kill switch iwl3945
Dopo aver bestemmiato due giorni di seguito (risolvendo un problema da me creato) ho configurato acpid in modo che possa spegnere il wifi, quando non mi serve (praticamente non gli fa quasi più consumare corrente), usando il tasto apposito del portatile. Con il comando acpi_listen ho “ascoltato” l’evento causato dal tasto.
Successivamente ho creato il file
/etc/acpi/events/iwl_kill
e impostato in modo che intercetti l’evento ed esegua successivamente lo script /etc/acpi/iwl_kill.sh
event=hotkey ATKD 0000005d
action=/etc/acpi/iwl_kill.sh
Lo script è una puttanata pazzesca scritta da me, infatti funziona solo ed esclusivamente con il mio portatile e con il kernel 2.6.27, oltretutto è strutturato da culo in quanto si potrebbe scrivere in maniera molto ma molto più elegante (ma non avevo voglia di spremere le meningi).
Ora riavviando acpid posso spegnere e accendere la periferica wifi; fortunatamente questo non provoca sbalzi d’umore a wicd che mi avverte solamente o che non ho nessuna rete wifi disponibile o che il segnale è al 0% e quando riattivo il wifi wicd ritorna collegato al mio AP casalingo (o se sono in treno nella linea Calalzo-Padova tenta di collegarsi ai numerosi AP presenti durante il tragitto).
Batteria e rete elettrica
Sempre usando acpid ho configurato due “stati” differenti (e quindi due script):
- batteria: imposta la luminosità a 3 e imposta lo scaling della cpu su conservative
- rete: imposta la luminosità a 6 e imposta lo scaling della cpu su ondemand
Si poteva fare a meno di usare cpufreq-set perché basterebbe usare questi accorgimenti
per batteria
echo conservative > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo conservative> > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
mentre questo per rete
echo ondemand > /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor
echo ondemand > /sys/devices/system/cpu/cpu1/cpufreq/scaling_governor
Ovviamente intercetto gli eventi, creando due file in /etc/acpi/events, che tengano d’occhio il cambiamento della sorgente di corrente e lancino i miei script appositi (chiamo questi file con lo stesso nome degli script ma non è obbligatorio!)
Questo è batteria
event=battery.*
action=/etc/acpi/batteria.sh
mentre questo rete
event=ac_adapter.*
action=/etc/acpi/rete.sh
Riavviando acpid tutto ok, tutto funziona.
Però se avvio il laptop sta già usando la batteria non, essendo connesso alla rete elettrica, in che stato sono? In quello “normale”, né in batteria né in rete. Questo perché acpid all’avvio non può ascoltare nessun cambiamento dato che non c’è stato, io infatti negli eventi ascolto solo dei cambiamenti: rete elettrica a batteria o viceversa.
Quindi ho preso /etc/rc.local e ho schiaffato questa roba qua, così all’avvio del sistema (o meglio, alla fine dell’esecuzione di tutti i runlevel) metto il portatile nello “stato” o rete o batteria.
Bluetooth
Il bluetooth, anche se non carico i driver, viene comunque tenuto acceso all’avvio. Non serve neanche creare niente per acpid in quanto credo che tutto venga gestito via hardware dal portatile, ciò non toglie che in rc.local possa aggiungere questa riga per disabilitarlo all’inizio (poi posso comunque riaccenderlo con il pulsante apposito).
Occhio
- Come ho già scritto i miei script fanno schifo, si potrebbero migliorare
- Riguardo al punto sopra chi usa *buntu si trova già una marea di script pronti all’uso (ma non avevo voglia di fare copia incolla)
- Come ho già scritto è una soluzione fai da te, non ho trovato un power-manager decente che faccia come dico io
- Per fare il fico uso zsh nei miei script (e anche come shell standard) invece che sh o bash
- Uso ondemand anche quando connesso alla rete elettrica: perché consumare di più quando non serve?
Da leggere




