Jak mogę otrzymać powiadomienie, gdy moja bateria wkrótce umrze w Linux Mint?


31

Zdarza mi się to bardziej, niż chciałbym przyznać, ale czasami nie zauważam, że moc się wyczerpuje, ponieważ pojawia się tylko na pasku stanu, a następnie komputer po prostu wychodzi. Chciałbym duży alert, który ostrzega mnie przed tym. Czy jest jakiś sposób, aby mnie zaalarmować? Ubuntu ma ładne okienko wyskakujące, które mówi ci, że robi się mało.


Skonfiguruj menedżera zasilania ze środowiska pulpitu, aby robił „coś” - zwykle może to być „nic”, „uruchom polecenie”, „hibernacja” / „wyłącz”.
peterph

Jakie środowisko pulpitu?
Renan,

1
@peterph Mam tylko opcje „Wyłącz” i „Hibernuj”.
Travis Reeder,

@Renan z cynamonem.
Travis Reeder,

@TravisR przepraszam, chciałem powiedzieć, aby skonfigurować zachowanie po osiągnięciu krytycznego poziomu naładowania baterii
Peter

Odpowiedzi:


26

napisz skrypt!

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

następnie przekręć go, aby uruchamiał się co kilka minut. Ale tak, jeśli możesz to zrobić za pomocą GUI, prawdopodobnie jest to o wiele lepszy sposób.


Ta metoda ma tę zaletę, że będzie miała zastosowanie do dowolnej kombinacji środowiska dystrybucyjnego / pulpitu z niewielkim dopracowaniem.
Perkins

Najlepszym sposobem, w jaki udało mi się „zrobić to przez GUI” w moim środowisku Cinnamon, jest dodanie apletu do panelu: unix.stackexchange.com/a/353505/37552
Michael

7

re: odpowiedź hdgarrooda, ustawienie crondo uruchomienia notify-sendokazało się boleśnie wybredne. (Myślę, że crontab -edomyślnie utrzymuje się po ponownym uruchomieniu komputera, na szczęście). Postępowałem zgodnie z kilkoma przewodnikami, nie jestem pewien, co to ostatecznie naprawiło, ale oto moja pełna konfiguracja do uruchamiania sprawdzania co 5 minut:

$ 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

Pamiętaj o chmod +xskryptach bash.


5

Teraz wykonuję następujące czynności:

$ 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

Jak widać, jest to tylko kod orangenarwhals z pewnymi zmianami:

  • żadnych sztuczek z dbus, jakoś nie potrzebowałem
  • umieść niektóre „stałe” w zmiennych na początku kodu
  • zaimplementowane ostrzeżenia tylko wtedy, gdy akumulator się nie ładuje (spójrz na man test, wyjaśnia między innymi, jak wykonywać operacje AND).
  • dodana ikona (znaleźć kandydatów w systemie z czymś takim: $ find /usr/share/icons/ -iname "*batt*low*")
  • czas ważności w milisekundach

nie zapomnij o chmod +xswoich skryptach, możesz je uruchomić bezpośrednio z crona (tab), bez potrzeby sh.

(Działa to na Ubuntu przy użyciu Xmonada.)


3

Ponieważ najwyraźniej używasz Cinnamon, po prostu zainstaluj aplet baterii z funkcją monitorowania i wyłączania (BAMS) .

Kliknij panel prawym przyciskiem myszy → + Dodaj aplety do paneluDostępne aplety (online) , wpisz „BAMS” w widżecie wyszukiwania oraz zainstaluj i skonfiguruj.

To nie jest najbardziej błyskotliwy, ale do tej pory już mnie powiadomił, gdy nieświadomie odłączyłem laptopa.


2

Drobny zwrot akcji - na Knoppix (przyznane, nie Mint używany przez OP) powiadomienie-wysyłanie nie było dostępne (pakiet libnotify-bin nie jest zainstalowany), więc zamiast tego uznałem to za przydatne dla alertu:

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

Właśnie wrzuciłem to do polecenia alarmu w panelu Monitor baterii w LXDE, bez potrzeby pisania skryptu.

Zakłada się, że masz zainstalowaną LibreOffice, ale ten .wav zapewnia przyjemny dźwięk o niskiej mocy. W Knoppixie praktycznie nie ma plików .ogg.


1
można też mieć ładniej zenityzamiast xmesssagei aplayzamiastmplayer
Matija Nalis

1

Miałem ten sam problem i wymyśliłem obejście. Zainstalowałem z repozytoriów Linux Mint aplikację o nazwie GKrellM. Monitoruje wiele rzeczy na twoim komputerze i jest bateria. Konfiguracja z alarmami, działa dla mnie jak urok.

więcej informacji na:

http://www.gkrellm.net/


GKrellM nie działał dla mnie. Jest za stary i system powiadomień nie działa poprawnie.
Bemipefe

1

Problem dotyczy środowiska KDE. Mam ten sam problem z MintMAYA KDE_version. Kiedy pracowałem z Mint9_Gnome, pojawiło się bardzo przydatne okno pop-up, gdy osiągnięto pewien poziom niskiego poboru mocy (automatycznie konfigurowany out_of_the_box przy nowych instalacjach). Bardzo irytujące jest zamykanie bez porady i bez pomocy nawet dużo googli :(


1

Mam ten sam problem i to jest naprawdę frustrujące. Rozwiązałem za pomocą skryptu 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

Używam KDE, ale możesz go używać z każdym środowiskiem graficznym. Nie musisz uruchamiać tego jako użytkownik root ani zwariować na punkcie składni crontab. Wystarczy zmienić dźwięk powiadomienia, jeśli chcesz otrzymać dźwiękowy alert. Jeśli nie chcesz uruchamiać skryptu automatycznie po uruchomieniu środowiska pulpitu, umieść skrypt w folderze $ USER / bin za pomocą skryptu BatteryAlertLauncher.sh :

#!/bin/bash

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

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

BatteryAlert.sh&

Upewnij się, że są one wykonywalne:

chmod u+x $USER/bin/BatteryAlert*

Następnie uruchom następujące polecenie:

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

Możesz także uruchomić skrypt alertów ręcznie z bash, wprowadzając następujące polecenie:

BatteryAlertLauncher.sh

0

Ponieważ nie mam zainstalowanej Gnome Shell ani Cinnamon, nie mogę bezpośrednio pomóc, ponieważ dostęp do źródła mógłby być bardzo praktyczny, ponieważ dość proste jest dodanie tak podstawowego rozszerzenia z JavaScript.

Powinieneś otworzyć:

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

i wyszukaj tekst odsetek - następnie powinieneś być w stanie dodać wyskakującą wiadomość lub alert.


Interesujące, nie wiedziałem, że te rzeczy są w javascript. Ale bez katalogu / status i bez power.js nie mogę znaleźć nigdzie w katalogach / cinnamon / js.
Travis Reeder,

Czy próbowałeś wyszukać go z katalogu głównego przy użyciu:find / -type f -name power.js
nesyphlopanuri

Przebiegłem, nic nie znaleziono.
Travis Reeder

0

Tak to zrobiłem na moim Arch Linuxie z Gnome jako 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

Słowo ACADw STATUS=$(cat /sys/class/power_supply/ACAD/online)zmienia się w zależności od marki laptopa. Służy do sprawdzenia, czy twoje kolano jest podłączone do zasilacza sieciowego, czy nie. Oto jak wygląda mój crontab:

* * * * * bash <path to script>

Nie zapomnij, aby skrypt był wykonywalny chmod u+x <path to script>


0

Ten prosty działa dla mnie ładnie, wystarczy acpizainstalować prosty pakiet (bez diamonów, specyficznych środowisk pulpitu itp.).

W twoim crontab ( crontab -e) umieść następujące (wszystko w jednym wierszu, tutaj jest podzielone dla czytelności):

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

Sprawdza poziom naładowania baterii ( acpi --battery), a jeśli nie masz połączenia z ładowarką ( /Discharging/), a jeśli bateria jest w < 15%, co 3 minuty ( */3) wyświetla się komunikat zenityo błędzie.

Zamiast zenity możesz zamiast tego użyć xmessage(na naprawdę spartańskiej maszynie) lub nawet czegoś w rodzaju aplay -q /usr/lib/libreoffice/share/gallery/sounds/cow.wavpowiadomień dźwiękowych (które mają tę zaletę, że nie będą przerywać pisania na klawiaturze i będą działać nawet dla laptopów z wieloma użytkownikami z wieloma sesjami, w których DISPLAY=:0włamują się nie powiedzie się)

Jeśli musisz także zawiesić / hibernować maszynę na określonym poziomie krytycznym, zapoznaj się z tą odpowiedzią


0

Pobierz aplet o nazwie BAMS. Zaalarmuje cię automatycznie, gdy bateria osiągnie określony przez ciebie poziom. To najprostsze rozwiązanie.


0

Za pomocą wszystkich informacji z wszystkich odpowiedzi tutaj utworzyłem skrypt i umieściłem go w repozytorium na GitLab.

Wyświetli powiadomienia, gdy:

  • Twój kabel jest odłączony, a bateria spada poniżej 30%
  • Twój kabel jest podłączony, a bateria przekracza 80%

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

Bardzo mile widziane są wkłady, dzięki którym działa on w szerszym zakresie środowisk.

Skrypt w momencie pisania tego:

#!/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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.