Como monitorar a condição da bateria e a notificação pop-up?

3

Essencialmente, eu gostaria de este comentário em uma resposta de trabalho.

Eu sei como extrair a porcentagem de bateria de Como verificar o status da bateria usando o terminal? :

upower -i $(upower -e | grep BAT) | grep --color=never -E percentage|xargs|cut -d' ' -f2|sed s/%//

E como exibir uma notificação básica:

notify-send "battery low"

Mas como posso configurar um script (bash?) para monitorar permanentemente a saída e enviar notificações de acordo com esse pseudo-código:

se battery_status < 10% então notify-send "battery low" e colocar meu sistema no estado suspenso sudo pm-suspend

    
por landroni 30.03.2015 / 22:46

2 respostas

4

Etapa 1: torne o pm-suspend acessível para todos os usuários, sem solicitação de senha

Faça sudo visudo e adicione esta linha no final do arquivo: yourusername ALL=NOPASSWD: /usr/sbin/pm-suspend

Fonte: Como executo comandos específicos do sudo sem uma senha?

Etapa 2: criar o arquivo batwatch.desktop:

Este é o arquivo que iniciará automaticamente o script de monitoramento. O arquivo deve ser armazenado na pasta $HOME/.config/autostart/ .

[Desktop Entry]
Type=Application
Exec=/home/serg/bin/batwatch.sh
Hidden=false
NoDisplay=false
Name=Battery Monitor Script

Observe que o script está na minha pasta /home/serg/bin . Você pode usar qualquer pasta que desejar, mas, para os padrões / usr / bin ou / home / username / bin, seria mais preferível.

Fonte: Como executar um script na inicialização

Etapa três: crie o script real, salve no mesmo local que Exec = line

Aqui está o script atual. Observe, estou usando o bash lá, mas também deve funcionar com o shell korn. Eu adicionei alguns comentários, então leia aqueles para entender o que o script faz exatamente

#!/bin/bash

# Check if the battery is connected
if [ -e /sys/class/power_supply/BAT1 ]; then

    # this line is for debugging mostly. Could be removed
    #notify-send --icon=info "STARTED MONITORING BATERY"
    zenity --warning --text "STARTED MONITORING BATERY"

    while true;do   
            # Get the capacity
            CAPACITY=$( cat /sys/class/power_supply/BAT1/uevent | grep -i capacity | cut -d'=' -f2 )

            case $CAPACITY in
            # do stuff when we hit 11 % mark
            [0-9]|11)
                # send warning and suspend only if battery is discharging
                # i.e., no charger connected
                STATUS=$(  cat /sys/class/power_supply/BAT1/uevent | grep -i status | cut -d'=' -f2 )
                 if [ $(echo $STATUS) == "Discharging" ]; then

                    #notify-send --urgency=critical --icon=dialog-warning "LOW BATTERY! SUSPENDING IN 30 sec"
                    zenity --warning --text "LOW BATTERY! SUSPENDING IN 30 sec"
                    sleep 30
                    gnome-screensaver-command -l && sudo pm-suspend
                    break
                 fi
                ;;
            *)
            sleep 1
                continue
                ;;
            esac
    done
fi

Passo quatro: reinicie e teste se o script funciona

Para isso você pode ajustar o número [0-9]|11) para qualquer valor que você goste, por exemplo, 65) para suspender em 65%. O você suspenderá somente se você não estiver conectado à fonte de alimentação (ou seja, não está carregando).

Deixe-me saber se você gosta disso, e se funcionar, não se esqueça de fazer um upvote e clicar na marca cinza no lado esquerdo da minha resposta!

Felicidades!

    
por Sergiy Kolodyazhnyy 31.03.2015 / 01:16
1

Eu fiz um script semelhante para o meu Vaio me notificar quando a bateria fica totalmente carregada. Eu usei UPOWER para me fornecer as atualizações do estado da bateria e extraí a seção relacionada dessas. Aqui está o código:

#!/bin/bash

while true;do 

STATE=$( upower -i /org/freedesktop/UPower/devices/battery_BAT0 | grep "state:" | cut -b 26- )

if [ $STATE = "fully-charged" ]
then 

zenity --info --text "Battery Full!"
break

fi

done
    
por Rubal 10.07.2016 / 20:22