Wie kann ich in Linux Mint eine Warnung erhalten, wenn mein Akku bald leer ist?

31

Das passiert mir mehr, als ich zugeben möchte, aber manchmal merke ich nicht, dass die Leistung nachlässt, da sie nur in meiner Statusleiste angezeigt wird und der Computer dann einfach beendet wird. Ich hätte gerne eine große Warnung, die mich warnt, bevor dies passiert. Gibt es eine Möglichkeit, mich zu warnen? Ubuntu hat ein nettes Popup, das anzeigt, dass es langsam wird.

Travis Reeder
quelle
Konfigurieren Sie den Power-Manager in Ihrer Desktop-Umgebung so, dass er "etwas" ausführt - dies kann normalerweise von "nichts" über "Ausführen eines Befehls" bis zu "Ruhezustand" / "Ausschalten" reichen.
Peterph
Welche Desktopumgebung?
Renan
1
@peterph Ich habe nur die Optionen "Ausschalten" und "Ruhezustand".
Travis Reeder
@ Renan läuft Zimt.
Travis Reeder
@ TravisR Entschuldigung, ich wollte sagen, konfigurieren Sie das Verhalten, wenn der kritische Akkuladestand erreicht ist
Peterph

Antworten:

26

schreibe ein Drehbuch!

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

dann cron es alle paar Minuten oder so ausgeführt. Aber ja, wenn Sie es über die grafische Benutzeroberfläche tun können, ist dies wahrscheinlich eine viel bessere Methode.

hdgarrood
quelle
Diese Methode hat den Vorteil, dass sie mit ein wenig Optimierungsaufwand auf nahezu jede Distribution / Desktop-Umgebung angewendet werden kann.
Perkins
Der beste Weg, wie ich es in meiner Cinnamon-Umgebung über die GUI geschafft habe, ist, einem Panel ein Applet hinzuzufügen: unix.stackexchange.com/a/353505/37552
Michael Scheper
7

Die Antwort von re: hdgarrood, die Einstellung cronzu rennen, notify-sendstellte sich als schmerzhaft heikel heraus. (Ich denke, das crontab -ebleibt zum Glück auch nach einem Neustart bestehen). Ich habe mehrere Anleitungen befolgt, ich bin mir nicht sicher, was es genau am Ende behoben hat, aber hier ist mein vollständiges Setup, um den Checker alle 5 Minuten auszuführen:

$ 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

Stellen Sie sicher, chmod +xdie Bash-Skripte.

Orangenarwale
quelle
5

Ich führe jetzt Folgendes aus:

$ 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

Wie Sie sehen können, ist dies nur Orangenarwhals-Code mit einigen Änderungen:

  • kein dbus trick, irgendwie habe ich es nicht gebraucht
  • Fügen Sie am Anfang des Codes einige "Konstanten" in Variablen ein
  • Warnungen nur bei nicht man testgeladenem Akku implementiert
  • hinzugefügt Symbol (einige Kandidaten auf Ihrem System mit so etwas wie finden: $ find /usr/share/icons/ -iname "*batt*low*")
  • Ablaufzeit in Millisekunden

Vergessen chmod +xSie nicht Ihre Skripte, Sie können sie dann direkt von cron (tab) ausführen, ohne dass dies erforderlich ist sh.

(Dies funktioniert unter Ubuntu mit Xmonad.)

Higemaru
quelle
3

Da Sie anscheinend Cinnamon verwenden, installieren Sie einfach Battery Applet mit Monitoring and Shutdown (BAMS) .

Klicken Sie mit der rechten Maustaste auf ein Panel → + Applets zum Panel hinzufügenVerfügbare Applets (online) , geben Sie 'BAMS' in das Such-Widget ein und installieren und konfigurieren Sie es.

Es ist nicht das auffälligste, aber es hat mich bereits alarmiert, als ich meinen Laptop unwissentlich vom Stromnetz getrennt hatte.

Michael Scheper
quelle
2

Minor twist - on Knoppix (erteilt, nicht Mint wie von OP verwendet) notify-send war nicht verfügbar (libnotify-bin-Paket ist nicht installiert), daher fand ich dies stattdessen nützlich für die Warnung:

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

Ich habe das gerade in den Alarmbefehl der Batteriemonitoranzeige von LXDE geworfen, es ist kein Skript erforderlich.

Das setzt voraus, dass Sie LibreOffice installiert haben, aber dass .wav einen schönen Sound mit geringem Stromverbrauch erzeugt. Es gibt praktisch keine .ogg's auf Knoppix.

Randall
quelle
1
man könnte auch netter zenityanstelle von xmesssageund aplayanstelle von habenmplayer
Matija Nalis
1

Ich hatte das gleiche Problem und fand eine Problemumgehung. Ich habe von Linux Mint Repositories eine App namens GKrellM installiert. Es überwacht viele Dinge auf Ihrem Computer und es gibt eine Batterie. Setup mit Alarmen, es funktioniert bei mir wie ein Zauber.

Weitere Infos unter:

http://www.gkrellm.net/

Marcello
quelle
GKrellM hat bei mir nicht funktioniert. Es ist zu alt und das Benachrichtigungssystem funktioniert nicht richtig.
Bemipefe
1

Das Problem hängt mit der KDE-Umgebung zusammen. Ich habe das gleiche Problem mit MintMAYA KDE_version. Als ich mit Mint9_Gnome zusammengearbeitet habe, erschien ein sehr nützliches Popup, wenn eine bestimmte Stufe des Energiesparmodus erreicht wurde (bei Neuinstallationen automatisch konfiguriert). Sehr sehr ärgerlich, wenn man ohne Rat und ohne Hilfe heruntergefahren wird und sogar viel googelt :(

Symb932
quelle
1

Ich habe das gleiche Problem und es ist wirklich frustrierend. Ich habe das Problem mit dem BatteryAlert.sh- Skript gelöst :

#!/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

Ich verwende KDE, aber Sie können es in jeder Desktop-Umgebung verwenden. Sie müssen dies nicht als Root-Benutzer ausführen oder die Crontab-Syntax ausprobieren. Sie müssen den Benachrichtigungston nur ändern, wenn Sie einen akustischen Alarm wünschen. Wenn Sie das Skript beim Start der Desktop-Umgebung nicht automatisch starten möchten, legen Sie das Skript mit dem Script BatteryAlertLauncher.sh im Ordner $ USER / bin ab :

#!/bin/bash

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

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

BatteryAlert.sh&

Stellen Sie sicher, dass sie ausführbar sind:

chmod u+x $USER/bin/BatteryAlert*

Dann führen Sie einfach den folgenden Befehl aus:

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

Sie können das Warnskript auch manuell aus der Bash ausführen, indem Sie den folgenden Befehl eingeben:

BatteryAlertLauncher.sh
Bemipefe
quelle
0

Da ich Gnome Shell oder Cinnamon nicht installiert habe, kann ich keine direkte Hilfe sein, da der Zugriff auf die Quelle sehr praktisch wäre, da es ziemlich einfach ist, eine solche rudimentäre Erweiterung mit JavaScript hinzuzufügen.

Sie sollten öffnen:

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

und suchen Sie nach percentText. Anschließend sollten Sie in der Lage sein, eine Popup-Nachricht oder eine Warnmeldung hinzuzufügen.

Nesyphlopanuri
quelle
Interessant, wusste nicht, dass dieses Zeug in Javascript ist. Aber kein / status Verzeichnis und keine power.js kann ich überall in den / cinnamon / js Verzeichnissen finden.
Travis Reeder
Haben Sie versucht, es von root mit zu suchen:find / -type f -name power.js
nesyphlopanuri
Ran das, nichts gefunden.
Travis Reeder
0

So habe ich es auf meinem Arch Linux mit Gnome als DE gemacht:

#!/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

Das Wort ACADin STATUS=$(cat /sys/class/power_supply/ACAD/online)wird sich je nach Hersteller des Laptops ändern. Hier können Sie feststellen, ob Ihre Runde an einen AC-Adapter angeschlossen ist oder nicht. So sieht meine Crontab aus:

* * * * * bash <path to script>

Vergessen Sie nicht, das Skript mit ausführbar zu machen chmod u+x <path to script>

daltonfury42
quelle
0

Dieses einfache acpiPaket funktioniert gut für mich, da nur ein einfaches Paket installiert werden muss (keine Deamons, bestimmte Desktop-Umgebungen oder ähnliches).

Geben Sie in Ihrem Benutzer crontab ( crontab -e) Folgendes ein (alles in einer Zeile, wird hier zur besseren Lesbarkeit aufgeteilt):

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

Überprüfen Sie den Ladezustand des Akkus ( acpi --battery), und wenn Sie nicht mit dem Ladegerät verbunden sind ( /Discharging/) und der Ladezustand des Akkus < 15% ist, wird alle 3 Minuten ( */3) eine Meldung über angezeigt, zenityum Sie zu nerven.

Anstelle von zenity könnten Sie stattdessen xmessage(auf einem wirklich spartanischen Computer) oder sogar so etwas wie aplay -q /usr/lib/libreoffice/share/gallery/sounds/cow.wavAudio-Benachrichtigungen verwenden (was den Vorteil hat, dass das Eingeben der Tastatur nicht unterbrochen wird und sogar für Mehrbenutzer-Laptops mit mehreren Sessions funktioniert, bei denen DISPLAY=:0Hack ausgeführt wird würde versagen)

Wenn Sie den Computer auf einer bestimmten kritischen Ebene auch aussetzen / in den Ruhezustand versetzen müssen, lesen Sie diese Antwort

Matija Nalis
quelle
0

Laden Sie ein Applet namens BAMS herunter. Sie werden automatisch benachrichtigt, wenn der Akku einen von Ihnen festgelegten Ladezustand erreicht. Es ist die einfachste Lösung.

Pranay Saraiwala
quelle
0

Mit Hilfe aller Informationen aus allen Antworten hier habe ich ein Skript erstellt und es in ein Repository auf GitLab gestellt.

Es werden Benachrichtigungen angezeigt, wenn:

  • Ihr Kabel ist ausgesteckt und der Akku geht unter 30%
  • Ihr Kabel ist eingesteckt und der Akku geht über 80%

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

Beiträge, die dazu beitragen, dass es in einer Vielzahl von Umgebungen funktioniert, sind sehr willkommen.

Das Skript zum Zeitpunkt des Schreibens dieses:

#!/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.
# https://askubuntu.com/questions/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
quelle