Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites". Attention, le forum rencontre actuellement quelques difficultés. En cas d'erreur 502, il ne faut pas re-valider l'envoi d'un message ou l'ouverture d'une discussion, au risque de créer un doublon.

La section divers se réorganise ! De nouvelles sous-sections à venir. (plus d'infos + donner son avis)

#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... hmm

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

Haut de page ↑