Como configurar valor de bateria em nível crítico acima de 20% no Xfce4 Power Manager?

Olá, eu estou tendo problemas com o Xfce4 Power Manager no Linux Mint. A bateria do meu notebook possui um problema que a faz marcar a porcentagem errada de carga (40% é o novo zero, digamos assim). Antes de escrever este tópico, eu havia pesquisado sobre isso e encontrei pessoas falando para calibrá-la, mas já tentei fazer isso várias vezes e não dá certo. Provavelmente é um defeito de fabricação que afeta a forma como é feita a medição da carga, pois a bateria dura bastante. Mas isso não é exatamente um problema, pois um meio de contornar isso é justamente colocar, via software, um valor de bateria em nível crítico que corrija este erro (dá pra descobri-lo fazendo continhas simples). No Windows, podemos fazer essa correção de maneira bem fácil abrindo o gerenciador de energia do sistema e escrevendo a porcentagem desejada. Porém, no Xfce4 Power Manager, o gerenciador do Linux Mint, essa opção possui um limitante: O valor de nível crítico deve estar entre 0 e 20%. Qualquer valor acima disso o programa não permite. Existe alguma maneira de contornar este bloqueio? Algum arquivo de configuração que eu posso abrir e trocar a porcentagem “na marra”? Ou um gerenciador alternativo que me permita colocar uma porcentagem qualquer?

1 curtida

Verifiquei aqui no meu noteebook e de fato o máximo permitido é 20%. Não sei como aumentar esse limite. Certamente deve ter alguma maneira editando os arquivos de configuração da aplicação. Como sugestão vc pode testar o gerenciamento de energia utilizando o TLP Gui (tem para download na loja do mint), pode ser uma alternativa. Veja:

https://linrunner.de/en/tlp/tlp.html

Nunca utilizei o TLP, mas ele é bastante completo e possivelmnte tenha as configurações que vc necessita.

2 curtidas

Olá! Bom, com relação ao TLP, @tnsampa, eu baixei e dei uma olhada nas opções, mas não encontrei essa configuração nele. Eu também pesquisei onde ficam os arquivos de configuração do Xfce4 Power Manager. O arquivo de configuração xfce4-power-manager.xml fica em ~/.config/xfce4/xfconf/xfce-perchannel-xml/, e eu até consegui editar, mas não surtia efeito, além de que no próximo boot ele trocava o arquivo novamente e colocava 20%. Tentei proibir a edição do arquivo, pra ver se forçava ele a usar o valor que eu havia inserido, mas surpreendentemente ele cria outro arquivo de configuração com outro nome :open_mouth:.

Bom, como não consegui fazer funcionar via configuração, e aparentemente esse problema está longe de ser resolvido em atualizações futuras do Xfce4 Power Manager, já que não afeta tantas pessoas assim, eu fiz uma pequena gambiarra. Basicamente, eu escrevi um script em Python, usando um pacote chamado psutil, que verifica se o computador está conectado na tomada e qual a porcentagem. Se ele não estiver conectado, e a porcentagem for menor que aquela que eu defini como sendo nível crítico, ele executa um comando em shell script, systemctl suspend, e suspende o computador. O único problema é que esse comando necessita root, então eu tive que fazer outra gambiarra pra ele executar como root. Depois, foi só mandar ele executar o script em python na inicialização do sistema. É uma mega gambiarra, mas por enquanto já serve.

Ah, vou recomendar aqui um monitor de bateria no qual você pode definir avisos de bateria baixa para qualquer porcentagem que você queira. Ele mostra uma notificação na tela a cada aviso que você definir. O programa se chama Battery Monitor, e pode ser baixado seguindo os passos nesse link. Esse programa meio que complementa a minha gambiarra :joy:.

Se alguém tiver uma solução melhor, sinta-se a vontade em compartilhar. Com certeza deve haver uma forma mais simples e eficiente de resolver isso.

1 curtida

Solução que eu encontrei, mas de forma mais detalhada:

Assumindo que o Python (eu utilizei a versão 3.6.8) já esteja instalado em seu computador, será necessário instalar o pacote psutil. Os comandos para a instalação são:

sudo apt-get install gcc python3-dev
pip3 install psutil

Para mais detalhes, veja este link. Com isso, o script em Python que eu escrevi já deverá funcionar.

Considerando que o problema de sua bateria é o mesmo que o meu, onde temos uma carga mínima “c”, e uma carga máxima “C”, onde c > 0 ou C < 100 (Ou seja, diferentemente do esperado, que seria c = 0, e C = 100). Então precisamos descobrir, com relação a esses novos mínimos e máximos, quem será o valor correspondente aos 20% (nível crítico). Então, podemos descobrí-lo realizando o seguinte cálculo: c + 0,20*(C-c). O resultado dessa conta será o nível crítico correspondente a sua bateria. Aqui, você altera o número 0,20 da forma como preferir, como por exemplo 0,15 para 15%, 0,10 para 10%, e assim por diante. Descoberta a carga de nível crítico, devemos substituí-la no código Python.

Agora, vou fazer algumas considerações antes de apresentar o código, visto que para escrevê-lo, eu fiz uma pesquisa pela internet para encontrar comandos que cumprissem com os meus objetivos, que eram:

  • Encontrar a porcentagem de carga atual da bateria e saber se o computador está conectado na tomada.
  • Utilizar como critério a carga crítica que foi calculada para suspender o computador, caso não esteja sendo recarregado.

Para o primeiro objetivo, neste link a resposta destacada apresentou um código que fazia justamente isso. Com essas informações armazenadas em variáveis, construí uma condicional que realizava a verificação do segundo objetivo.

No segundo objetivo, foi necessário executar um comando que fosse reconhecido pelo sistema, no caso o systemctl suspend. Além disso, como o comando necessitava root, foi necessário um passo a mais, que era justamente conceder este privilégio ao script. Neste tópico, foram apresentadas algumas formas de dar essa permissão. A que eu escolhi foi uma na qual ele simula o comando sudo e o usuário digitando a senha do perfil. Mas neste mesmo tópico, alguns usuários alertam para o perigo de expor a senha do usuário root no código dessa maneira, então já fica aqui o meu aviso. Esse é um dos motivos que me fazem não gostar tanto dessa solução, mas é uma gambiarra, e também era isso ou ficar com o computador desligando a toa. Sinta-se livre para escolher entre fazer ou não o procedimento que eu estou expondo aqui neste tópico. Ele não é o único método de fazer isso, nem o mais eficiente, mas é o único que eu encontrei até o momento e que resolveu o problema para mim.

Bom feitas essas considerações, vamos ao código:

import psutil
import os
import time
i = 1
while i == 1:
    battery = psutil.sensors_battery()
    plugged = battery.power_plugged
    percent = str(battery.percent)
    if plugged==False and float(percent) <= valorcalculado:
        sudoPassword = 'senha'
        command = 'systemctl suspend'
        p = os.system('echo %s|sudo -S %s' % (sudoPassword, command))
    time.sleep(20)

O while servirá para repetir a verificação indefinidamente, uma vez que enquanto i for 1, a verificação é feita. Mas i nunca vai ser diferente de 1, portanto ele nunca termina. Como é de se esperar, ele fará isso tantas vezes quanto o seu computador aguentar, então no fim do ciclo temos um comando que força ele a esperar 20 segundos antes de fazer a nova verificação. Assim não pesa tanto na cpu. Aqui, este tempo é ajustável de acordo com as suas necessidades.

No código, você deverá substituir o trecho senha pela senha do usuário root. Novamente, por sua conta e risco. E no lugar de valorcalculado, coloque o valor da carga de nível crítico que foi calculado anteriormente. Salve o código em um arquivo.py. Agora, basta abrir o gerenciador de inicialização do seu sistema e configurá-lo para executar o comando python3 arquivo.py, lembrando que no lugar de arquivo.py deve constar todo o caminho do arquivo, caso contrário ele não será encontrado. Feito isso, após reiniciar o computador, o código já estará cuidando de sua bateria.

Agora, uma sugestão: como o código não emite aviso de que a bateria está acabando e que ele irá suspender o computador, recomendo instalar o Battery Monitor para configurar avisos nas porcentagens que você considerar conveniente.

Referências:

https://www.cyberciti.biz/faq/linux-command-to-suspend-hibernate-laptop-netbook-pc/

1 curtida