По сути, я хотел бы этот комментарий в рабочий ответ.
Я знаю, как извлечь процент заряда батареи из Как проверить состояние батареи с помощью терминала? :
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
Шаг один: сделайте пополудни - приостанавливают доступный для всех пользователей, никакой пароль не спросил
, Делают 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 и нажмите серую галочку к левой стороне моего ответа!
За Ваше здоровье!
Я сделал подобный сценарий для своего 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