Como posso receber um alerta quando minha bateria está prestes a acabar no Linux Mint?

31

Isso acontece comigo mais do que eu gostaria de admitir, mas às vezes não percebo que a energia está diminuindo, pois aparece apenas na minha barra de status e, em seguida, o computador é encerrado. Eu gostaria de um grande alerta que me avise antes que isso aconteça. Existe alguma maneira de me alertar? O Ubuntu tem um bom pop-up que informa que está ficando baixo.

Travis Reeder
fonte
Configure o gerenciador de energia do seu ambiente de área de trabalho para fazer "algo" - isso geralmente pode variar de "nada", sobre "executar um comando" até "hibernar" / "desligar".
Peterph
Qual ambiente de área de trabalho?
Renan
11
@ Peter Eu só tenho as opções "Desligar" e "Hibernar".
Travis Reeder
@ Renan rodando Canela.
Travis Reeder
@TravisR desculpe, eu quis dizer configure o comportamento quando o nível de bateria crítica é alcançada
peterph

Respostas:

26

escreva um roteiro!

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

em seguida, agende-o para que seja executado a cada poucos minutos. Mas sim, se você pode fazer isso através da GUI, provavelmente é uma maneira muito melhor de fazê-lo.

hdgarrood
fonte
Esse método tem a vantagem de ser aplicado a praticamente qualquer combinação de ambiente de distro / área de trabalho com alguns ajustes.
Perkins
A melhor maneira que eu encontrei para 'fazê-lo através do GUI' no meu ambiente de canela é adicionar um applet a um painel: unix.stackexchange.com/a/353505/37552
Michael Scheper
7

A resposta de re: hdgarrood, definir cronpara executar, notify-sendna verdade, mostrou-se dolorosamente exigente. (Eu acho crontab -eque persiste nas reinicializações por padrão, felizmente). Segui vários guias, não sei ao certo o que exatamente foi corrigido no final, mas aqui está minha configuração completa para executar o verificador a 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

Verifique chmod +xos scripts bash.

orangenarwhals
fonte
5

Agora, execute o seguinte:

$ 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 você pode ver, este é apenas o código orangenarwhals com algumas alterações:

  • sem truques de dbus, de alguma forma eu não precisava disso
  • coloque algumas "constantes" em variáveis ​​no início do código
  • avisos implementados apenas quando a bateria não está carregando (veja man test, explica como fazer ANDs, entre outras coisas).
  • ícone adicionado (encontre alguns candidatos no seu sistema com algo como $ find /usr/share/icons/ -iname "*batt*low*":)
  • tempo de expiração em milissegundos

não se esqueça dos chmod +xscripts, você pode executá-los diretamente do cron (tab), sem necessidade sh.

(Isso funciona no Ubuntu usando o Xmonad.)

Higemaru
fonte
3

Como você aparentemente está executando o Cinnamon, basta instalar o Applet de Bateria com Monitoramento e Desligamento (BAMS) .

Clique com o botão direito do mouse em um painel → + Adicionar applets ao painelApplets disponíveis (online) , digite 'BAMS' no widget de pesquisa e instale e configure-o.

Não é o mais chamativo, mas até agora já me alertou quando meu laptop foi desconectado sem querer.

Michael Scheper
fonte
2

Torção menor - no Knoppix (concedido, não Mint, conforme usado pelo OP), o notify-send não estava disponível (o pacote libnotify-bin não está instalado); portanto, achei útil para o alerta:

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

Acabei de jogar isso no comando Alarm do painel Battery Monitor do LXDE, sem a necessidade de um script.

Isso pressupõe que você tenha o LibreOffice instalado, mas que .wav produz um som agradável de baixa potência. Praticamente não há .ogg no Knoppix.

Randall
fonte
11
pode-se também ter melhor em zenityvez de xmesssagee em aplayvez demplayer
Matija Nalis
1

Eu tive o mesmo problema e descobri uma solução alternativa. Instalei nos repositórios do Linux Mint um aplicativo chamado GKrellM. Ele monitora muitas coisas em sua máquina e há bateria. Instalação com alarmes, funciona para mim como um encanto.

mais informações em:

http://www.gkrellm.net/

Marcello
fonte
GKrellM não funcionou para mim. É muito antigo e o sistema de notificação não funciona corretamente.
Bemipefe 03/09/2015
1

O problema está relacionado no ambiente do KDE. Eu tenho o mesmo problema com o MintMAYA KDE_version. Quando trabalhei com o Mint9_Gnome, um pop-up muito útil apareceu quando um certo nível de baixa potência foi atingido (saída_de_the_box configurada automaticamente em novas instalações). Muito, muito chato ser desligado sem aconselhamento e sem ajuda, mesmo pesquisando muito no Google :(

Symb932
fonte
1

Eu tenho o mesmo problema e é realmente frustrante. Eu resolvi usando o 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

Estou usando o KDE, mas você pode usá-lo em todos os ambientes de desktop. Você não precisa executar isso como usuário root ou enlouquecer com a sintaxe do crontab. Você só precisa alterar o som da notificação se desejar um alerta sonoro. Se você não deseja iniciar o script automaticamente quando o ambiente da área de trabalho começar, coloque o script na pasta $ USER / bin com o script BatteryAlertLauncher.sh :

#!/bin/bash

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

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

BatteryAlert.sh&

Verifique se eles são executáveis:

chmod u+x $USER/bin/BatteryAlert*

Em seguida, basta executar o seguinte comando:

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

Você também pode executar o script de alerta manualmente a partir do bash digitando este comando:

BatteryAlertLauncher.sh
Bemipefe
fonte
0

Como não tenho o Gnome Shell ou o Cinnamon instalado, não posso ajudar diretamente, pois o acesso à fonte seria muito prático, pois é muito fácil adicionar uma extensão tão rudimentar ao JavaScript.

Você deve abrir:

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

e pesquise percentText - posteriormente, você poderá adicionar uma mensagem ou alerta pop-up.

nesyphlopanuri
fonte
Interessante, não sabia que esse material está em javascript. Mas no diretório / status e no power.js eu posso encontrar em qualquer lugar nos diretórios / canela / js.
Travis Reeder
Você tentou pesquisá-lo a partir do root usando:find / -type f -name power.js
nesyphlopanuri
Ran que, nada foi encontrado.
Travis Reeder
0

Foi assim que fiz no meu Arch linux com o 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

A palavra ACADem STATUS=$(cat /sys/class/power_supply/ACAD/online)vão mudar dependendo do laptop make. É usado para descobrir se o seu colo está conectado a um ADAPter CA ou não. Aqui está como meu crontab se parece:

* * * * * bash <path to script>

Não esqueça de tornar o script executável com chmod u+x <path to script>

daltonfury42
fonte
0

Este simples funciona bem para mim, com apenas um acpipacote simples necessário para ser instalado (sem demônios, ambientes de desktop específicos ou similares).

No seu usuário crontab ( crontab -e), coloque o seguinte (tudo em uma linha, é dividido aqui para facilitar a leitura):

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

O que faz é verificar o nível da bateria ( acpi --battery) e se você não estiver conectado ao carregador ( /Discharging/) e se a bateria for < 15%, a cada 3 minutos ( */3) será exibida uma mensagem zenitypara avisá-lo.

Em vez de zenity, você poderia usar xmessage(em uma máquina realmente espartana) ou até algo parecido aplay -q /usr/lib/libreoffice/share/gallery/sounds/cow.wavcom notificações por áudio (que têm a vantagem de não interromper a digitação do teclado e funcionar até em laptops multiusuário com várias sessões, onde DISPLAY=:0hackear falharia)

Se você também precisar suspender / hibernar a máquina em determinado nível crítico, consulte esta resposta

Matija Nalis
fonte
0

Faça o download de um applet chamado BAMS. Ele o alertará automaticamente quando a bateria atingir um determinado nível decidido por você. É a solução mais simples.

Pranay Saraiwala
fonte
0

Com a ajuda de todas as informações de todas as respostas aqui, criei um script e o coloquei em um repositório no GitLab.

Ele exibirá notificações quando:

  • O cabo está desconectado e a bateria fica abaixo de 30%
  • Seu cabo está conectado e a bateria fica acima de 80%

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

Contribuições para fazê-lo funcionar em uma ampla variedade de ambientes são muito bem-vindas.

O script no momento da escrita deste:

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