#1 Le 12/03/2006, à 19:07
- Skippy le Grand Gourou
Pourquoi mon script supprime le répertoire /sys/.../cpufreq ???
Salut,
Je suis en train d'essayer de mettre en place un script qui est censé éteindre le portable quand la batterie atteint un certain seuil de décharge. C'est un script que j'ai trouvé sur le wiki Gentoo, je crois, auquel j'ai tenté d'apporter quelques modifications mineures (juste la réduction de l'intervalle de vérification de la batterie quand le niveau est faible), et qui semble fonctionner farpaitement.
Le problème, c'est qu'un des effets secondaires de ce script est de supprimer le répertoire /sys/devices/system/cpu/cpu0/cpufreq/, et donc le cpu-scaling...
En fait, lorsque le script tourne, il n'y a pas de problème, mais au redémarrage (que l'extinction se soit faite par le script ou manuellement) ce répertoire n'existe plus et j'ai donc droit à une notification comme quoi le CPU ne supporte pas la gestion de la fréquence.
Voici le script en question :
#!/bin/bash
LIMITE_HAUTE="550" ## Réduit l'intervalle de test si le niveau de charge est inférieur à cette limite (in mAh/mWh)
LIMIT="450" ## Suspend if battery level drops below this (in mAh/mWh)
SLEEP_FAST="20" ## Intervalle de test court
SLEEP="300" ## Seconds between each battery level check
BAT="BAT1" ## Part of path: /proc/acpi/battery/BAT/
HIBERNATE="/sbin/poweroff" ##"/usr/local/sbin/hibernate" ## command used to suspend
#HIBERNATE="echo 4 > /proc/acpi/sleep"
while [ true ]; do
if [ -e "/proc/acpi/battery/$BAT/state" ]; then
PRESENT=$(/bin/sed -ne "/present:/{s/^present:[ ]*\([a-z]*\)$/\1/p;q}" /proc/acpi/battery/$BAT/state)
#echo $PRESENT
if [ "$PRESENT" = "yes" ]; then
STATE=$(/bin/sed -ne "/charging state:/{s/^charging state:[ ]*\([a-zA-Z]*\)$/\1/p;q}" /proc/acpi/battery/$BAT/state)
BATTERY=$(/bin/sed -ne "/remaining capacity:/{s/^remaining capacity:[ ]*\([0-9]*\) m[WA]h$/\1/p;q}" /proc/acpi/battery/$BAT/state)
#echo $BATTERY
#echo $STATE
if [ "$BATTERY" -lt "$LIMIT" ] && [ "$STATE" = "discharging" ]; then
## Comment out the following line if you don't
## want to log the event to system log:
logger "Battery at ${BATTERY} mWh. Suspending to disk."
#echo "Battery at ${BATTERY} mWh. Suspending to disk."
## Suspend:
exec "$HIBERNATE"
fi
fi
fi
if [ "$BATTERY" -lt "$LIMITE_HAUTE" ]; then
sleep ${SLEEP_FAST}s
else
sleep ${SLEEP}s
fi
done
Je l'ai activé par les commandes :
sudo chmod +x /etc/init.d/fin_batterie
sudo update-rc.d fin_batterie start 20 2 3 4 5 .
Quelqu'un a une idée ? Merci.
Hors ligne