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