web-dev-qa-db-fra.com

Notification de batterie faible

J'ai Ubuntu 16.04 LTS sur Lenovo z5170. Je veux avoir un programme (quel que soit le langage de programmation) qui m'informe que je manque de batterie par un bip. Je suppose que le programme devrait dormir jusqu'au moment où je suis à court de batterie (10% d'énergie) mais tout ce à quoi je peux penser est une boucle while qui dévore tout le processeur et empêche tout le reste de fonctionner.

1- Comment dois-je mettre en œuvre un tel programme?

2- Quels sont les moyens d'avertir les utilisateurs d'un événement spécifique?

1
Shadow_m2

En plus des méthodes de duplication suggérées, ce que vous pouvez faire est le suivant:

Trouvez votre chemin d'interface de batterie via upower -enumerate:

bash-4.3$ upower --enumerate
/org/freedesktop/UPower/devices/line_power_ACAD
/org/freedesktop/UPower/devices/battery_BAT1
/org/freedesktop/UPower/devices/DisplayDevice

Utilisez ensuite upower --show-info et déclenche sa sortie. Dans mon exemple, ce serait comme ça:

bash-4.3$ upower --show-info /org/freedesktop/UPower/devices/DisplayDevice | awk '/percentage/{gsub(/\%/,""); print $2}'
100

Il ne vous reste plus qu'à utiliser un simple script pour comparer si cette valeur de sortie est inférieure ou égale à un certain seuil

#!/bin/bash

get_percentage()
{
     # Note, | \ must have only new line after it, no space
     upower --show-info /org/freedesktop/UPower/devices/battery_BAT1 |\
     awk '/percentage/{gsub(/\%/,""); print $2}'
}

main()
{
    while true
    do
        pcent=$(get_percentage)
        [ $pcent -le 10  ] && notify-send "Battery Low" "Please plug in charger"
        sleep 60 # check every minute
    done
}
main

Quant à la notification par bip, vous pouvez utiliser la commande aplay et n'importe quel fichier audio au lieu de notify-send. Si vous n'avez pas d'interface graphique, vous pouvez également utiliser la commande wall comme ceci wall <<< "Battery low" et il s'imprime pour afficher un message. NOTE : en raison de mises à jour récentes dans gnome-terminal cela ne fonctionne pas dans gnome-terminal, mais dans les ATS et autres émulateurs de terminaux, c'est toujours le cas

0