Заметки · 09.08.2024

Linux и батарея в процентах

Очень часто используя свой походный ноутбук в качестве микро-сервера и работая с ним по ssh — я задавался вопросом о состоянии заряда батареи. Очень хотелось иметь под рукой какой-то скрипт или утилиту для вывода соответствующей информации в консоль и знать когда именно ноутбук отправится на боковую. Хотя бы примерно.

В какой-то момент я решил использовать вывод команды upower для получения нужных данных:

upower -i $(upower -e | grep BAT)

Команда выводила в консоль знатную простыню со всеми известными ей данными о батарее: её прописке, характере, личном тг-канале, цвете глаз, волос и тд и тп. Разумеется, всю эту простынь надо было сократить до самой востребованной информации — состояния, процента заряда и оставшегося время работы.

Немного покопавшись в этих ваших всем известных, я соорудил вот такую конструкцию:

upower -i $(upower -e | grep 'BAT') | grep -E "state|to\ full|percentage|to\ full|time to empty"

Конечно, каждый раз писать такую поэму в терминал — задачка со звёздочкой. Пока напишешь — батарея и сядет.

Добавив к команде строчку интерпретатора и сохранив конструкцию, я получил долгожданный battery.sh:

#!/bin/bash
upower -i $(upower -e | grep 'BAT') | grep -E "state|to\ full|percentage|to\ full|time to empty"

Теперь говорим системе, что скрипт battery.sh умеет всякое:

sudo chmod +x /scripts/battery.sh

Вуаля! Достаточно накинуть в консоль путь до скрипта и получить в ответ :

state:               discharging
time to empty:       1,3 hours
percentage:          28%

Но куда проще (но это я уже узнал потом) использовать утилиту acpi:

sudo apt install acpi

С ней достаточно лишь набрать в консоли название утилиты (acpi, соответственно) и получить всё в одну строку:

Battery 0: Discharging, 35%, 01:16:21 remaining

Занятный P.S.: метод со скриптом может давать не совсем точные данные при зарядке ноутбука и иногда шалить, выдавая прогнозируемое время работы ноутбука от батареи в графе time to full.

Например, когда я подключал ноутбук к зарядному устройству и вызывал скрипт — в консоль возвращалось это:

state:               charging
time to full:        8,8 hours
percentage:          23%

К слову, 8,8 часа — это обычное время бодрствования моего ноутбука при 100% батареи.

Acpi же даёт совершенно другие цифры:

Battery 0: Charging, 23%, 01:09:18 until charged

Справедливости ради укажу, что спустя какое-то время скрипт одумывается и начинает говорить правду, но вот осадочек-то уже остался.

И, кстати, если хорошенько поискать — можно найти кучу готовых скриптов по автоматизации ахтунгов о севшей батарее с паникой и криками.

UPD: с помощью acpi можно узнать и износ батареи ноутбука. Для этого используется команда:

acpi -bi

В консоль упадут данные о текущем состоянии батареи, прогнозируемом времени работы, а также о доступной ёмкости заряда.