web-dev-qa-db-fra.com

Comment exécuter un script bash lorsque la batterie de mon ordinateur portable commence à charger / décharger?

J'ai une configuration 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 cela pénible (même si j'ai un lanceur configuré pour exécuter le script lorsque l'utilisateur clique dessus) et j'aimerais savoir ce que je dois faire pour que le script s'exécute chaque fois que je branche/débranche mon ordinateur portable du chargeur.

2
It's Willem

Voici un script assez simple qui peut être ajouté en tant qu'application de démarrage et sera exécuté en continu. Insérez la commande que vous souhaitez exécuter lors de la détection du changement de méthode d'alimentation, comme spécifié 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
1

Lorsque vous branchez/débranchez un câble d'alimentation, tous les scripts du fichier /etc/pm/power.d sont exécutés avec un argument "true" lorsque vous vous connectez 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 scripts à 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 du 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?

0
Eric Power

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 indique si la batterie est en cours de chargement, de déchargement ou de charge

  • Nous sauvegardons 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.

0
heemayl