Данная статья является вольным пересказом всего того объёма информации, что мне удалось перечитать на данную, интересующую меня, тему. Статья может быть полезна владельцам ноутбуков Asus, Lenovo/Thinkpad, Huawei, LG, Samsung, Sony, Toshiba.
Используя в своей повседневной работе ноутбук Asus, мне хотелось продлить срок жизни его батареи на как можно более долгий срок. В Windows для этого есть фирменная утилита Asus Battery Health Charging, которая позволяет ограничивать уровень заряда батареи до 60% и 80%. Когда ноутбук постоянно подключен к сети электропитания, лучше всего ограничивать заряд до 60%.
В данном руководстве я покажу один из способов, как эту задачу можно решить в GNU/Linux дистрибутивах с системой инициализации systemd.
Первое, с чего нужно начать, это узнать тип вашей батареи с помощью команды в терминале:
ls /sys/class/power_supply
В ответ должно прийти одно из обозначений:
BAT0, BATT, BAT1, BATС. (В моём случае это BAT0)
Поддержка функции ограничения заряда батареи стала доступна начиная с ядра Linux 5.4 - но только для батарей типа BAT0. Поэтому, на всякий случай, проверьте соответствие типа вашей батареи и ядра:
BAT0 - ядро не ниже 5.4
BATT - ядро не ниже 5.7
BAT1 - ядро не ниже 5.8
BATС - ядро не ниже 5.9
Теперь, зная тип батареи, можем проверить, поддерживает ли ваш ноутбук ограничение заряда батареи. Для этого в терминале вводим команду:
ls /sys/class/power_supply/BAT*/charge_control_end_threshold
Где вместо BAT* подставьте тип вашей батареи.
Если эта команда возвращает путь /sys/class/power_supply/BAT*/charge_control_end_threshold , то ваш ноутбук поддерживает ограничение заряда батареи - можно переходить ко второму пункту.
Если же команда выдаёт ошибку, или сообщает, что «нет указанного файла или директории» («there's no such file or directory») - то ваш ноутбук не поддерживает данную опцию.
Второе - создаём файл сервиса systemd. Для этого вводим в терминале:
sudo nano /etc/systemd/system/battery-charge-threshold.service
В появившемся поле вставляем следующий текст:
[Unit]
Description=Set the battery charge thresholdAfter=multi-user.target
StartLimitBurst=0
[Service]
Type=oneshotRestart=on-failure
ExecStart=/bin/bash -c 'echo CHARGE_STOP_THRESHOLD > /sys/class/power_supply/BATTERY_NAME/charge_control_end_threshold'
[Install]
WantedBy=multi-user.target
Где вместо BATTERY_NAME - вставляем тип вашей батареи (BAT0, BATT, BAT1 или BATС)
А вместо CHARGE_STOP_THRESHOLD - необходимый уровень заряда 60 или 80.
То есть строчка должна иметь вид (в моём случае для уровня 60% и типа батареи BAT0):
ExecStart=/bin/bash -c 'echo 60 > /sys/class/power_supply/BAT0/charge_control_end_threshold'
Другие числа на Asus могут работать некорректно, или не работать вообще, т.к. в утилите для Windows нет других опций. Поэтому лучше придерживаться этих двух уровней.
После этого сохраняем документ, нажав Ctrl+O, Enter, затем выходим Ctrl+X.
Теперь включим и запустим созданный нами сервис:
sudo systemctl enable battery-charge-threshold.service
sudo systemctl start battery-charge-threshold.service
Чтобы убедиться, что наш сервис работает, выполним команду:
cat /sys/class/power_supply/BATTERY_NAME/status
Если уровень заряда батареи достиг указанной нами величины, ответ команды должен быть таким:
Not Charging
Данный способ был успешно опробован на ноутбуке Asus VivoBook 15 X542UF в дистрибутивах Linux Mint 21-21.2 Cinnamon, elementary OS 6.1, Manjaro 22-23 KDE и Gnome (версии DE соответствуют версиям дистрибутивов на момент их выпуска). Больше всего мне понравилось, как в KDE отображается подробная информация о том, что уровень заряда батареи лимитирован. Ни в каком другом рабочем окружении такой информации не было.
В Gnome было указано просто, что батарея не заряжается.
в Cinnamon было указано оставшееся время работы от батареи, хотя зарядка так же остановилась.
Ещё в настройках KDE отображалась опция «останавливать зарядку на уровне», я пробовал её использовать без вышеуказанных действий, но она действовала только до перезагрузки. Относительно нашей задачи в плане удобства и информативности KDE даёт фору остальным своим собратьям.
Надеюсь, данная статья будет полезна! Всем хорошего времени суток!
Комментарии
10:30
11:06
11:21
По личному опыту, да, в последнее время всё чаще новая техника (и не только техника, но и, например, обувь) выходит из строя сразу по окончании гарантии (в лучшем случае). Хотя иногда чудеса случаются.
15:45
11:12
В ASUS меняю АКБ раз в два-четыре года, зависит от АКБ, родная работала года четыре, другие — меньше, впрочем время службы соответствует заявленному. В таком случае вопрос: на много ли увеличивает (и увеличивает ли?) срок службы АКБ описанный метод?
ACER: нет такого файла\каталога.
12:08
12:13
03:19
12:57
Подобный принцип мне показывал кто-то на скриншоте от смарта. Там в ГуглПлэй есть такое приложение, которое ограничивает уровень заряда максимального.
13:01
Смарт = смартфон? Не пользуюсь, ибо без надобности.
14:39
11:12
15:19
09:41
03:17
08:55
https://ibb.co/HgQnW2X
Ноутбук '18го года, батарея не менялась. А у второго точно такого же батарея под замену ушла через пару лет с потерей ёмкости до около 60-65%...
10:46
https://ibb.co/KrfTJMp
05:52
13:41
На моем Asus L2402 ограничение батареи заработало с помощью asusctl.
14:36
/sys/class/power_supply/BAT'ваш_символ'/charge_control_end_threshold
вот и вся утилита) если файл существует, то работает и на asus и на всех прочих.
Автоматизировать через юнит (как у автора) или через rc, если non-systemd.
16:45
AniMe Matrix display
RGB keyboard LEDs
fn+key combos and media controls
G-Sync enable on capable laptops
Re-enable the dGPU after setting "iGPU On" in Windows
and more All of the above is either enabled in asusctl already, or is enabled via patches to the kernel (and we provide pre-built kernels with the patches applied) which are steadily upstreamed.
Extra features we currently support are:
Control graphics modes via supergfxctl without reboots for switching between iGPU, dGPU, on-demand, and vfio (for VM pass-through)
Set battery charge limit
(custom) fan curve control
Поэтому, я посчитал важным оставить ссылку на этот проект. Не рекламы ради, а пользы для.
А касательно ограничения батареи, да, вы правы, это может быть реализовано без дополнительного ПО.
17:08
17:18
[Unit]
Description=Set the battery charge thresholdAfter=multi-user.target
StartLimitBurst=0
[Service]
Type=oneshotRestart=on-failure
ExecStart=/bin/bash -c 'echo CHARGE_STOP_THRESHOLD > /sys/class/power_supply/BATTERY_NAME/charge_control_end_threshold'
[Install]
WantedBy=multi-user.target
После [Unit], [Service] и [Install] команды должны начинаться с новой строчки. Отправил исправления на модерацию.
03:22
Вся настройка сведётся к созданию файла /etc/tmpfiles.d/charge-stop.conf со следующим содержимым:
w /sys/class/power_supply/BATTERY_NAME/charge_control_end_threshold - - - - CHARGE_STOP_THRESHOLD
Чтобы применить настройки без перезагрузки, выполнить
sudo systemd-tmpfiles --create
09:46
11:52
Но, как это обычно бывает, статья подтолкнула полезть внутрь папки power_supply, где я наткнулся на любопытный файл uevent следующего содержания:
DEVTYPE=power_supply
POWER_SUPPLY_NAME=BAT1
POWER_SUPPLY_TYPE=Battery
POWER_SUPPLY_STATUS=Full
POWER_SUPPLY_PRESENT=1
POWER_SUPPLY_TECHNOLOGY=Li-ion
POWER_SUPPLY_CYCLE_COUNT=0
POWER_SUPPLY_VOLTAGE_MIN_DESIGN=11250000
POWER_SUPPLY_VOLTAGE_NOW=12763000
POWER_SUPPLY_CURRENT_NOW=85000
POWER_SUPPLY_CHARGE_FULL_DESIGN=4267000
POWER_SUPPLY_CHARGE_FULL=3968000
POWER_SUPPLY_CHARGE_NOW=3968000
POWER_SUPPLY_CAPACITY=100
POWER_SUPPLY_CAPACITY_LEVEL=Full
POWER_SUPPLY_MODEL_NAME=AP18C8K
POWER_SUPPLY_MANUFACTURER=LGC
POWER_SUPPLY_SERIAL_NUMBER=38544
Меня заинтересовали вот эти строки:
POWER_SUPPLY_CHARGE_FULL_DESIGN=4267000
POWER_SUPPLY_CHARGE_FULL=3968000
POWER_SUPPLY_CHARGE_NOW=3968000
Как оказалось, параметр FULL_DESIGN сообщает величину полного заряда батареи, FULL - до какого уровня батарея будет заряжаться, а NOW - это текущий заряд.
Так вот, 1% полного заряда у нас составляет 42670. Следовательно, если 3968000 / 42670 = 92,99%
Таким образом, аккумулятор не заряжается на 100% от своей ёмкости.
Спасибо за внимание, доклад окончен :)
12:21
07:43
17:13
07:45
11:42
17:42
07:48
19:41
14:52
ноут Honor Magic Book
19:19
09:47
В моём андроиде есть настройка, которая не даёт ему заряжаться больше 80%. Проверил, в айфоне есть аналогичная опция.
скажете, что это всё есть ни что иное как беспощадный маркетинг?
10:20
12:49
Не батарея , а контроллер на ней )
Искусственно ограничивает срок службы,чтоб подопытный юзер быстрее бежал в магаз за новой
10:23
Фактически - да! Поскольку при внедрении Li-ion аккумуляторов проблему перезаряда/переразряда решили на аппаратном уровне. Ключи (полевики, как правило) размыкают цепь при достижении 100% заряда. Иначе, они были очень склонны "деградировать" с резким выделением тепловой энергии, другими словами взрываться))) что, согласитесь, нельзя не заметить. А если бп подключен постоянно, происходит цикл заряда, потом минимальный разряд, потом снова заряд. Но это будет так, не важно, на каком уровне Вы отсечете - заряжать до 100, до 80 или до 60 - микроциклы "кончат" батарею, т.к. количество циклов ограничено. Убивает Li-ion лень, а дешевые блоки питания вкупе с "простой" батареей без цепей защиты могут сделать это ещё и феерично!)) Единственный способ - делать максимально длительные циклы, заряжать до 100, потом разряжать до 10/20 и снова заряжать. Бизнес-идея Вам - начать производство блоков питания для стационарного использования с "длинным" циклом, либо переключаемых между режимами!)))
18:56
09:48
https://pingvinus.ru/comment/add#c106095
10:29