Мы все знаем, что батарея не вечна. Это нормально — можно заменить изношенную батарею в сервисе и снова использовать устройство. Но очень полезно видеть текущее состояние батареи. В MacOS это стандартная функция, в Linux мы, конечно, можем сделать то же самое. Давайте разберёмся!
Сначала мы поймём, как найти нужное значение, а затем создадим красивый минималистичный модуль для waybar.
Находим значение деградации батареи
Сначала получим список всех устройств питания:
upower -e
Затем найдём батарею в этом списке:
upower -e | grep BAT
# For example:
# /org/freedesktop/UPower/devices/battery_BATT
Затем получим детальную информацию об этом устройстве:
upower -i $(upower -e | grep BAT)
Мы получим что-то вроде этого:
native-path: BATT
vendor: DESAY
model: BASE-BAT
serial: 1
power supply: yes
updated: Fri Jul 11 11:37:00 2025 (7 seconds ago)
has history: yes
has statistics: yes
battery
present: yes
rechargeable: yes
state: charging
warning-level: none
energy: 25.514 Wh
energy-empty: 0 Wh
energy-full: 47.5052 Wh
energy-full-design: 59.4247 Wh
energy-rate: 11.1573 W
voltage: 11.972 V
charge-cycles: 650
time to full: 2.0 hours
percentage: 53%
capacity: 79.9417%
technology: lithium-ion
charge-start-threshold: 75%
charge-end-threshold: 80%
charge-threshold-supported: yes
icon-name: 'battery-good-charging-symbolic'
History (charge):
1752222927 53.000 charging
History (rate):
1752223020 11.157 charging
1752222990 11.123 charging
1752222987 11.192 charging
1752222957 10.822 charging
1752222927 10.857 charging
Здесь много интересной информации, например количество циклов зарядки, время до полной зарядки и т.д. Сейчас нас интересуют два параметра:
energy-full-design
— изначальный полный объём батареиenergy-full
— текущий объём батареи
Разница между этими параметрами и есть деградация батареи:
Теперь посчитаем этот показатель в процентах.
Сначала найдём эти параметры и разделим их:
upower -i $(upower -e | grep BAT) | awk '\
/energy-full:/ {ef=$2}\
/energy-full-design:/ {efd=$2}\
END {print ef/efd}'
Затем посчитаем процентное значение:
echo "(1 - $(upower -i $(upower -e | grep BAT) | awk '\
/energy-full:/ {ef=$2}\
/energy-full-design:/ {efd=$2}\
END {print ef/efd}')) * 100 + 0.5" \
| bc
# Output example:
# 20.558200
На последнем шаге нам нужно округлить значение:
echo "(1 - $(upower -i $(upower -e | grep BAT) | awk '\
/energy-full:/ {ef=$2}\
/energy-full-design:/ {efd=$2}\
END {print ef/efd}')) * 100 + 0.5" \
| bc \
| cut -d'.' -f1
# Output example:
# 20
Модуль для Waybar
В моём конфиге waybar ~/.config/waybar/config.json
я добавил два модуля в правую секцию, но вы можете сделать как вам удобно. В итоге я получил это:

Если вам нравятся мои обои, вы можете найти их и другие классные штуки в моём репозитории
dotfiles
на GitHub. Не забывайте: я люблю ваши звёзды!
Посмотрим:
{
...
"modules-left": [...],
"modules-center": [...],
"modules-right": [
"battery",
"custom/battery-degradation",
...
],
...
Первый модуль — стандартный battery
, у меня он отлично работает на hyprland. Здесь мы определяем уровни хорошего, предупреждающего и критического уровня заряда, задаём nerd-иконки для разных состояний батареи:
"battery": {
"states": {
"good": 90,
"warning": 25,
"critical": 10
},
"format": "{icon} {capacity}%",
"format-charging": " {capacity}%",
"format-plugged": " {capacity}%",
"format-icons": ["?", "?", "?", "?", "?", "?", "?", "?", "?", "?", "?"],
"tooltip": "{time}",
"style": "{capacity < 10 ? 'color: red;' : 'color: normal;'}"
}
Второй модуль — тема сегодняшнего разговора:
"custom/battery-degradation": {
"format": " {}%",
"interval": "once",
"exec": "~/scripts/battery-degradation.sh",
"tooltip": false
}
Я поместил нашу команду в скрипт — так удобнее. Вы можете сделать так же, не забудьте добавить shebang #!/bin/bash
и:
chmod +x ~/scripts/battery-degradation.sh
В модуле мы определяем формат с nerd-иконкой и процентом, отключаем подсказку и устанавливаем однократный запуск при старте waybar.
И завершаем эти модули CSS-стилем:
#battery,
#custom-battery-degradation {
background: #1e1e2e;
opacity: 0.7;
padding: 0px 10px;
margin: 3px 0px;
margin-top: 5px;
border: 0px solid #181825;
}
#battery {
padding-right: 10px;
border-radius: 10px 0px 0px 10px;
min-width: 50px;
}
#custom-battery-degradation {
border-radius: 0px 10px 10px 0px;
margin-right: 5px;
min-width: 35px;
}
#battery.critical {
color: red;
}
Готово! В результате:
Комментарии (29)
Grigo52
19.08.2025 18:55Мониторинг мониторингом, а деградацию не остановишь
batChar
19.08.2025 18:55Устройство использует только зарядку Galy4a
19.08.2025 18:55Мак из коробки это делает без дополнительного софта, просто останавливает зарядку на 80 процентах и питается только от провода, если ноутбук давно не снимался с зарядки.
batChar
19.08.2025 18:55Не совсем так. Встроенная функция MacOS ограничивает зарядку заданным уровнем, но батарея при этом все равно задействуется - она то подзаряжается, то слегка разряжается.
Galy4a
19.08.2025 18:55У меня за три года использования этой функции набежало меньше 50 циклов (ноутбук не все 100% времени был на проводе) и показывает полный ресурс батареи. Субъективное мнение, но мне это кажется достаточным.
Mur81
19.08.2025 18:55Когда-то давно такое можно было увидеть в рандомном ширпотребном ноутбуке (настраивалось в биосе). Потом "почему-то" (вечная батарея не нужна производителю) это или пропало вовсе, или переехало в программу (котрую мало кто ставит если сносит заводскую винду). На аппаратном уровне осталась во всяких "профессиональных" линейках. Например такое есть в HP ProBook. Так что не Маком единым.
grrom
19.08.2025 18:55в kde такие ограничения так же можно задать. настроено 6 лет уже. Начало зарядки при меньше 60%, предел зарядки до 80, если от провода, то проценты стоят на месте и заряд не тратится, ресурс батареи за это время упал на 11%
ogost
19.08.2025 18:55Под Linux или Windows я подобного решения не встречал.
На некоторых ThinkPad лет 10 назад это уже было. Под виндой настраивается фирменной утилитой, под линем есть
tlp
.Кроме ThinkPad встречал только на ещё двух ноутах других производителей. То есть фича не то, чтобы отсутствующая на PC, но вроде как относительно редкая.
У самого до сих пор Т480 с такой функцией, покупал новым в 2018, сейчас ёмкость 81.3% от изначальной. То есть деградация на 19% за 7 лет. Что очень даже неплохо, я считаю. Обычно уже через 5 лет ноуты не держат и полчаса.
gaussssss
19.08.2025 18:55Это вопрос не операционки а железной реализации. Если байпасса нет - ось не поможет. И да, в ноутах не от эппл это бывает в наличии.
salieff
19.08.2025 18:55А разве не все нормальные контроллеры заряда в 21 веке должны так работать? Типа, ноут должен быть запитан только от сети, при ее доступности. Батарея должна заряжаться по гистерезису - входить в новый цикл заряда только после разряда до (условно) 95%. В батарее должна быть учтена емкостная динамика, типа, заряд до 97.5% от максимально возможной емкости позволит избежать процессов деградации при эксплуатации до 5°C.
И этот, вроде бы, тривиальный набор алгоритмов полностью нивелирует ситуацию "батарея медленно умирает, потому что ноут постоянно воткнут в розетку"?
Или я слишком наивен?
riky
19.08.2025 18:55Почему нет.в Андроиде например есть опция не заряжать более 90 %
Если в ноуте есть апи для управления зарядкой я бы поставил чтобы зарядка выключалась более 70 80 процентов и включалась когда менее 40 50.
У большинства наверное нет, но можно сделать внешнее реле с ардуинкой, или умную розетку приспособить, даже тупо настроить чтобы в рабочее время час вкл, час выкл. Если умного дома нет, если есть то в можно прокидывать зарядку в home assistant и из него управлять розеткой.
usrsse2
19.08.2025 18:55Заголовок кликбейтный, кажется, что статья про то, как использование Linux приводит к деградации батареи. Лучше было бы назвать, например, "Степень исправности аккумулятора в Linux" (как в macOS в информации о системе) или "Отображение деградации батареи в Linux".
Кстати, а в какой macOS это штатная функция? Sonoma 14.7 на Intel умеет отображать только "Рекомендуется обслуживание", если полная ёмкость существенно снизилась, и количество циклов, а собственно степень исправности отображает iStat Menus.
Ktulhy
19.08.2025 18:55Тема временем поле capacity: я что для тебя, какая то шутка??
Alchemmist Автор
19.08.2025 18:55Да, абсолютно верно! Многие уже указали на эту ошибку. В ближайшее время упрощу в статье этот момент. Спасибо!
baldr
19.08.2025 18:55В принципе, статья хороша как пример кастомизации Linux - можно вывести любой другой индикатор.
Показывать в трее имеет смысл какие-то более динамичные параметры - температуру, загрузку, память. Деградация батареи - меняться будет на доли процента в месяц, не стоит она того, чтобы место на экране занимать.
Alchemmist Автор
19.08.2025 18:55Спасибо!
По поводу более динамических параметров, у меня на скриншоте можно увидеть, что они есть, но для них уже в большинстве случаев есть встроенный waybar модуль, в котором все реализовано.
foxb
19.08.2025 18:55capacity: 79.9417%
Это здоровье аккумулятора
Alchemmist Автор
19.08.2025 18:55Да, абсолютно верно! Многие уже указали на эту ошибку. В ближайшее время упрощу в статье этот момент. Спасибо!
vdudouyt
В KDE по дефолту есть, кстати говоря. Если нажать на значок батареи.
eri
в гноме в настройках
Grigo52
В KDE удобно, но точных цифр не выдаёт, поэтому такие скрипты до сих пор актуальны