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

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

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

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

2 ответа

Решение

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

Делать 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.

Источник: Как запустить скрипт при запуске

Шаг третий: создать реальный скрипт, сохранить в том же месте, что и Exec= строка

Вот реальный сценарий. Заметьте, я использую bash там, но он также должен работать с оболочкой 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%. Вы будете приостановлены, только если вы не подключены к источнику питания (то есть, не заряжается).

Дайте мне знать, если вам это нравится, и если это сработает, обязательно добавьте комментарий и нажмите на серую галочку слева от моего ответа!

Ура!

Я сделал аналогичный скрипт для моего 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
Другие вопросы по тегам