Как я могу ограничить заряд батареи до 80% емкости?

Я только что узнал, что в некоторых ноутбуках Lenovo есть утилита, которая предлагает ограничить зарядную емкость батареи до 0–80%, чтобы замедлить срок службы батареи:

Скриншот

Как я могу сделать это в Ubuntu?

16 ответов

Решение

Пороги зарядки, к сожалению, зависят от прошивки и производителя.

К счастью, пользователю Lenovo ThinkPad предоставляется решение, описанное в ThinkWiki.

В основном это говорит о том, что вам нужно будет установить и загрузить tp_smapi модуль ядра:

sudo apt-get install tp-smapi-dkms
sudo modprobe tp_smapi

и записать желаемые пороги зарядки в виртуальные файлы в /sys/devices/platform/smapi:

echo 40 | sudo tee /sys/devices/platform/smapi/BAT0/start_charge_thresh
echo 80 | sudo tee /sys/devices/platform/smapi/BAT0/stop_charge_thresh

Затем он прекратит зарядку, когда он достигнет 80%, и начнет заряжаться только тогда, когда он опустится ниже 40%.

Toshiba и другие могут иметь аналогичный модуль ядра, который предоставляет /sys или же /proc пространство, но это очень маловероятно для патентных вопросов. По тем же причинам приложение, которое могло бы справиться с этим, будет либо ориентировано на Thinkpad, либо адресовано только нескольким избранным поставщикам.

Для Ubuntu (и других дистрибутивов) теперь доступно несколько более приятное приложение:

TLP - Linux Advanced Power Management

TLP предоставляет вам преимущества расширенного управления питанием для Linux без необходимости разбираться во всех технических деталях. TLP поставляется с конфигурацией по умолчанию, уже оптимизированной для работы от батареи, так что вы можете просто установить ее и забыть о ней. Тем не менее, TLP легко настраивается в соответствии с вашими требованиями.

Одним из параметров, которыми он управляет, является поддержание пределов зарядки аккумулятора. Он по- прежнему работает только для Thinkpads, но с учетом характера проекта - если соответствующие драйверы для других устройств станут доступными, вероятно, они также будут интегрированы в этот проект. Поэтому, если вы читаете этот комментарий через несколько лет, проверьте документацию, возможно, ваше устройство действительно поддерживается.

Пакеты Ubuntu доступны в официальном репозитории.

sudo add-apt-repository ppa:linrunner/tlp
sudo apt update
sudo apt install tlp
################ check what package needed for battery:
sudo tlp-stat -b
################ if acpi_call is recommended
sudo apt install acpi-call-dkms
################ if smapi is recommended
sudo apt install tp-smapi-dkms
sudo gedit /etc/tlp.conf
  • Найдите строки, касающиеся настроек батареи, удалите ведущий # для комментария и, возможно, вставьте желаемое значение
START_CHARGE_THRESH_BAT0=75
STOP_CHARGE_THRESH_BAT0=80
  • Перезапустить tlp
sudo tlp start
  • Проверить статус конфигурации
sudo tlp-stat -b

Принятый ответ не работает на моем новом Lenovo T440s. Видимо прошивка изменилась. После http://www.thinkwiki.org/wiki/Tpacpi-bat я сделал

git clone https://github.com/teleshoes/tpacpi-bat.git
cd tpacpi-bat/
./install.pl
sudo ./tpacpi-bat -s ST 1 15 # load internal battery when below 15%
sudo ./tpacpi-bat -s SP 1 95 # stop charging at 95%
sudo ./tpacpi-bat -g ST 2 # when is external battery loaded?

Для справки, я сделал это при тестировании Debian, но я уверен, что он работает и в Ubuntu.

На моем Toshiba R830 под управлением Windows 8.1 я установил приложение Toshiba Power Saver, чтобы ограничить заряд батареи до 80%.

Когда я загружаюсь в Linux (Ubuntu, Mint и т. Д.), Максимальный заряд по-прежнему ограничен 80%.

Следовательно, Toshiba Power Saver, похоже, сохраняет свою конфигурацию в BIOS.

Единственным недостатком является то, что если я хочу путешествовать с полностью заряженным аккумулятором, я должен перезагрузить Windows и изменить конфигурацию энергосбережения.

У меня есть ноутбук Asus, и подход, который я нашел в Интернете, заключается в следующем. Возможно, этот подход уже используется в некоторых приложениях, упомянутых выше, но он размещен здесь для информации.

  1. Создайте служебный файл с именем battery_charge_threshold.serviceкак это.
            [Unit]
    Description=Set the battery charge threshold
    After=multi-user.target
    
    [Service]
    Type=oneshot
    ExecStart=/bin/bash -c 'echo 80 > /sys/class/power_supply/BAT0/charge_control_end_threshold'
    
    [Install]
    WantedBy=multi-user.target
    
  2. Переместите файл в это место /etc/systemd/system
  3. Выполните следующие команды.
            sudo chmod 644 /etc/systemd/system/battery-charge-threshold.service
    sudo systemctl daemon-reload
    sudo systemctl enable battery-charge-threshold.service
    

После этого порог заряда 80% (согласно служебному файлу) будет сохраняться между перезагрузками. Он также прекратит зарядку аккумулятора, если текущий уровень выше 80%. Надеюсь это поможет. Пользуюсь почти 1,5 года без нареканий.

На моем Dell XPS я установил smbios-utilsпакет с использованием sudo apt install smbios-utils. Этот пакет предоставляет команду под названием smbios-battery-ctl. Похоже, что управление зарядом на основе уровня заряда батареи доступно с Ubuntu 20.04. Полная информация находится на странице руководства , но для базовой настройки 80% я думаю, что это сработает:

      sudo smbios-battery-ctl --set-custom-charge-interval 75 80
sudo smbios-battery-ctl --set-charging-mode=custom

Это начнет заряжать, когда батарея упадет ниже 75%, и прекратит зарядку, когда она достигнет 80%.

Чтобы изменить настройку обратно:

      sudo smbios-battery-ctl --set-charging-mode=adaptive

Вы проверили, есть ли на вашем ноутбуке настройки BIOS для этого? На моем ноутбуке было установлено приложение для Windows, а также параметр "Battery Life Extender" в BIOS для этой функции.

Я написал приложение командной строки, которое делает это.

Самый простой способ начать — скачать приложение со страницы релизов и запустить

      $ ./bat --help

из терминала в каталоге, где он находится, что должно показать справочную документацию.

Если есть ошибка, это может быть связано с разрешениями. Следующая команда может решить проблему.

      chmod +x ./bat

В основном, бег

      $ ./bat --threshold

распечатает текущий порог.

Чтобы установить новый порог, скажем, 60%, запустите

      ./bat --threshold 60

Чтобы сохранить текущий порог между перезапусками, запустите

      sudo ./bat --persist

Примечание. Persisting использует systemd под капотом, но он входит в состав большинства дистрибутивов Linux, включая Ubuntu.

Совет: поместите приложение в каталог, например /usr/local/bin/это в $PATHпозволит вам запускать его из любого места, а не только из каталога, в котором находится приложение. Затем приведенные выше команды становятся,

      bat --help
      bat --threshold 60
      bat --persist

соответственно.

Я только что обнаружил аппаратный хакер для ноутбуков Dell:

Зарядные устройства Dell используют 3 контакта: один для (+), один для (-) и один для связи с идентификацией зарядного устройства Dell (протокол 1-Wire). Эта линия связи обычно находится в центре разъема, игла в виде булавки.

Если вы отключите эту линию связи, ноутбук продолжит работать от сети переменного тока, но аккумулятор больше не будет заряжаться.

Найдите линию связи, перережьте ее, поместите переключатель между ними. Зарядите аккумулятор ноутбука столько, сколько хотите, а затем выключите этот переключатель. Ваш ноутбук будет использовать переменный ток, но ваша батарея будет оставаться на прежнем заряде.

См. Этот ответ для получения информации о рекомендуемых уровнях заряда для различных сценариев: /questions/709356/kak-pereustanovit-ekran-vhoda-po-umolchaniyu-v-ubuntu-1404/709366#709366

редактировать

Очевидно, недостатком такого подхода является то, что ноутбук снижает свою производительность, если не найдено идентифицированное зарядное устройство.

Это может не быть проблемой при нормальном использовании, однако, если вам нужна мощность вашего процессора, например, для 3D-дизайна, производительность заметно снижается.

Очень часто (почти всегда) это опция в BIOS, которую Windows может изменить удаленно. Дистанционно изменить это в Linux очень сложно. Мое предложение? При запуске компьютера нажимайте функциональные клавиши, а именно F1, F2, F3, F6, F8, F10 и F12. Один из них (возможно, другой) поместит вас в меню BIOS. Он говорит, какой ключ при запуске, но обычно не остается достаточно долго.

Посмотрите на настройки питания (только клавиши со стрелками здесь, без мыши). Найти заставку или оптимизатор теста или что-то в этом роде. Измените его на включенный, а затем сохраните и перезапустите. Это должно сделать это.

Linux имеет тенденцию волноваться, когда батарея не заряжается выше 80%, но это просто испортит ожидаемое время зарядки. Здесь не о чем беспокоиться.

Все еще нужна помощь? Прокомментируйте свой вопрос! Я помог? +1 мне:)

Для ноутбуков LG Gram есть специальный драйвер ядра, который, по-видимому, активен из коробки, по крайней мере, в EndeavourOS, для конкретных функций LG Gram см. https://www.kernel.org/doc/html/latest/admin-guide/ноутбуки/lg-laptop.html

В частности, он также предоставляет «Ограничение по уходу за батареей». Цитата с той страницы:

Запись 80/100 в /sys/devices/platform/lg-laptop/battery_care_limit устанавливает максимальную емкость для зарядки аккумулятора. Ограничение заряда уменьшает потерю емкости аккумулятора с течением времени.

Это значение сбрасывается до 100 при загрузке ядра.

Так, например, вы можете вручную установить ограничение на 80 с помощью следующей команды:

      echo '80' | sudo tee /sys/devices/platform/lg-laptop/battery_care_limit

Я протестировал это на своем LG Gram 16, и, похоже, он работает отлично: при подключении переменного тока с зарядом 85% KDE сообщает, что он заряжается, но процент остается на уровне 85% (при этом «время до полного» заблокировано на 1:41).

Как указано в приведенной выше цитате, это значение будет сброшено при загрузке ядра, поэтому вам, возможно, придется снова изменить значение.

Я предполагаю, что для более автоматического решения, tlpтакже поддерживает это, https://gist.github.com/linrunner/fee8feeb079efc03001d9f3671146298.

https://maniacx.github.io/Battery-Health-Charging/device-compatibility

Этот сайт содержит список совместимых устройств, поддерживающих порог зарядки, а также командную строку в Ubuntu (или даже в других дистрибутивах). Для некоторых ноутбуков могут потребоваться дополнительные зависимости.

Список ноутбуков:

      Acer
Apple (Intel series)
Apple (M series)
Asus
Dell
Huawei
Few models with Intel QC71 chip
LG
Lenovo
MSI
Panasonic
Razer
Samsung
Sony
System76
Thinkpad
Toshiba
Tuxedo

Этот веб-сайт представляет собой файл readme для расширения Gnome Battery Health Charging. Но он также включает информацию о настройке порога зарядки с помощью командной строки в терминале. Вы найдете его внизу в разделе «Информация» . Для получения информации о зависимостях проверьте раздел «Зависимости» .

Это поможет пользователям найти команду и зависимости, необходимые для установки порога зарядки на своих ноутбуках.

Простое решение для оповещений по сценариям для всех устройств

Если вы просто хотите получать оповещения об определенном уровне зарядки, вы можете использовать этот скрипт:https://www.2daygeek.com/linux-low-full-charging-discharging-battery-notification .

В System76 теперь встроено собственное программное обеспечение «порога зарядки»: https://support.system76.com/articles/laptop-battery-thresholds/

Я попробовал TLP на этом System76 Oryx Pro 9, и, к сожалению, он (пока) не поддерживается TLP (кстати, TLP очень крут и многообещающ; надеюсь, со временем он будет добавлять и поддерживать все больше и больше систем):

      $ sudo tlp-stat -b                                                                                                                                                                       
--- TLP 1.5.0 --------------------------------------------                                                                                                                                                 
                                                                                                                                                                                                           
+++ Battery Care                                                                                                                                                                                           
Plugin: generic                                                                                                                                                                                            
Supported features: none available                                                                                                                                                                         

но, к счастью,system76-power charge-thresholdsпохоже, работает, следуя их инструкциям на странице, указанной выше, включая использование systemd для его сохранения. (Очевидно, запланированы графический интерфейс и встроенная сохраняемость, но они еще не полностью реализованы.)

      $ system76-power charge-thresholds 
Profile: Maximum Lifespan (max_lifespan)
Start: 50
End: 60

(Я использую предустановленный профиль «max_lifespan»; есть 2 или 3 других; но вы также можете установить собственные уровни для «начала» и «конца»)

(В Ubuntu 20.04)

На моем ноутбуке asus

      sudo -i eval "echo 60 > /sys/class/power_supply/BAT0/charge_control_end_threshold"

Если /sys/class/power_supply/BAT0/charge_control_end_thresholdего нет, скорее всего, ваш ноутбук его не поддерживает.

Это значение сбрасывается каждый раз, когда вы перезагружаете ноутбук. Вы можете настроить задание cron или службу systemd, чтобы восстановить его. Об этом есть отличная статья https://www.linuxuprising.com/2021/02/how-to-limit-battery-charging-set.html

Другие вопросы по тегам