Essentiellement, je voudrais ce commentaire dans une réponse fonctionnelle.
Je sais comment extraire le pourcentage de batterie de Comment vérifier l'état de la batterie à l'aide d'un terminal? :
upower -i $(upower -e | grep BAT) | grep --color=never -E percentage|xargs|cut -d' ' -f2|sed s/%//
Et comment faire apparaître une notification de base:
notify-send "battery low"
Mais comment puis-je configurer un script (bash?) Pour surveiller en permanence la sortie et envoyer une notification selon ce pseudo-code:
si battery_status < 10%
alors notify-send "battery low"
et mettre mon système en état de veille Sudo pm-suspend
Première étape: rendre pm-suspend accessible à tous les utilisateurs, aucun mot de passe n’est demandé
Faites Sudo visudo
et ajoutez cette ligne à la fin du fichier: yourusername ALL=NOPASSWD: /usr/sbin/pm-suspend
Source: Comment exécuter des commandes Sudo spécifiques sans mot de passe?
Étape 2: création du fichier batwatch.desktop:
C'est le fichier qui lancera automatiquement le script de surveillance. Le fichier doit être stocké dans le dossier $HOME/.config/autostart/
.
[Desktop Entry]
Type=Application
Exec=/home/serg/bin/batwatch.sh
Hidden=false
NoDisplay=false
Name=Battery Monitor Script
Notez que le script se trouve dans mon dossier /home/serg/bin
. Vous pouvez utiliser le dossier de votre choix, mais pour des raisons de standards, il serait préférable d’utiliser/usr/bin ou/home/username/bin.
Source: Comment exécuter un script au démarrage
Etape 3: créez le script actuel, enregistrez-le au même emplacement qu'Exec = line .
Voici le script actuel. Remarquez, j'utilise bash ici, mais cela devrait également fonctionner avec korn Shell. J'ai ajouté quelques commentaires, alors lisez ceux-ci pour comprendre ce que le script fait exactement
#!/bin/bash
# Check if the battery is connected
if [ -e /sys/class/power_supply/BAT1 ]; then
# this line is for debugging mostly. Could be removed
#notify-send --icon=info "STARTED MONITORING BATERY"
zenity --warning --text "STARTED MONITORING BATERY"
while true;do
# Get the capacity
CAPACITY=$( cat /sys/class/power_supply/BAT1/uevent | grep -i capacity | cut -d'=' -f2 )
case $CAPACITY in
# do stuff when we hit 11 % mark
[0-9]|11)
# send warning and suspend only if battery is discharging
# i.e., no charger connected
STATUS=$( cat /sys/class/power_supply/BAT1/uevent | grep -i status | cut -d'=' -f2 )
if [ $(echo $STATUS) == "Discharging" ]; then
#notify-send --urgency=critical --icon=dialog-warning "LOW BATTERY! SUSPENDING IN 30 sec"
zenity --warning --text "LOW BATTERY! SUSPENDING IN 30 sec"
sleep 30
gnome-screensaver-command -l && Sudo pm-suspend
break
fi
;;
*)
sleep 1
continue
;;
esac
done
fi
Étape 4: redémarrez et testez si le script fonctionne
Pour cela, vous pouvez régler le nombre [0-9]|11)
sur la valeur de votre choix, par exemple 65)
pour suspendre à 65%. Vous ne pourrez suspendre l’application que si vous n’êtes pas branché à l’alimentation (c’est-à-dire sans charger).
Faites-moi savoir si vous aimez cela, et si cela fonctionne, assurez-vous de vote positif et cliquez sur la coche grise à gauche de ma réponse!
À votre santé !
J'avais créé un script similaire pour mon Vaio afin de m'avertir lorsque la batterie est complètement chargée. J'avais utilisé UPOWER pour me fournir les mises à jour sur l'état de la batterie et en extraire la section correspondante. Voici le code:
#!/bin/bash
while true;do
STATE=$( upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep "state:" | cut -b 26- )
if [ $STATE = "fully-charged" ]
then
zenity --info --text "Battery Full!"
break
fi
done