PDA

View Full Version : Parere:wifi, risparmio energia e script bash in cron


Cobra78
14-08-2008, 23:31
Ordunque.......Ubuntu (non so altre distro ma non credo) non commuta automaticamente la modalità della mia scheda intel wifi n da 6 (ac) a 7 (battery) ne in un verso ne nell'altro.

La mia idea: un semplice script bash da mettere in cron a 60 secondi (o anche 30), che fa un cat di sys/power/nonricordocosamapoiciguardo, e se è online (ac) setta la scheda in modalità ac, altrimenti in modalità battery.

Secondo voi che ne sapete più di me ha senso o è una cavolata? Quanto potrebbe risultare oneroso sto cronjob (lo scriptino sarebbe alla fine un cat e un if).

Cobra78
17-08-2008, 11:24
Ok, ho fatto lo script, che ovviamente non funziona, e non capisco perchè.

Lo posto


#!/bin/bash

POWER="6"

BATT="7"

STATUS='sudo cat /sys/class/power_supply/AC/online'

ONLINE="1"

if [[ $STATUS==$ONLINE ]]
then
echo $power > /sys/bus/pci/drivers/iwl4965/0000\:0c\:00.0/power_level
echo "metti 6?"

else
echo $batt > /sys/bus/pci/drivers/iwl4965/0000\:0c\:00.0/power_level
echo "o 7"
fi


Soprattutto non capisco perhè se non metto sudo davanti a cat (nell'assegnamento di variabile) mi da "permesso negato" anche se eseguo lo script come root.

dvd100
17-08-2008, 18:27
Dovresti mettere il cat tra apici inversi, così:

STATUS=`cat /sys/class/power_supply/AC/online`

Il sudo non serve se esegui da root.

Cobra78
17-08-2008, 18:35
Risolto, erano delle cavolate.


#!/bin/bash

# Il driver può essere anche iwl3945 per le schede intel 3945
DRIVER="iwl4965"

# La modalità 6 corrisponde al funzionamento con alimentazione da rete
POWER="6"

# La modalità 7 corrisponde al funzionamento con alimentazione a batteria
BATT="7"

# Verifica se l'alimentatore è collegato o meno
STATUS=`cat /sys/class/power_supply/AC/online`

# Valore per il confronto
ONLINE="1"

# Controlla se il file power_level esiste per evitare errori nel log dopo, ad esempio, un risveglio
#dall'ibernazione/sospensione con la wifi spenta
if [ -f /sys/bus/pci/drivers/$DRIVER/*/power_level ]
then
# Confronta lo stato attuale col valore di riferimento
if [ "$STATUS" = "$ONLINE" ]
then
# Se l'alimentatore è collegato imposta la modalità corrispondente
echo "$POWER" > /sys/bus/pci/drivers/$DRIVER/*/power_level
else
# Se l'alimentatore è scollegato imposta la modalità corrispondente
echo "$BATT" > /sys/bus/pci/drivers/$DRIVER/*/power_level
fi
fi

exit 0


Per chi fosse curioso:

lo script semplicemente verifica che esista il file /sys/bus/..bla bla bla, perchè al ritorno da una sospensione o ibernazione potrebbe non esistere se il modulo è stato scaricato, e poi imposta la modalità 6 (ac) se il portatile è connesso alla corrente o 7 (battery) se è a batteria :P

Tra l'altro funziona sia sulle iwl4965 che sulle iwl3945, ovviamente cambiando opportunamente il nome della shceda, e credo che al posto di quel coso con gli zeri si possa mettere un bell "*" che tanto è uguale.