Гугл перевод
Новые ноутбуки ASUS поддерживают ограничение уровня заряда батареи, что помогает продлить срок службы батареи. В этой статье объясняется, как установить порог заряда батареи для ноутбуков ASUS в Linux.
Срок службы батареи зависит от возраста, высоких температур, количества циклов зарядки и времени полной зарядки. Порог заряда батареи сокращает время полной зарядки (100%) и, таким образом, улучшает работоспособность/срок службы батареи.
Ноутбуки ASUS поддерживают установку порога заряда, начиная с Linux 5.4 . Метод ядра WMI для установки порогового значения заряда не позволяет указать батарею, предполагая, что это первая батарея ( BAT0). Однако для некоторых более новых ноутбуков ASUS основная батарея называется не BAT0, а BATT(например, Zenbook UM431DA) и BAT1(например, ASUS TUF Gaming FX706II). [Править] А еще есть BATC.
Таким образом, хотя ноутбуки ASUS поддерживают ограничение зарядки аккумулятора, начиная с Linux 5.4, это возможно только для ноутбуков с BAT0. Для ноутбуков ASUS, использующих BATTв качестве основного имени батареи, вам потребуется ядро 5.7 , а для BAT1вас потребуется ядро 5.8 (в инструкциях ниже вы увидите, как именно проверить имя батареи). [Изменить] Для ноутбуков ASUS, использующих имя батареи BATC, вам необходимо использовать Linux 5.9 или новее.
Кроме того, не все ноутбуки ASUS поддерживают настройку порога заряда батареи, поэтому в зависимости от модели вашего ноутбука ASUS это может работать или не работать для вас; нет списка поддерживаемых устройств, которые я мог бы найти.
Важно отметить, что метод ядра WMI для установки порога заряда батареи для ноутбуков ASUS может установить только значение остановки ( charge_control_end_threshold) (он также не может установить порог запуска). Кроме того, при подключении переменного тока, если уровень заряда батареи выше порога остановки зарядки, она не будет разряжаться до порога остановки.
И еще одно замечание. С моим ASUS ZenBook 14 UX433FAC под управлением Ubuntu 20.04 с оболочкой GNOME, при ограничении зарядки аккумулятора, когда уровень заряда равен или превышает порог заряда, а затем подключить ноутбук к сети переменного тока, индикатор батареи на верхней панели меняется с оставшегося времени пока батарея не разрядится до времени, оставшегося до зарядки батареи. Это происходит, даже если аккумулятор не заряжается. Через некоторое время (так что это не происходит мгновенно, когда вы подключаете ноутбук к сети переменного тока), индикатор батареи меняется на «Не заряжается», как и должно быть.
Помимо ASUS, некоторые ноутбуки Lenovo и Huawei (последний получил поддержку Linux 5.5 ) также имеют поддержку ограничения зарядки аккумулятора. Но поскольку у меня есть только ноутбук ASUS и я не могу протестировать его на других устройствах, это руководство предназначено только для ASUS. Lenovo поддерживает это уже довольно давно, а TLP поддерживает встроенную настройку (только для IBM/Lenovo ThinkPad). В качестве примечания, вот графический интерфейс для TLP , чтобы легко настроить его, если вы еще не используете его.
1. Узнайте название аккумулятора вашего ноутбука ASUS.
Давайте начнем с выяснения названия батареи для вашего ноутбука ASUS. Это можно сделать с помощью следующей команды:
ls /sys/class/power_supply
Эта команда должна вывести что-то вроде этого:
AC0 BAT0
В этом примере (из моего ноутбука ASUS) имя батареи — BAT0, но, как я упоминал выше, для вас это также может быть BAT1 или BATT, это единственные имена батарей, поддерживаемые ядром для ноутбуков ASUS.
2. Создайте службу systemd для установки порога остановки заряда батареи при загрузке.
Перед созданием службы systemd проверьте, есть ли на вашем ноутбуке charge_control_end_threshold( /sys/class/power_supply/BAT*без нее это не сработает):
ls /sys/class/power_supply/BAT*/charge_control_end_threshold
Если эта команда возвращает путь к charge_control_end_threshold, ваш ноутбук ASUS поддерживает ограничение зарядки аккумулятора. Если команда возвращает ошибку о том, что такого файла или каталога нет, значит, ваш ноутбук не поддерживает установку порога заряда.
Если на вашем ноутбуке ASUS есть этот файл, мы можем продолжить. Создайте файл, который мы будем называть battery-charge-threshold.service./etc/systemd/system
Вы можете открыть этот файл в текстовом редакторе консоли по умолчанию, используя:
sudo gedit /etc/systemd/system/battery-charge-threshold.service
или любой другой графический редактор, который вы хотите использовать (например, чтобы Gedit открывал этот файл как root :)gedit admin:///etc/systemd/system/battery-charge-threshold.service
В этот файл вам нужно будет вставить следующее:
[Unit]
Description=Set the battery charge threshold
After=multi-user.target
StartLimitBurst=0[Service]
Type=oneshot
Restart=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, BAT1 или BATT) и CHARGE_STOP_THRESHOLD на порог остановки заряда батареи, который вы хотите использовать (в диапазоне от 1 до 100). Обратите внимание, что один пользователь не мог установить порог заряда на любое значение, а только на 60, 80 и 100.
Из того, что я читал, для наилучшего срока службы батареи, когда ноутбук большую часть времени подключен к сети переменного тока, установите порог остановки заряда батареи на уровне 50 или 60. Если батарея используется довольно часто, установите порог остановки зарядки батареи на уровне 50 или 60. около 90.
3. Включите и запустите службу systemd battery-charge-threshold.
Теперь давайте включим и запустим только что созданный сервис systemd battery-charge-threshold:
sudo systemctl enable battery-charge-threshold.service
sudo systemctl start battery-charge-threshold.service
С помощью systemd 220 можно включить и запустить службу напрямую с помощью systemctl enable --now, но я предпочитаю использовать 2 команды на случай, если некоторые читатели используют более старую версию systemd.
Если вы хотите изменить пороговый уровень остановки заряда батареи, вам нужно отредактировать /etc/systemd/system/battery-charge-threshold.serviceфайл и изменить число в ExecStart строке (после echo) на новое значение, которое вы хотите использовать, а затем перезагрузить systemd (поскольку содержимое файла изменилось ) и перезапустите службу systemd с помощью следующих команд:
sudo systemctl daemon-reload
sudo systemctl restart battery-charge-threshold.service
4. Убедитесь, что порог остановки заряда аккумулятора работает.
Если ваш ноутбук ASUS поддерживает это, предел зарядки аккумулятора теперь должен быть установлен на значение, которое вы использовали на шаге 2.
Вы можете проверить это, зарядив свой ноутбук до порога, установленного в battery-charge-threshold.service, а затем использовать эту команду:
cat /sys/class/power_supply/BATTERY_NAME/status
Замените BATTERY_NAME на название батареи, как описано в шаге 1.
Если порог остановки заряда батареи работает, команда должна показать следующий вывод:
Not Charging
Если он говорит «Discharging», убедитесь, что ваш ноутбук ASUS действительно работает от сети переменного тока, а не от батареи. Однако, если он говорит «Charging», ну... тогда ваш ноутбук заряжается выше порога остановки зарядки, так что это не работает для вас, либо потому, что ваш ноутбук ASUS не поддерживает это (что странно, если у вас есть charge_control_end_threshold как упоминается в шаге 2), либо вы используете версию Linux, которая слишком старая для ограничения зарядки аккумулятора на вашем ноутбуке ASUS, ну или из-за человеческой ошибки .
Дополнительно: если вы не используете systemd, вы также можете сделать это с помощью cron, запустив
sudo crontab -e
и вставив следующую строку, хотя это не во всех случаях надежно из того, что я читал (я не уверен, почему):
@reboot echo CHARGE_STOP_THRESHOLD > /sys/class/power_supply/BATTERY_NAME/charge_control_end_threshold
Замените CHARGE_STOP_THRESHOLD на пороговое значение остановки заряда батареи, которое вы хотите использовать, и BATTERY_NAME на имя батареи, как показано на шаге 1.
Зачем использовать службу systemd или задание cron? Согласно пользователю u/esrevartb, от которого я адаптировал эти инструкции, « кажется, что правило udev не работает либо потому, что путь sysfs батареи еще не инициализирован, когда правило применяется, либо потому, что этот конкретный атрибут charge_control_end_threshold не может быть модифицировал таким образом ».
Добавлено. Чтобы легко установить порог заряда для ноутбуков ASUS (автоматическая настройка службы systemd и возможность изменить порог заряда с помощью команды), а также проверить текущий порог заряда, см . bat .
В TLP 1.4.0 также добавлена поддержка ограничения зарядки аккумулятора на ноутбуках ASUS.
Оригинал статьи:
https://www-linuxuprising-com.translate.goog/2021/02/how-to-...
У меня на ASUS tuf A15 в ОС Fedora 36 workstation команда:
cat /sys/class/power_supply/BATTERY_NAME/status
выдаёт
Unknown
однако, процесс заряда не превышает установленных мною 60%