Батарея ноутбука — расходник, но её срок зависит от привычек и настроек. Одна и та же модель через два года у одного владельца теряет десять процентов ёмкости, у другого — сорок. Причина не только в циклах: играют роль температура, постоянный заряд до ста процентов, глубокие разряды и корректность контроллера. Разберём, как прочитать состояние батареи в Linux, когда нужна калибровка, как выставить пороги и что действительно продлевает жизнь элементу.
Что ядро рассказывает о батарее
Информация доступна через sysfs, без дополнительных программ. Каталог называется BAT0, BAT1 или иначе — смотрите список в /sys/class/power_supply/. Основные файлы:
status— Charging, Discharging, Full, Not charging;capacity— грубый процент заряда;energy_nowиenergy_full— остаток и полная ёмкость в микроватт-часах;energy_full_design— заводская ёмкость;power_now— текущая мощность в микроваттах;cycle_count— счётчик циклов, если его поддерживает контроллер;
for f in /sys/class/power_supply/BAT0/*; do
printf '%-32s %s\n' "$(basename "$f")" "$(cat "$f" 2>/dev/null)"
done
У части драйверов вместо энергии используются заряды: charge_now, charge_full, charge_full_design в микроампер-часах. Сравнивать можно только величины одного типа.
Как посчитать здоровье
Показатель — отношение текущей полной ёмкости к заводской:
full=$(cat /sys/class/power_supply/BAT0/energy_full)
design=$(cat /sys/class/power_supply/BAT0/energy_full_design)
awk -v f="$full" -v d="$design" 'BEGIN {printf "Здоровье: %.1f%%\n", f / d * 100}'
Тот же результат показывает upower -i /org/freedesktop/UPower/devices/battery_BAT0. Не делайте вывод по одному измерению: контроллер обновляет значения не мгновенно, а при полном заряде оценка точнее. Если energy_full стал больше заводского, это не «улучшение», а погрешность калибровки или особенность прошивки.
Счётчик циклов — контекст, а не приговор. После 500–800 полных циклов обычно остаётся 70–80% ёмкости, но ноутбук на зарядке при 100% может потерять больше без циклов.
Калибровка: когда она нужна и чего не делает
Калибровка не восстанавливает химию. Она синхронизирует показания контроллера с реальной ёмкостью, если процент начал «прыгать»: с 40% сразу до 7% или с 80% до 100% за минуту.
Порядок: зарядите до 100%, дайте постоять пару часов, работайте до штатного выключения при низком заряде и сразу зарядите до 100% без перерыва. Один цикл раз в несколько месяцев допустим. Если процент не скачет, калибровка не нужна и только тратит циклы. Постоянно разряжать «в ноль» вредно. Если ноутбук поддерживает калибровку в BIOS, используйте её — она аккуратнее.
Пороги зарядки
Самый действенный способ продлить жизнь элементу, который большую часть времени подключён к сети, — не держать его на 100%. Многие контроллеры позволяют задать порог через sysfs. Сначала проверьте, какие файлы есть:
ls /sys/class/power_supply/BAT0/ | grep -E 'charge_control|charge_behaviour|conservation'
cat /sys/class/power_supply/BAT0/charge_control_end_threshold
Если файл существует, значение записывается напрямую. Например, остановить зарядку на 80%:
echo 80 | sudo tee /sys/class/power_supply/BAT0/charge_control_end_threshold
echo 60 | sudo tee /sys/class/power_supply/BAT0/charge_control_start_threshold
У ThinkPad встречается conservation_mode со значением 1; у части моделей доступен только верхний порог. Если файлов нет, драйвер или прошивка не предоставляют такую возможность. Тогда просто не держите ноутбук на зарядке сутками.
Автоматизация порогов через systemd
Запись в sysfs не переживает перезагрузку. Oneshot-юнит применит значения при старте:
sudo tee /etc/systemd/system/battery-limit.service <<'EOF'
[Unit]
Description=Limit battery charge
After=multi-user.target
[Service]
Type=oneshot
ExecStart=/bin/sh -c 'echo 60 > /sys/class/power_supply/BAT0/charge_control_start_threshold; echo 80 > /sys/class/power_supply/BAT0/charge_control_end_threshold'
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl enable --now battery-limit.service
Проверьте путь к батарее. Некоторые прошивки сбрасывают порог после сна: добавьте скрипт в /usr/lib/systemd/system-sleep/, повторяющий запись. Не делайте это в udev-правиле — запись в sysfs во время события может конфликтовать с драйвером.
Что действительно продлевает жизнь
Литий-ионные элементы не любят высокую температуру, высокое напряжение и глубокий разряд. Держите заряд в диапазоне 20–80%, если ноутбук работает от сети. Не оставляйте его на подоконнике и не перекрывайте вентиляцию. Используйте штатный блок: быстрая зарядка нагревает элемент сильнее. Если ноутбук не нужен месяц, разрядите его до половины и храните в прохладном месте.
Быстрая зарядка повышает температуру; обновляйте прошивку через fwupdmgr — производители исправляют алгоритмы заряда.
Диагностика быстрого разряда
Если ёмкость в норме, а ноутбук держит меньше обычного, ищите потребителя. power_now показывает мгновенную мощность, но для сравнения нужен повторяемый сценарий: одинаковая яркость и фиксированная нагрузка.
grep . /sys/class/power_supply/BAT0/{power_now,energy_now,status}
sudo powertop --time=30
journalctl -b -p err --no-pager | tail -40
dmesg | grep -iE 'acpi|battery|thermal' | tail -40
powertop покажет, какие процессы будят процессор, а журнал — ошибки ACPI и перегрев. Частая причина — зависший браузер, индексация файлов или внешняя видеокарта, которая не уходит в сон.
Замена и обслуживание
Повод задуматься о замене — здоровье ниже 70–80%, резкие падения процента и вздутие. Вздутую батарею нельзя использовать: она может повредить корпус и представляет опасность. Отключите питание, не протыкайте элемент и сдайте его в пункт приёма. Перед покупкой найдите точный номер детали по сервисной документации модели.
После замены контроллер может показывать неточный процент. Дайте ему два-три полных цикла. Если ноутбук не видит батарею, проверьте разъём, предохранитель и вывод dmesg; иногда требуется обновление BIOS.
Чек-лист
- Снимите
energy_full,energy_full_designиcycle_count. - Посчитайте здоровье и сравните с прошлыми замерами.
- Проверьте наличие порогов зарядки в sysfs.
- Настройте 20–80% и автоматизируйте через systemd.
- Уберите ноутбук от тепла и проверьте вентиляцию.
- При вздутии прекратите использование и замените элемент.
Итог
Здоровье батареи — не одна цифра из меню, а сочетание полной ёмкости, циклов, температуры и режима заряда. Linux даёт прямой доступ к данным контроллера, поэтому вы можете измерять износ, замечать аномалии и управлять порогами без проприетарных панелей. Начните с чтения sysfs и одного честного замера, затем настройте комфортный диапазон. Калибровку применяйте только при явных скачках процента, а замену планируйте по фактическому здоровью.