Батарея и заряд
Питание и ACPI #battery #linux #notebook #power
Батарея и заряд
Ядро Linux отдаёт батарею как обычное устройство класса power supply. Всё, что нужно знать про заряд и износ, лежит в /sys/class/power_supply/:
ls /sys/class/power_supply/
# AC BAT0 ucsi-source-psy-USBC000:001
Здесь AC — подключение к сети, BAT0 — батарея. Третий элемент — питание по USB-C (у разных ноутбуков бывает по-разному).
Единицы измерения
Класс power supply строго фиксирует единицы (это описано в документации ядра):
- напряжения — в микровольтах (µV);
- токи — в микроамперах (µA);
- заряды (
CHARGE_*) — в микроампер-часах (µAh); - энергия (
ENERGY_*) — в микроватт-часах (µWh); CAPACITY— в процентах, от 0 до 100;- температура — в десятых долях градуса.
Путаница между CHARGE_* и ENERGY_* — самая частая ошибка: это две разные величины. Производитель батареи обычно знает заряд (ампер-часы), а upower пересчитывает его в энергию (ватт-часы), умножая на номинальное напряжение.
Что показывает наша батарея
Ноутбук автора, Dell Latitude 7400:
charge_full 5651000 # 5651 мА·ч — реальная полная ёмкость
charge_full_design 7895000 # 7895 мА·ч — проектная ёмкость
charge_now 5651000 # текущий заряд
voltage_min_design 7600000 # 7,6 В — номинальное напряжение
status Full
capacity 100 # заряд в процентах
capacity_level Full
cycle_count 0
technology Li-ion
model_name DELL 829MX97
Пересчёт в ватт-часы простой: 5651 мА·ч × 7,6 В ≈ 42,95 Вт·ч. Проектная — 7895 × 7,6 ≈ 60,0 Вт·ч. Отсюда знакомая цифра из upower:
upower -d
# energy-full: 42,9476 Wh
# energy-full-design: 60,002 Wh
# capacity: 71,5769 %
Заряд и ёмкость — разные вещи
Две цифры, которые постоянно путают:
capacity(заряд) — сколько сейчас осталось от полного: 100 % значит «полная», а не «новая».- ёмкость (health) — сколько энергии влезает в полностью заряженную батарею по сравнению с проектной. В
upowerэто полеcapacity:energy-full / energy-full-design × 100.
На нашем ноутбуке заряд 100 %, а ёмкость — 71,6 %: батарея полная, но от проектных 60 Вт·ч осталось 43. Потеря примерно четверти ёмкости — обычная история для батареи с несколькими годами работы; это не ошибка и не повод для паники.
Есть и третья величина — capacity_level (Full, High, Normal, Low, Critical): грубая оценка состояния, которую удобно использовать в скриптах вместо сравнения процентов.
Как посмотреть без sysfs
upower -dилиupower -i /org/freedesktop/UPower/devices/battery_BAT0— сводка, включая пересчёт в Вт·ч и оценку времени работы.acpi -i— утилита из пакетаacpi, простой вывод заряда и ёмкости.- Графические оболочки (GNOME, KDE) показывают те же числа из UPower.
Когда батареи мало
Система может не просто выключиться, а сначала уйти в гибернацию. В systemd для этого есть режим suspend-then-hibernate: сначала обычный сон, а если батарея разряжается ниже 5 % или истекает заданный срок — система просыпается и сохраняет состояние на диск. Настройки — в /etc/systemd/sleep.conf:
[Sleep]
HibernateDelaySec=2h
Если батареи нет, срок по умолчанию — 2 часа (значение HibernateDelaySec). Если батарея есть, systemd сначала пытается использовать ACPI-уведомления о низком заряде (_BTP), и только при их отсутствии просыпается по таймеру.
Действие при критическом заряде задаётся и в UPower; на нашем ноутбуке в выводе upower -d стоит critical-action: HybridSleep — то есть при критическом разряде система попробует гибридный сон, а не мгновенно выключится.
Мелочи, о которых стоит знать
cycle_count = 0часто означает не «ноль циклов», а «контроллер не сообщает»: поле есть, но прошивка батареи его не заполняет.- Проценты — оценка, а не измерение. Контроллер батареи считает заряд косвенно (по току и напряжению), поэтому цифры могут «прыгать» на несколько процентов, особенно на морозе и под нагрузкой.
- Ёмкость не восстанавливается. Полный цикл разряда-заряда может помочь контроллеру точнее оценить ёмкость, но физический износ он не отменяет.
- Порог зарядки. Некоторые ноутбуки умеют останавливать заряд на 80 % (
charge_control_end_threshold) — это продлевает жизнь батарее, но уменьшает время работы от одного заряда.
Источники
- Ядро Linux, «Linux power supply class» — единицы и смысл атрибутов: https://docs.kernel.org/power/power_supply_class.html.
- systemd,
systemd-sleep.conf(5)—suspend-then-hibernate,HibernateDelaySec,_BTP: https://www.freedesktop.org/software/systemd/man/latest/systemd-sleep.conf.html. - UPower,
upower(страница проекта): https://upower.freedesktop.org/. - Локальные измерения: Dell Latitude 7400, Ubuntu 26.04, батарея DELL 829MX97 (ноябрь 2026).
Комментарии
Пока комментариев нет.