Comment puis-je recevoir une alerte lorsque ma batterie est sur le point de mourir dans Linux Mint?

31

Cela m'arrive plus que je ne voudrais l'admettre, mais parfois je ne remarque pas que la puissance diminue car elle n'apparaît que dans ma barre d'état, puis l'ordinateur s'arrête. Je voudrais une grande alerte qui m'avertit avant que cela ne se produise. Y a-t-il un moyen de m'alerter? Ubuntu a une belle fenêtre contextuelle qui vous indique qu'il devient faible.

Travis Reeder
la source
Configurez le gestionnaire d'alimentation à partir de votre environnement de bureau pour faire "quelque chose" - cela peut généralement aller de "rien", sur "exécuter une commande", à "hiberner" / "éteindre".
peterph
Quel environnement de bureau?
Renan
1
@peterph Je n'ai que les options "Power off" et "Hibernate".
Travis Reeder
@Renan exécutant Cinnamon.
Travis Reeder
@TravisR désolé, je voulais dire configurer le comportement lorsque le niveau critique de la batterie est atteint
peterph

Réponses:

26

écrivez un script!

battery_level=`acpi -b | grep -P -o '[0-9]+(?=%)'`
if [ $battery_level -le 10 ]
then
    notify-send "Battery low" "Battery level is ${battery_level}%!"
fi

puis cron pour exécuter toutes les quelques minutes environ. Mais oui, si vous pouvez le faire via l'interface graphique, c'est probablement une bien meilleure façon de le faire.

hdgarrood
la source
Cette méthode a l'avantage de s'appliquer à presque toutes les combinaisons d'environnement distro / desktop avec quelques modifications.
Perkins
La meilleure façon que j'ai trouvée de le faire via l'interface graphique dans mon environnement Cinnamon est d'ajouter une applet à un panneau: unix.stackexchange.com/a/353505/37552
Michael Scheper
7

re: la réponse de hdgarrood, se mettre cronà courir notify-sends'est avérée être extrêmement difficile. (Je pense que crontab -ecela persiste malgré les redémarrages par défaut, heureusement). J'ai suivi plusieurs guides, je ne sais pas exactement ce qui l'a finalement corrigé, mais voici ma configuration complète pour exécuter le vérificateur toutes les 5 minutes:

$ crontab -e

*/5 * * * * sh /home/nrw/.notify-send_setup
*/5 * * * * sh /home/nrw/.battnotif

$ cat .notify-send_setup

#!/bin/bash
touch $HOME/.dbus/Xdbus
chmod 600 $HOME/.dbus/Xdbus
env | grep DBUS_SESSION_BUS_ADDRESS > $HOME/.dbus/Xdbus
echo 'export DBUS_SESSION_BUS_ADDRESS' >> $HOME/.dbus/Xdbus

exit 0

$ cat .battnotif

#!/bin/bash
export DISPLAY=:0
XAUTHORITY=/home/nrw/.Xauthority

if [ -r "$HOME/.dbus/Xdbus" ]; then
    . "$HOME/.dbus/Xdbus"
fi

battery_level=`acpi -b | grep -P -o '[0-9]+(?=%)'`

# I tried to only notify when not charging, but could not get it to work
# STATUS=$(cat /sys/class/power_supply/ADP1/online)
# if [ $battery_level -le 15 ] && [ $STATUS == "0" ]

if [ $battery_level -le 15 ]
then
    /usr/bin/notify-send -u critical "Battery low" "Battery level is ${battery_level}%!"
    echo 'batt low' >> /home/nrw/cron.log
fi

echo 'ran batt' >> /home/nrw/cron.log

Assurez-vous chmod +xdes scripts bash.

orangenarwhals
la source
5

Je lance maintenant ce qui suit:

$ crontab -e
*/5 * * * * /home/<my username>/bin/checkLowBattery
$ cat /home/<my username>/bin/checkLowBattery
#!/bin/bash

POWERSUPPLY="/sys/class/power_supply/ACAD/online" # could be different on your system!
TOO_LOW=20 # how low is too low?
NOT_CHARGING="0"
ICON="/usr/share/icons/ubuntu-mono-dark/status/24/battery-low.svg" # eye candy

export DISPLAY=:0

BATTERY_LEVEL=$(acpi -b | grep -P -o '[0-9]+(?=%)')
STATUS=$(cat $POWERSUPPLY)

if [ $BATTERY_LEVEL -le $TOO_LOW -a $STATUS = $NOT_CHARGING ]
then
    /usr/bin/notify-send -u critical -i "$ICON" -t 3000 "Battery low" "Battery level is ${BATTERY_LEVEL}%!"
fi

exit 0

Comme vous pouvez le voir, ce n'est que du code orangenarwhals avec quelques modifications:

  • pas de tromperie dbus, en quelque sorte je n'en avais pas besoin
  • mettre des "constantes" dans les variables au début du code
  • mis en œuvre des avertissements uniquement lorsque la batterie n'est pas en charge (jetez un œil man test, il explique comment faire des AND, entre autres.)
  • Ajout de l' icône (trouver des candidats sur votre système avec quelque chose comme: $ find /usr/share/icons/ -iname "*batt*low*")
  • heure d'expiration en millisecondes

n'oubliez pas chmod +xvos scripts, vous pouvez ensuite les exécuter directement depuis cron (tab), pas besoin de sh.

(Cela fonctionne sur Ubuntu à l'aide de Xmonad.)

Higemaru
la source
3

Puisque vous utilisez apparemment Cinnamon, installez simplement Battery Applet avec Monitoring and Shutdown (BAMS) .

Cliquez avec le bouton droit sur un panneau → + Ajouter des applets au panneauApplets disponibles (en ligne) , saisissez «BAMS» dans le widget de recherche, puis installez-le et configurez-le.

Ce n'est pas le plus flashy, mais jusqu'à présent, il m'a déjà alerté lorsque j'ai eu mon ordinateur portable débranché sans le vouloir.

Michael Scheper
la source
2

Twist mineur - sur Knoppix (accordé, pas Mint tel qu'utilisé par OP) notify-send n'était pas disponible (le paquet libnotify-bin n'est pas installé), donc j'ai trouvé cela utile pour l'alerte:

xmessage Battery low & mplayer /usr/lib/libreoffice/share/gallery/sounds/beam.wav

Je viens de le jeter dans la commande d'alarme du panneau Battery Monitor de LXDE, pas besoin de script.

Cela suppose que LibreOffice soit installé, mais ce .wav produit un joli son à faible puissance. Il n'y a pratiquement pas de .ogg sur Knoppix.

Randall
la source
1
on pourrait aussi avoir plus agréable zenityau lieu de xmesssageet aplayau lieu demplayer
Matija Nalis
1

J'ai eu le même problème et j'ai trouvé une solution de contournement. J'ai installé à partir des référentiels Linux Mint une application appelée GKrellM. Il surveille beaucoup de choses sur votre machine et il y a de la batterie. Configuration avec alarmes, cela fonctionne pour moi comme un charme.

plus d'informations sur:

http://www.gkrellm.net/

Marcello
la source
GKrellM n'a pas fonctionné pour moi. Il est trop ancien et le système de notification ne fonctionne pas correctement.
Bemipefe du
1

Le problème est lié à l'environnement KDE. J'ai le même problème avec MintMAYA KDE_version. Lorsque j'ai travaillé avec Mint9_Gnome, une fenêtre contextuelle très utile est apparue lorsqu'un certain niveau de faible puissance a été atteint (out_of_the_box auto-configuré sur les nouvelles installations). Très très ennuyeux étant fermé sans conseil et aucune aide fondée, même sur Google :(

Symb932
la source
1

J'ai le même problème et c'est vraiment frustrant. J'ai résolu en utilisant le script BatteryAlert.sh :

#!/bin/bash

BATTERY=$(upower -e | grep 'BAT')

while :
do
    BATTERY_PERCENTAGE=$(upower -i $BATTERY|grep percentage|awk '{ print $2 }'|sed s/'%'/''/g)
    CABLE=$(upower -d | grep -n2 line-power | grep online | awk '{ print $3 }')

    if [[ "$BATTERY_PERCENTAGE" -lt "10" && $CABLE = "no" ]]; then

        notify-send --urgency=critical "WARNING: Battery is about to die"  "Plug in the power cable"
        play /usr/share/sounds/KDE-Sys-Warning.ogg &> /dev/null 
    fi

sleep 10

done

J'utilise KDE mais vous pouvez l'utiliser avec tous les environnements de bureau. Vous n'avez pas besoin de l'exécuter en tant qu'utilisateur root ou de devenir fou avec la syntaxe crontab. Vous avez seulement besoin de changer le son de notification si vous voulez une alerte sonore. Si vous ne souhaitez pas démarrer le script automatiquement lorsque l'environnement de bureau démarre, placez le script dans le dossier $ USER / bin avec le script BatteryAlertLauncher.sh :

#!/bin/bash

function getRunningProcesses 
{
    ps -aux | grep -v grep | grep BatteryAlert.sh
}

if [[ -n "$(getRunningProcesses)" ]] ; then
    exit
fi

BatteryAlert.sh&

Assurez-vous qu'ils sont exécutables:

chmod u+x $USER/bin/BatteryAlert*

Ensuite, exécutez simplement la commande suivante:

ln -s /home/$(USER)/bin/BatteryAlertLauncher.sh .config/autostart/

Vous pouvez également exécuter le script d'alerte manuellement depuis bash en entrant cette commande:

BatteryAlertLauncher.sh
Bemipefe
la source
0

Comme je n'ai pas installé Gnome Shell ou Cinnamon, je ne peux pas être d'une aide directe car l'accès à la source pourrait être très pratique car il est plutôt facile d'ajouter une telle extension rudimentaire avec JavaScript.

Vous devez ouvrir:

/usr/share/cinnamon/js/ui/status/power.js

et recherchez percentText - par la suite, vous devriez pouvoir ajouter un message contextuel ou une alerte.

nesyphlopanuri
la source
Intéressant, je ne savais pas que ce truc est en javascript. Mais pas de répertoire / status et pas de power.js que je peux trouver n'importe où dans les répertoires / cinnamon / js.
Travis Reeder
Avez-vous essayé de le rechercher à partir de root en utilisant:find / -type f -name power.js
nesyphlopanuri
Ran ça, rien trouvé.
Travis Reeder
0

Voici comment je l'ai fait sur mon Arch Linux avec Gnome en tant que DE:

#!/bin/bash

eval "export $(egrep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME gnome-session)/environ)";
battery_level=`acpi -b | grep -P -o '[0-9]+(?=%)'`

STATUS=$(cat /sys/class/power_supply/ACAD/online)
if [ $battery_level -le 15 ] && [ $STATUS == "0" ]
then
    /usr/bin/notify-send -u critical "Battery low" "Battery level is ${battery_level}%!"
fi

Le mot ACADen STATUS=$(cat /sys/class/power_supply/ACAD/online)changera en fonction de la marque de l'ordinateur portable. Il est utilisé pour savoir si vos genoux sont branchés sur un adaptateur secteur ou non. Voici à quoi ressemble mon crontab:

* * * * * bash <path to script>

N'oubliez pas de rendre le script exécutable avec chmod u+x <path to script>

daltonfury42
la source
0

Ce simple fonctionne bien pour moi, avec juste un acpipaquet simple à installer (pas de démons, des environnements de bureau spécifiques ou similaires).

Dans votre utilisateur crontab ( crontab -e) mettez ce qui suit (tout en une seule ligne, il est divisé pour plus de lisibilité ici):

*/3 * * * * acpi --battery | 
    awk -F, '/Discharging/ { if (int($2) < 15) print }' | xargs -ri 
    env DISPLAY=:0 zenity --warning --text "battery low\n{}"

Ce qu'il fait est de vérifier le niveau de la batterie ( acpi --battery) et si vous n'êtes pas connecté au chargeur ( /Discharging/) et si la batterie est < 15%, il affichera toutes les 3 minutes ( */3) un message via zenitypour vous déranger.

Au lieu de la zénité, vous pouvez utiliser à la place xmessage(sur une machine vraiment spartiate) ou même quelque chose comme aplay -q /usr/lib/libreoffice/share/gallery/sounds/cow.wavpour les notifications audio (qui ont l'avantage que cela n'interrompra pas la frappe de votre clavier et fonctionnera même pour les ordinateurs portables multi-utilisateurs avec plusieurs sessions, où DISPLAY=:0pirater échouerait)

Si vous devez également suspendre / mettre en veille prolongée la machine à un certain niveau critique, consultez cette réponse

Matija Nalis
la source
0

Téléchargez une applet appelée BAMS. Il vous alertera automatiquement lorsque la batterie atteindra un certain niveau décidé par vous. C'est la solution la plus simple.

Pranay Saraiwala
la source
0

Avec l'aide de toutes les informations de toutes les réponses ici, j'ai créé un script et l'ai mis dans un référentiel sur GitLab.

Il affichera des notifications lorsque:

  • Votre câble est débranché et la batterie descend en dessous de 30%
  • Votre câble est branché et la batterie dépasse 80%

https://gitlab.com/gitaarik/battery-health-notifications

Les contributions pour le faire fonctionner sur un plus large éventail d'environnements sont les bienvenues.

Le script au moment d'écrire ceci:

#!/bin/bash

# Run this script as a cronjob every 5 minutes or so, to get notifications when
# battery percentage goes below 30% or above 80%.
# Cronjob line example:
# */5 * * * * /bin/bash /path/to/battery_health_notifications.sh

# This line is to make notify-send always work, also when run in a crontab.
# /ubuntu/298608/notify-send-doesnt-work-from-crontab/346580#346580
export $(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$(pgrep -u $LOGNAME gnome-session)/environ | tr '\0' '\n')

BATTERY_PATH=$(upower -e | grep battery)
LINE_POWER_PATH=$(upower -e | grep line_power)
BATTERY_PERCENTAGE=$(upower -i $BATTERY_PATH | grep 'percentage:' | awk '{ print $2 }' | sed 's/%//')
CABLE_PLUGGED=$(upower -i $LINE_POWER_PATH | grep -A2 'line-power' | grep online | awk '{ print $2 }')

if [[ $CABLE_PLUGGED == 'yes' ]]; then

    if [[ $BATTERY_PERCENTAGE -gt 80 ]]; then
        notify-send --urgency=critical "Battery optimization" "Battery reached 80%, unplug the power cable to optimize battery life."
    fi

else

    if [[ $BATTERY_PERCENTAGE -lt 30 ]]; then
        notify-send --urgency=critical "Battery optimization" "Battery is below 30%, plug in the power cable to optimize battery life."
    fi

fi
gitaarik
la source