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?
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