Как установить сигнал уведомления о полной зарядке батареи в Ubuntu 18.04, чтобы сократить износ батареи?

Вопрос или проблема

Моя батарея снова вышла из строя в третий раз. Теперь я хочу установить сигнализацию, когда заряд батареи достигает 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, затем добавьте его в автозагрузку.

Надеюсь, это поможет.

Это, возможно, не самый лучший способ, но вы можете сделать что-то вроде следующего.

  1. Сначала вам понадобится acpi. Установите его, запустив

    sudo apt install acpi
    
  2. Затем вам нужно создать скрипт 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
    
  3. Сделайте скрипт исполняемым и запустите его. Вы получите постоянное уведомление, если батарея заряжается и уровень превышает 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: Создание скрипта

  1. Откройте терминал.

  2. Создайте новый файл скрипта, например, battery-alert.sh:

    nano battery-alert.sh
  3. Скопируйте и вставьте следующий код в открывшийся редактор:

    #!/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 на реальный путь к звуковому файлу, который вы хотите использовать для уведомления.

  4. Сохраните изменения в редакторе, нажав CTRL + O, затем ENTER, и выйдите, нажав CTRL + X.

Шаг 2: Сделать скрипт исполняемым

В терминале выполните команду:

chmod +x battery-alert.sh

Шаг 3: Настройка автозапуска скрипта

Чтобы скрипт запускался автоматически при входе в систему, необходимо добавить его в автозагрузку:

  1. Откройте "Программы запуска" (Startup Applications).

  2. Нажмите "Добавить" (Add) и укажите название, например, "Battery Alert".

  3. В поле "Команда" укажите полный путь к вашему скрипту, например:

    /home/ваш_пользователь/battery-alert.sh
  4. Нажмите "Добавить" (Add) и закройте окно.

Заключение

Теперь ваш компьютер будет автоматически уведомлять вас, когда уровень заряда батареи достигнет 90%, с соответствующим звуковым сигналом. Такой подход поможет вам бережно относиться к батарее и избежать её быстрой деградации.

Оцените материал
Добавить комментарий

Капча загружается...