Как контролировать состояние батареи и всплывающие уведомления?

По сути, я хотел бы этот комментарий в рабочий ответ.

Я знаю, как извлечь процент заряда батареи из Как проверить состояние батареи с помощью терминала? :

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

И как вызвать основное уведомление:

notify-send "battery low"

Но как я могу настроить скрипт (bash?) Для постоянного мониторинга вывода и отправки уведомления в соответствии с этим псевдокодом:

если battery_status < 10%, то notify-send "battery low" и перевести мою систему в состояние ожидания sudo pm-suspend

4
задан 13 April 2017 в 15:24

2 ответа

Шаг один: сделайте пополудни - приостанавливают доступный для всех пользователей, никакой пароль не спросил

, Делают sudo visudo и добавляют эту строку в конце файла: yourusername ALL=NOPASSWD: /usr/sbin/pm-suspend

Источник: , Как я выполняю определенные команды sudo без пароля?

Шаг два: создайте batwatch.desktop файл:

Это - файл, который запустит автоматически контролирующий сценарий. Файл должен храниться в $HOME/.config/autostart/ папка.

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

Уведомление, что сценарий находится в моем /home/serg/bin папка. Можно использовать любую папку, которую Вы любите, но ради стандартов был бы более предпочтен/usr/bin или/home/username/bin.

Источник: , Как выполнить сценарий на запуске

Шаг three:create фактический сценарий, сохраните в том же месте как Должностное лицо =, строка

Вот является фактическим сценарием. Заметьте, я использую удар там, но он также должен работать с оболочкой Korn. Я добавил некоторые комментарии, таким образом, читает тех для понимания то, что сценарий делает точно

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

Шаг четыре: перезагрузка и тест, если сценарий работает

С этой целью, можно скорректировать номер [0-9]|11) к любому значению, которое Вы любите, например 65) для приостановки в 65%. Вы приостановят, только если Вы не подключены к источнику питания (т.е., не заряжаясь).

Сообщенный мне, если Вам нравится это, и если это работает, удостоверьтесь к upvote и нажмите серую галочку к левой стороне моего ответа!

За Ваше здоровье!

5
ответ дан 13 April 2017 в 15:24

Я сделал подобный сценарий для своего Vaio для уведомления меня, когда батарея становится полностью заряженной. Я использовал UPOWER, чтобы предоставить мне обновления на состоянии батареи и извлек связанный раздел из них. Вот код:

#!/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
2
ответ дан 13 April 2017 в 15:24

Другие вопросы по тегам:

Похожие вопросы: