Вопрос или проблема
Моя батарея снова вышла из строя в третий раз. Теперь я хочу установить сигнализацию, когда заряд батареи достигает 90%, чтобы я мог отключить её.
Может кто-то помочь мне настроить это?
Мне не нравится устанавливать дополнительные программы и утилиты на мой ноутбук, поэтому я рассматриваю решение без acpi
. Вдохновленный ответом @pomsky, ниже приведенные скрипты могут быть лучшим решением.
Обновление: Благодаря @mdebusk и @blaze-fire(krishan singh) он действительно определяет, если батарея уже полностью заряжена.
Для Gnome:
#!/bin/bash
while true
do
export DISPLAY=:0.0
battery_level=`cat /sys/class/power_supply/BAT0/capacity`
battery_status=`cat /sys/class/power_supply/BAT0/status`
if [ $battery_status = "Charging" ] && [ $battery_level -ge 85 ];
then
notify-send -u critical "Батарея полностью заряжена"
fi
sleep 120
done
Для KDE:
#!/bin/bash
while true
do
export DISPLAY=:0.0
battery_level=`cat /sys/class/power_supply/BAT0/capacity`
battery_status=`cat /sys/class/power_supply/BAT0/status`
if [ $battery_status = "Charging" ] && [ $battery_level -ge 85 ];
then
kdialog --msgbox "Батарея полностью заряжена" 5
fi
sleep 120
done
Как видите, единственное различие заключается в системах уведомлений KDE и Gnome. Мы используем возможности /sys/class/power_supply/BAT0/
вместо acpi
. Сделайте скрипт исполняемым: chmod +x SCRIPTNAME.sh
, затем добавьте его в автозагрузку.
Надеюсь, это поможет.
Это, возможно, не самый лучший способ, но вы можете сделать что-то вроде следующего.
-
Сначала вам понадобится
acpi
. Установите его, запустивsudo apt install acpi
-
Затем вам нужно создать скрипт bash. Создайте пустой текстовый файл, скажем,
battery-full.sh
и добавьте следующие строки#!/bin/bash while true do export DISPLAY=:0.0 battery_level=`acpi -b | grep -P -o '[0-9]+(?=%)'` if on_ac_power; then #проверка, подключен ли адаптер if [ $battery_level -ge 90 ]; then #проверка, превышает ли уровень заряда 90% notify-send -u critical "Пожалуйста, отключите адаптер сети" "Уровень заряда: ${battery_level}% (заряжен выше 90%)" -i battery-full-charged fi fi sleep 300 #подождите 300 секунд перед повторной проверкой done
- Сделайте скрипт исполняемым и запустите его. Вы получите постоянное уведомление, если батарея заряжается и уровень превышает 90%.
Вы также можете получить звуковое оповещение, добавив подходящую команду воспроизведения звука после команды notify-send
в вышеуказанном скрипте. Например, вы можете использовать команду play
из пакета sox
(для других вариантов смотрите это). Сначала установите её, запустив
sudo apt install sox
Затем измените строку notify-send
в скрипте следующим образом
notify-send -u critical "Пожалуйста, отключите адаптер сети" "Уровень заряда: ${battery_level}% (заряжен выше 90%)" -i battery-full-charged; play /path/to/audio-file
(Замените /path/to/audio-file
на действительный путь к реальному аудиофайлу, доступному в вашей системе).
Вы также можете рассмотреть возможность добавления скрипта в автозагрузку, чтобы он запускался автоматически каждый раз при загрузке вашего ноутбука.
Еще один вариант — установить ограничитель заряда батареи на, скажем, 60% до 80%, если вы не планируете брать её в поездку. Однако для моего ноутбука, по крайней мере, я могу изменить это только в Windows, как указывает этот ответ:
Причина, по которой ваша батарея может оставаться на уровне 70% и не заряжаться дальше, может быть связана с опцией под названием “Режим рабочего стола”, которая может быть включена. Режим рабочего стола помогает отключить зарядку батареи до 100%, чтобы максимизировать жизнь батареи. Эта опция также может быть отключена. Чтобы отключить эту опцию:
- Щелкните правой кнопкой мыши на значке батареи в области уведомлений Windows, затем выберите параметры Dell Extended Battery life Options
- Откроется диалоговое окно Battery Meter, нажмите на вкладку Desktop Mode
- Выберите опцию для отключения этой функции
- Затем нажмите OK
Я имею двойную загрузку Ubuntu и Windows 10, так что для меня не составляет труда изменить ограничитель заряда батареи. Я не знаю приложений, которые могут сделать это в Linux. Это могло бы стать небольшим хитом программы на С, которую я мог бы написать для своего первого путешествия в кодирование ядра Linux.
Развивая ответ @pornsky, вывод acpi не работал с кодом @pornsky, поэтому я немного его изменил. Следующий скрипт сделал свое дело для меня.
#!/bin/bash
while true
do
on_ac=`acpi | grep -o 'Charging'`
battery_level=`acpi -b| grep -P -o '\d+(?=%)'| sed -n 2p`
if [[ "$on_ac" == "Charging" ]]; then #проверка, подключен ли адаптер
if [ $battery_level -ge 90 ]; then #проверка, превышает ли уровень заряда 90%
notify-send -u critical "Пожалуйста, отключите адаптер сети" "Уровень заряда: ${battery_level}% (заряжен выше 90%)" -i battery-full-charged
fi
fi
sleep 300 #подождите 300 секунд перед повторной проверкой
done
Посмотрите его ответ для более детального объяснения
Развивая ответ @Regantos для KDE:
- Исправьте небольшие синтаксические ошибки, такие как отсутствие пробела в строке 9 и удалите
избыточные вложенные условия. - Теперь сделайте скрипт исполняемым с помощью
sudo chmod +x /path-to-script/
- Добавьте скрипт как скрипт входа в фоновый
сервисы в kubuntu, чтобы он запускался автоматически после входа в систему
Будьте осторожны при копировании скрипта, так как пробелы являются важными, поскольку они повлияют на вывод.
Примечание: Для воспроизведения аудио вам придется установить Sox
#!/bin/bash
while true
do
export DISPLAY=:0.0
battery_level=`cat /sys/class/power_supply/BAT1/capacity`
battery_status=`cat /sys/class/power_supply/BAT1/status`
if [ $battery_status = "Charging" ] && [ $battery_level -ge 85 ];
then
play /path-to-mp3-file; // для воспроизведения звука тревоги
kdialog --msgbox "Батарея полностью заряжена";
fi
sleep 120 // время ожидания
done
Вот улучшенная версия принимаемого ответа. Этот скрипт не уведомляет каждые 2 минуты и имеет кнопки действий.
#!/bin/bash
# Отправить уведомление, когда батарея полностью заряжена
LEVEL=100
SLEEP_TIME=120
NOTIFIED=false
while true
do
export DISPLAY=:0.0
battery_level=`cat /sys/class/power_supply/BAT0/capacity`
battery_status=`cat /sys/class/power_supply/BAT0/status`
if [ $battery_status = "Charging" ] && [ $battery_level -ge $LEVEL ];
then
if [ $NOTIFIED = false ];
then
action=$(notify-send \
-u critical \
-a "Батарея полная" \
-A dismiss=Отменить \
-A remind="Напомнить ($((SLEEP_TIME/60)) минут)" \
"Батарея полностью заряжена" "Пожалуйста, отключите зарядное устройство"
)
case $action in
dismiss)
NOTIFIED=true
;;
remind)
;;
esac
fi
elif [ $NOTIFIED = true ];
then
NOTIFIED=false
fi
sleep $SLEEP_TIME
done
Ответ или решение
Для настройки звукового уведомления о полной зарядке батареи на Ubuntu 18.04 можно воспользоваться простым скриптом на Bash. Это решение позволит вам избегать установки дополнительных утилит, таких как acpi
. Ниже приведены шаги, чтобы создать такой скрипт и настроить его автозапуск.
Шаг 1: Создание скрипта
-
Откройте терминал.
-
Создайте новый файл скрипта, например,
battery-alert.sh
:nano battery-alert.sh
-
Скопируйте и вставьте следующий код в открывшийся редактор:
#!/bin/bash # Уровень заряда, при достижении которого будет отправлено уведомление LEVEL=90 SLEEP_TIME=120 NOTIFIED=false while true; do export DISPLAY=:0.0 battery_level=$(cat /sys/class/power_supply/BAT0/capacity) # Получаем уровень заряда battery_status=$(cat /sys/class/power_supply/BAT0/status) # Получаем статус аккумулятора if [ "$battery_status" = "Charging" ] && [ "$battery_level" -ge "$LEVEL" ]; then if [ "$NOTIFIED" = false ]; then notify-send -u critical "Пожалуйста, отключите адаптер питания" "Уровень заряда: ${battery_level}% (заряжено выше 90%)" -i battery-full-charged # Воспроизведение звукового уведомления paplay /path/to/audio-file NOTIFIED=true fi elif [ "$NOTIFIED" = true ]; then NOTIFIED=false fi sleep "$SLEEP_TIME" # Ждем перед следующей проверкой done
Примечание: Замените
/path/to/audio-file
на реальный путь к звуковому файлу, который вы хотите использовать для уведомления. -
Сохраните изменения в редакторе, нажав
CTRL + O
, затемENTER
, и выйдите, нажавCTRL + X
.
Шаг 2: Сделать скрипт исполняемым
В терминале выполните команду:
chmod +x battery-alert.sh
Шаг 3: Настройка автозапуска скрипта
Чтобы скрипт запускался автоматически при входе в систему, необходимо добавить его в автозагрузку:
-
Откройте "Программы запуска" (Startup Applications).
-
Нажмите "Добавить" (Add) и укажите название, например, "Battery Alert".
-
В поле "Команда" укажите полный путь к вашему скрипту, например:
/home/ваш_пользователь/battery-alert.sh
-
Нажмите "Добавить" (Add) и закройте окно.
Заключение
Теперь ваш компьютер будет автоматически уведомлять вас, когда уровень заряда батареи достигнет 90%, с соответствующим звуковым сигналом. Такой подход поможет вам бережно относиться к батарее и избежать её быстрой деградации.