Blog Linux Avante

Como limitar o carregamento da bateria (definir um limite de carga) para laptops ASUS no Linux

18 de fevereiro de 2021

limitar o carregamento da bateria do asus linux

Os laptops ASUS mais novos suportam a limitação do nível de carga da bateria, o que ajuda a prolongar a vida da bateria. Este artigo explica como definir um limite de carga da bateria para laptops ASUS no Linux.

A vida útil da bateria é afetada pela idade, altas temperaturas, o número de ciclos de carga e o tempo de carga total. Um limite de carga da bateria reduz o tempo de carga total (100%) e, portanto, melhora a vida/saúde da bateria.

Os laptops ASUS são compatíveis com a definição de um limite de carga começando com Linux 5.4. O método kernel WMI para definir o limite de carga não fornece uma maneira de especificar uma bateria, supondo que seja a primeira bateria (BAT0). No entanto, para alguns laptops ASUS mais recentes, a bateria principal não é chamada BAT0, mas BATT (por exemplo, Zenbook UM431DA) e BAT1 (por exemplo, ASUS TUF Gaming FX706II). [Atualização] E também há BATC.

Portanto, embora os notebooks ASUS suportem a limitação do carregamento da bateria a partir do Linux 5.4, isso é apenas para notebooks com BAT0. Para notebooks ASUS usando BATT como o nome da bateria principal, você precisará do kernel 5.7, enquanto que para BAT1 você vai precisar do kernel 5.8 (nas instruções abaixo você verá exatamente como verificar o nome da bateria). [Atualização] Para laptops ASUS usando o nome da bateria BATC, você precisará usar Linux 5.9 ou mais recente.

Além disso, nem todos os laptops ASUS suportam a configuração de um limite de carga da bateria, portanto, dependendo do modelo do seu laptop ASUS, isso pode ou não funcionar para você; não há uma lista de dispositivos compatíveis que consegui encontrar.

É importante mencionar que o método WMI do kernel para definir o limite de carga da bateria para notebooks ASUS pode apenas definir o valor de parada (charge_control_end_threshold) (ele também não pode definir o limite de inicialização). Além disso, com CA conectada, se o nível da bateria for superior ao limite de parada de carga, ela não será descarregada até o limite de parada.

E outra nota. Com meu ASUS ZenBook 14 UX433FAC executando Ubuntu 20.04 com GNOME Shell, ao limitar o carregamento da bateria enquanto o nível da bateria é igual ou maior que o limite de carga e, em seguida, conectar o laptop a AC, o indicador de bateria no painel superior muda com o tempo restante até que a bateria descarregue o tempo restante até que seja carregada. Isso acontece mesmo que a bateria não esteja carregando. Depois de um tempo (portanto, não é instantâneo quando você conecta seu laptop ao CA), o indicador da bateria muda para dizer "Não está carregando", como deveria.

Além da ASUS, alguns notebooks Lenovo e Huawei (com o último recebendo suporte com Linux 5.5) também têm suporte para limitar o carregamento da bateria. Mas como eu só tenho um laptop ASUS e não posso testá-lo em outros dispositivos, este guia é apenas para ASUS. A Lenovo tem suporte para isso há um bom tempo, e TLP tem suporte para configuração este embutido (apenas para IBM/Lenovo ThinkPads). Como observação lateral, aqui está uma GUI para TLP para configurá-lo facilmente, caso você ainda não esteja usando.

Como definir um limite de parada de carga da bateria para laptops ASUS no Linux

1. Descubra o nome da bateria do seu laptop ASUS

Vamos começar descobrindo o nome da bateria do seu laptop ASUS. Isso pode ser feito usando o seguinte comando:

Comandos para usar no terminal

ls /sys/class/power_supply

Este comando deve gerar algo assim:

AC0  BAT0

Neste exemplo (do meu notebook ASUS), o nome da bateria é BAT0, mas como mencionei acima, para você também pode ser BAT1 ou BATT, sendo esses os únicos nomes de bateria suportados pelo kernel para notebooks ASUS.

2. Crie um serviço systemd para definir o limite de interrupção da carga da bateria na inicialização

Antes de criar o serviço systemd, verifique se seu laptop realmente tem charge_control_end_threshold em /sys/class/power_supply/BAT* (sem ele, isso não funcionará):

Comandos para usar no terminal

ls /sys/class/power_supply/BAT*/charge_control_end_threshold

Se este comando retornar o caminho para charge_control_end_threshold , então seu notebook ASUS suporta a limitação do carregamento da bateria. Se o comando retornar um erro, informando que não existe tal arquivo ou diretório, então seu laptop não suporta a configuração de um limite de carga.

Se o seu laptop ASUS tiver esse arquivo, podemos continuar. Crie um arquivo que chamaremos de battery-charge-threshold.service em /etc/systemd/system.

Você pode abrir este arquivo com o editor de texto do console padrão usando:

Comandos para usar no terminal

sudo editor /etc/systemd/system/battery-charge-threshold.service

Ou use Gedit ou qualquer editor gráfico que você deseja usar (por exemplo, para Gedit para abrir este arquivo como root: gedit admin:///etc/systemd/system/battery-charge-threshold.service)

Neste arquivo, você precisará colar o seguinte:

[Unit]
Description=Set the battery charge threshold
After=multi-user.target
StartLimitBurst=0

[Service]2.
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

Aqui, altere BATTERY_NAME com o nome da bateria (BAT0, BAT1 ou BATT) e CHARGE_STOP_THRESHOLD com o limite de parada de carga da bateria que deseja usar (variando entre 1 e 100). Observe que li que um usuário não conseguiu definir a cobrança threshold para qualquer valor, mas apenas para 60, 80 e 100.

Pelo que li, para melhor vida útil da bateria quando o laptop está conectado à CA na maioria das vezes, é melhor definir o limite de interrupção da carga da bateria em cerca de 50 ou 60. Se a bateria for usada com certa frequência, defina o limite de interrupção da carga da bateria em cerca de 90.

3. Ative e inicie o serviço systemd de limite de carga da bateria

Agora vamos ativar e iniciar o serviço systemd de limite de carga de bateria recém-criado:

Comandos para usar no terminal

sudo systemctl enable battery-charge-threshold.service

sudo systemctl start battery-charge-threshold.service

  • Com o systemd 220, é possível habilitar e iniciar um serviço diretamente usando systemctl enable --now, mas prefiro usar 2 comandos no caso de alguns leitores usarem uma versão anterior do systemd. *

Se você deseja alterar o nível de limite de parada de carga da bateria, você precisará editar o arquivo /etc/systemd/system/battery-charge-threshold.service e alterar o número da linha ExecStart (após echo) para o novo valor que deseja usar e recarregar o systemd (porque o conteúdo do arquivo foi alterado) e reinicie o serviço systemd usando os seguintes comandos:

Comandos para usar no terminal

sudo systemctl daemon-reloadsudo systemctl restart battery-charge-threshold.service

4. Verifique se o limite de interrupção da carga da bateria está funcionando

Se o seu laptop ASUS for compatível, o limite de carga da bateria agora deve ser definido para o valor que você usou na etapa 2.

Você pode verificar isso carregando seu laptop até o limite definido em battery-charge-threshold.service e, em seguida, use este comando:

Comandos para usar no terminal

cat /sys/class/power_supply/BATTERY_NAME/status

Substitua BATTERY_NAME pelo nome da bateria, conforme explicado na etapa 1.

Se o limite de parada de carga da bateria estiver funcionando, o comando deve mostrar a seguinte saída:

Comandos para usar no terminal

Not Charging

Se disser "Descarregando", certifique-se de que seu laptop ASUS esteja realmente com alimentação CA e não funcionando com bateria. No entanto, se disser "Carregando", bem ... então seu laptop está carregando além do limite de parada de carga, então isso não está funcionando para você, porque seu laptop ASUS não suporta isso (o que é estranho se você tiver charge_control_end_threshold como mencionado na etapa 2), você está usando uma versão do Linux que é muito antiga para limitar o carregamento da bateria em seu notebook ASUS, ou devido a um erro humano 😁️.

Extra: Caso você não use o systemd, você também pode fazer isso usando cron, executando sudo crontab -e e, em seguida, colando a seguinte linha (esta é uma linha única, clique três vezes na linha para selecionar a linha inteira):

@reboot echo CHARGE_STOP_THRESHOLD > /sys/class/power_supply/BATTERY_NAME/charge_control_end_threshold

Substituindo CHARGE_STOP_THRESHOLD pelo limite de parada de carga da bateria que você deseja usar e BATTERY_NAME pelo nome da bateria, conforme visto na etapa 1.

Por que usar um serviço systemd ou um cron job? De acordo com u/esrevartb, de quem adaptei essas instruções, "parece que a regra do udev não está funcionando porque o caminho do sysfs da bateria ainda não foi inicializado quando a regra é aplicada ou porque este atributo específico charge_control_end_threshold não pode ser modificado desta forma".

[[Atualização] Eu também encontrei um serviço de script e systemd para definir facilmente um limite de carga da bateria para notebooks ASUS no Linux. Usando isso, é mais fácil alterar o limite de carga da bateria (tudo que você precisa fazer é executar ./limit.sh CHARGE_STOP_THRESHOLD)

via r/linuxhardware (obrigado u/esrevartb)

Confira a versão original desse post em inglês
Propaganda
Blog Comments powered by Disqus.
Propaganda