Come posso ricevere un avviso quando la batteria sta per esaurirsi in Linux Mint?


31

Questo succede a me più di quanto vorrei ammettere, ma a volte non noto che la potenza si sta esaurendo poiché si presenta solo nella mia barra di stato, quindi il computer si chiude. Vorrei un grande avviso che mi avvisa prima che ciò accada. C'è un modo per avvisarmi? Ubuntu ha un bel popup che ti dice che sta diventando basso.


Configura il power manager dal tuo ambiente desktop per fare "qualcosa" - questo di solito può variare da "niente", oltre a "eseguire un comando", a "ibernazione" / "spegnimento".
peterph

Quale ambiente desktop?
Renan

1
@peterph Ho solo le opzioni "Spegni" e "Sospendi".
Travis Reeder,

@Renan in esecuzione Cinnamon.
Travis Reeder,

@TravisR mi dispiace, intendevo dire configurare il comportamento quando viene raggiunto il livello critico della batteria
peterph

Risposte:


26

scrivi una sceneggiatura!

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

quindi cron per eseguire ogni pochi minuti circa. Ma sì, se riesci a farlo attraverso la GUI, è probabilmente un modo molto migliore di farlo.


Questo metodo ha il vantaggio che si applicherà a qualsiasi combinazione di ambiente desktop / distro con un leggero ritocco.
Perkins,

Il modo migliore che ho trovato per "farlo attraverso la GUI" nel mio ambiente Cinnamon è aggiungere un'applet a un pannello: unix.stackexchange.com/a/353505/37552
Michael Scheper

7

ri: la risposta di hdgarrood, che si è messa cronin fuga notify-sendsi è rivelata dolorosamente schizzinosa. (Penso crontab -eche persista per tutti i riavvi per impostazione predefinita, per fortuna). Ho seguito diverse guide, non sono sicuro di cosa sia stato corretto alla fine, ma ecco la mia configurazione completa per l'esecuzione del controllo ogni 5 minuti:

$ 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

Assicurati chmod +xdegli script bash.


5

Ora eseguo quanto segue:

$ 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

Come puoi vedere questo è solo il codice orangenarwhals con alcune modifiche:

  • nessun inganno dbus, in qualche modo non ne avevo bisogno
  • mettere alcune "costanti" in variabili all'inizio del codice
  • implementato avvisi solo quando la batteria non si sta caricando (dai un'occhiata man test, spiega come fare AND, tra le altre cose).
  • Icona aggiunto (trovare alcuni candidati nel sistema con qualcosa di simile: $ find /usr/share/icons/ -iname "*batt*low*")
  • scadenza in millisecondi

non dimenticare i chmod +xtuoi script, puoi quindi eseguirli direttamente da cron (tab), non è necessario sh.

(Funziona su Ubuntu usando Xmonad.)


3

Dal momento che apparentemente stai eseguendo Cinnamon, installa l' applet batteria con monitoraggio e spegnimento (BAMS) .

Fare clic con il tasto destro del mouse su un pannello → + Aggiungi applet al pannelloApplet disponibili (online) , digitare 'BAMS' nel widget di ricerca e installarlo e configurarlo.

Non è il più appariscente, ma finora mi ha già avvisato quando avevo involontariamente scollegato il mio laptop.


2

Minor twist - on Knoppix (concesso, non come nuovo usato da OP) notification-send non era disponibile (il pacchetto libnotify-bin non è installato), quindi invece l'ho trovato utile per l'avviso:

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

L'ho appena lanciato nel comando di allarme del pannello Battery Monitor di LXDE, senza bisogno di uno script.

Ciò presuppone che LibreOffice sia installato, ma che .wav emette un suono piacevole a bassa potenza. Praticamente non ci sono .ogg su Knoppix.


1
si potrebbe anche avere più bello zenityinvece xmesssagee aplayinvece dimplayer
Matija Nalis l'

1

Ho avuto lo stesso problema e ho trovato una soluzione alternativa. Ho installato dai repository Linux Mint un'app chiamata GKrellM. Controlla molte cose sul tuo computer e c'è la batteria. Installazione con allarmi, funziona per me come un incantesimo.

maggiori informazioni su:

http://www.gkrellm.net/


GKrellM non ha funzionato per me. È troppo vecchio e il sistema di notifica non funziona correttamente.
Bemipefe,

1

Il problema è correlato all'ambiente KDE. Ho lo stesso problema con MintMAYA KDE_version. Quando ho lavorato con Mint9_Gnome è apparso un pop-up molto utile quando è stato raggiunto un certo livello di basso consumo (out_of_the_box configurato automaticamente su nuove installazioni). Molto molto fastidioso essere chiuso senza consiglio e nessun aiuto fondato anche googling molto :(


1

Ho lo stesso problema ed è davvero frustrante. Ho risolto usando lo 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

Sto usando KDE ma puoi usarlo con ogni ambiente desktop. Non è necessario eseguirlo come utente root o impazzire con la sintassi crontab. È necessario modificare il suono di notifica solo se si desidera un avviso sonoro. Se non si desidera avviare automaticamente lo script all'avvio dell'ambiente desktop, inserire lo script nella cartella $ USER / bin con lo script BatteryAlertLauncher.sh :

#!/bin/bash

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

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

BatteryAlert.sh&

Assicurati che siano eseguibili:

chmod u+x $USER/bin/BatteryAlert*

Quindi esegui il seguente comando:

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

Puoi anche eseguire manualmente lo script di avviso da bash immettendo questo comando:

BatteryAlertLauncher.sh

0

Dato che non ho installato Gnome Shell o Cinnamon, non posso essere di aiuto diretto in quanto l'accesso alla fonte potrebbe essere molto pratico poiché è piuttosto semplice aggiungere un'estensione così rudimentale con JavaScript.

Dovresti aprire:

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

e cerca percentText : successivamente dovresti essere in grado di aggiungere un messaggio pop-up o un avviso.


Interessante, non sapevo che questa roba è in JavaScript. Ma nessuna directory / status e nessun power.js che posso trovare ovunque nelle directory / cinnamon / js.
Travis Reeder,

Hai provato a cercarlo dalla radice usando:find / -type f -name power.js
nesyphlopanuri il

Ho funzionato, non ho trovato nulla.
Travis Reeder,

0

Ecco come l'ho fatto sul mio Arch Linux con Gnome come 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

La parola ACADin STATUS=$(cat /sys/class/power_supply/ACAD/online)cambierà a seconda della marca del laptop. Viene utilizzato per verificare se il proprio giro è collegato o meno a un adattatore CA. Ecco come appare il mio crontab:

* * * * * bash <path to script>

Non dimenticare di rendere eseguibile lo script con chmod u+x <path to script>


0

Questo semplice funziona bene per me, con solo un semplice acpipacchetto che deve essere installato (senza deamon, ambienti desktop specifici o simili).

Nel tuo utente crontab ( crontab -e) inserisci quanto segue (tutto in una riga, è diviso per leggibilità qui):

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

Quello che fa è controllare il livello della batteria ( acpi --battery) e se non sei collegato al caricabatterie ( /Discharging/) e se la batteria è < 15%, ogni 3 minuti ( */3) visualizzerà il messaggio tramite zenityper avvisarti.

Invece di zenity potresti invece usare xmessage(su macchine davvero spartane) o anche qualcosa di simile aplay -q /usr/lib/libreoffice/share/gallery/sounds/cow.wavalle notifiche audio (che hanno il vantaggio che non interromperà la digitazione della tastiera e funzionerà anche per laptop multiutente con sessioni multiple, in cui DISPLAY=:0hack fallirebbe)

Se è inoltre necessario sospendere / ibernare la macchina a un determinato livello critico, vedere questa risposta


0

Scarica un'applet chiamata BAMS. Ti avviserà automaticamente quando la batteria raggiunge un certo livello deciso da te. È la soluzione più semplice.


0

Con l'aiuto di tutte le informazioni di tutte le risposte qui ho creato uno script e messo in un repository su GitLab.

Mostrerà le notifiche quando:

  • Il cavo è scollegato e la batteria scende al di sotto del 30%
  • Il cavo è collegato e la batteria supera l'80%

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

I contributi per farlo funzionare su una più ampia gamma di ambienti sono i benvenuti.

La sceneggiatura al momento della stesura di questo:

#!/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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.