¿Cómo puedo recibir una alerta cuando mi batería está a punto de agotarse en Linux Mint?

31

Esto me sucede más de lo que me gustaría admitir, pero a veces no noto que la energía se está agotando, ya que solo aparece en mi barra de estado, luego la computadora simplemente se apaga. Quisiera una gran alerta que me avise antes de que esto suceda. ¿Hay alguna forma de que me avise? Ubuntu tiene una buena ventana emergente que te dice que se está agotando.

Travis Reeder
fuente
Configure el administrador de energía desde su entorno de escritorio para que haga "algo". Esto generalmente puede variar desde "nada", sobre "ejecutar un comando", hasta "hibernar" / "apagar".
Peter
¿Qué entorno de escritorio?
Renan
1
@peterph Solo tengo las opciones "Apagar" e "Hibernar".
Travis Reeder
@Renan corriendo canela.
Travis Reeder
@TravisR lo siento, quise decir configurar el comportamiento cuando se alcanza el nivel crítico de batería
peterph

Respuestas:

26

escribe un guion!

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

luego cronéelo para que se ejecute cada pocos minutos más o menos. Pero sí, si puedes hacerlo a través de la GUI, esa es probablemente una forma mucho mejor de hacerlo.

hdgarrood
fuente
Este método tiene la ventaja de que se aplicará a casi cualquier combinación de entorno de distribución / escritorio con un pequeño ajuste.
Perkins
La mejor manera que he encontrado para 'hacerlo a través de la GUI' en mi entorno Cinnamon es agregar un applet a un panel: unix.stackexchange.com/a/353505/37552
Michael Scheper
7

La respuesta de re: hdgarrood, la configuración cronpara ejecutarse notify-sendresultó ser dolorosamente delicada. (Creo crontab -eque persiste en los reinicios de forma predeterminada, afortunadamente). Seguí varias guías, no estoy seguro de qué lo solucionó exactamente al final, pero aquí está mi configuración completa para ejecutar el verificador cada 5 minutos:

$ 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

Asegúrese de chmod +xlas secuencias de comandos bash.

orangenarwhals
fuente
5

Ahora ejecuto lo siguiente:

$ 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

Como puede ver, esto es solo un código de orangenarwhals con algunos cambios:

  • sin trucos de dbus, de alguna manera no lo necesitaba
  • poner algunas "constantes" en las variables al comienzo del código
  • advertencias implementadas solo cuando la batería no se está cargando (eche un vistazo man test, explica cómo hacer AND, entre otras cosas).
  • icono añadido (Encontrar algunos candidatos en su sistema con algo como: $ find /usr/share/icons/ -iname "*batt*low*")
  • tiempo de expiración en milisegundos

no se olvide de chmod +xsus scripts, puede ejecutarlos directamente desde cron (pestaña), sin necesidad de hacerlo sh.

(Esto funciona en Ubuntu usando Xmonad).

Higemaru
fuente
3

Como aparentemente está ejecutando Cinnamon, simplemente instale Battery Applet con monitoreo y apagado (BAMS) .

Haga clic derecho en un panel → + Agregar applets al PanelApplets disponibles (en línea) , escriba 'BAMS' en el widget de búsqueda, e instálelo y configúrelo.

No es el más llamativo, pero hasta ahora ya me alertó cuando desconecté involuntariamente mi computadora portátil.

Michael Scheper
fuente
2

Menor giro: en Knoppix (concedido, no Mint como lo usa OP), el envío de notificaciones no estaba disponible (el paquete libnotify-bin no está instalado), por lo que encontré esto útil para la alerta:

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

Acabo de incluir eso en el comando de alarma del panel Monitor de batería de LXDE, sin necesidad de un script.

Eso supone que tiene instalado LibreOffice, pero que .wav produce un sonido agradable de baja potencia. Prácticamente no hay .ogg's en Knoppix.

Randall
fuente
1
uno también podría tener mejor en zenitylugar de xmesssagey en aplaylugar demplayer
Matija Nalis
1

Tuve el mismo problema y descubrí una solución alternativa. Instalé desde los repositorios de Linux Mint una aplicación llamada GKrellM. Monitorea muchas cosas en su máquina y hay batería. Configuración con alarmas, me funciona a las mil maravillas.

Más información en:

http://www.gkrellm.net/

Marcello
fuente
GKrellM no funcionó para mí. Es demasiado viejo y el sistema de notificación no funciona correctamente.
Bemipefe
1

El problema está relacionado con el entorno de KDE. Tengo el mismo problema con MintMAYA KDE_version. Cuando trabajé con Mint9_Gnome, apareció una ventana emergente muy útil cuando se alcanzó un cierto nivel de baja potencia (configuración automática out_of_the_box en instalaciones nuevas). Muy, muy molesto ser cerrado sin consejo y sin ayuda fundada incluso googlear mucho

Symb932
fuente
1

Tengo el mismo problema y es realmente frustrante. Lo resolví usando el 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

Estoy usando KDE pero puedes usarlo con cualquier entorno de escritorio. No tiene que ejecutar esto como usuario root o volverse loco con la sintaxis de crontab. Solo necesita cambiar el sonido de notificación si desea una alerta de sonido. Si no desea iniciar el script automáticamente cuando se inicia el entorno de escritorio, coloque el script en la carpeta $ USER / bin con el script BatteryAlertLauncher.sh :

#!/bin/bash

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

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

BatteryAlert.sh&

Asegúrese de que sean ejecutables:

chmod u+x $USER/bin/BatteryAlert*

Luego solo ejecuta el siguiente comando:

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

También puede ejecutar el script de alerta manualmente desde bash ingresando este comando:

BatteryAlertLauncher.sh
Bemipefe
fuente
0

Como no tengo instalado Gnome Shell o Cinnamon, no puedo ser de ayuda directa ya que acceder a la fuente podría ser muy práctico, ya que es bastante fácil agregar una extensión tan rudimentaria con JavaScript.

Debes abrir:

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

y busque el porcentaje de texto ; posteriormente, debería poder agregar un mensaje emergente o alerta.

nesyphlopanuri
fuente
Interesante, no sabía que estas cosas están en javascript. Pero no hay / directorio de estado y no power.js que puedo encontrar en cualquier lugar en los directorios / cinnamon / js.
Travis Reeder
¿Has intentado buscarlo desde la raíz utilizando:find / -type f -name power.js
nesyphlopanuri
Corrió eso, no se encontró nada.
Travis Reeder
0

Así es como lo hice en mi Arch Linux con Gnome como 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 palabra ACADen STATUS=$(cat /sys/class/power_supply/ACAD/online)cambiará dependiendo de la marca del ordenador portátil. Se utiliza para determinar si su regazo está conectado a un adaptador de CA o no. Así es como se ve mi crontab:

* * * * * bash <path to script>

No olvide hacer que el script sea ejecutable con chmod u+x <path to script>

daltonfury42
fuente
0

Este simple funciona muy bien para mí, solo se acpinecesita instalar un paquete simple (sin demonios, entornos de escritorio específicos o similares).

En su usuario crontab ( crontab -e) ponga lo siguiente (todo en una línea, se divide para facilitar la lectura aquí):

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

Lo que hace es verificar el nivel de la batería ( acpi --battery) y si no está conectado al cargador ( /Discharging/) y si la batería es < 15%, cada 3 minutos ( */3) mostrará un mensaje zenitypara molestarlo.

En lugar de zenity, podría usar xmessage(en una máquina realmente espartana) o incluso algo así como aplay -q /usr/lib/libreoffice/share/gallery/sounds/cow.wavnotificaciones de audio (que tienen la ventaja de que no interrumpirá la escritura de su teclado y funcionará incluso para computadoras portátiles multiusuario con múltiples sesiones, donde DISPLAY=:0piratear fallaría)

Si también necesita suspender / hibernar la máquina en cierto nivel crítico, vea esta respuesta

Matija Nalis
fuente
0

Descargue un applet llamado BAMS. Le alertará automáticamente cuando la batería alcance un cierto nivel decidido por usted. Es la solución más simple.

Pranay Saraiwala
fuente
0

Con la ayuda de toda la información de todas las respuestas aquí, creé un script y lo puse en un repositorio en GitLab.

Mostrará notificaciones cuando:

  • Su cable está desconectado y la batería está por debajo del 30%
  • Su cable está enchufado y la batería supera el 80%

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

Las contribuciones para que funcione en una gama más amplia de entornos son muy bienvenidas.

El guión al momento de escribir esto:

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