2 votes

Comment faire en sorte qu'un bash script s'exécute lorsque la batterie de mon ordinateur portable commence à se charger/décharger ?

J'ai une installation conky qui affiche le niveau de ma batterie. Le problème est que, chaque fois que je branche/débranche mon ordinateur portable du chargeur, je dois exécuter le script conky-startup pour qu'il s'affiche correctement. Je trouve que c'est une douleur (Même si j'ai un lanceur mis en place qui exécute le script lorsqu'on clique dessus) et je voudrais savoir ce que je dois faire pour que le script soit exécuté chaque fois que je branche/débranche mon ordinateur portable du chargeur.

2voto

Sergiy Kolodyazhnyy Points 97292

Voici un script assez simple qui peut être ajouté comme application de démarrage et qui fonctionnera en continu. Insérez la commande que vous voulez exécuter lors de la détection d'un changement de méthode d'alimentation, comme indiqué dans les commentaires.

#!/bin/bash
# Author: Serg Kolo
# Date: June 17,2015
# Description:  this script detects changes in
# the powering method, and does something user
# specifies in appropriate field

on_ac_power
PREVIOUS=$(echo $?)

while [ 1 ]; do
    # check if we're on ac power or not
    on_ac_power
    CURRENT=$(echo $?)
    # check if previous values are current
    # are different. If they are
    # raise the flag.
    if [ $CURRENT -ne $PREVIOUS ]; then
        echo things changed
        # Insert commands you wanna run here 
        # in the space below this comment
        echo running custom stuff

        # when done: make current value previous
        # for future comparison
        PREVIOUS=$(echo $CURRENT )
    else
        # if previous values and current are same
        # it means we didn't switch from battery to
        # ac or vice versa; do nothing
        continue
    fi

    sleep 1
done

1voto

Eric Power Points 391

Lorsque vous branchez/débranchez un câble d'alimentation, tous les scripts dans /etc/pm/power.d sont exécutés avec un argument "true" lorsque vous le branchez et un argument "false" lorsque vous le débranchez.

Ajouter un script à la fin de ce fichier devrait le faire fonctionner.

Si vous avez beaucoup de script à exécuter, vous devriez essayer d'ajouter une ligne qui ressemble à ceci :

if [ -f /path/to/the/script ]; then
    . /path/to/the/script
fi

Vous devrez probablement vous assurer que le script dans le répertoire .../power.d/ est exécutable par :

cd /etc/pm/power.d/
chmod +x ./name_of_file 

Pour plus d'informations, consultez cette réponse : Comment puis-je exécuter un script lorsque l'alimentation est branchée ou débranchée ?

-1voto

heemayl Points 85741

Voici une approche générique :

#!/bin/bash

status="$(grep -Po '^charging\s+state:\s+\K.*$' /proc/acpi/battery/BAT0/state)"

if [[ $status = 'charging' ]]; then
    ##Charging, Do something

elif [[ $status = 'discharging' ]]; then
    ##Discharging, Do something

elif [[ $status = 'charged' ]]; then
    ##Charged, Do something

else
    ##Battery not found, Do something
fi
  • /proc/acpi/battery/BAT0/state contient l'état de la batterie, remplacez BAT0 si le nom de la batterie est différent dans votre cas

  • La ligne commençant par charging state: du fichier contient l'état de la batterie, à savoir si elle est en charge, en décharge ou chargée.

  • Nous enregistrons la chaîne d'état de cette ligne dans la variable status

  • En fonction de la valeur de status nous pouvons faire ce que nous voulons.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X