Você vai perceber que quando sua distribuição
Linux receber uma atualização de kernel o módulo de bateria não vai mais iniciar e a extensão de bateria vai apresentar um erro dizendo que não pode encontrar o módulo e a função irá parar de funcionar. Isso acontece porque o módulo que foi compilado no item 3 deste artigo apenas funciona para a versão específica do kernel para o qual foi compilado. Então, se você copiar o arquivo da pasta antiga para a nova pasta do kernel não vai adiantar.
Para resolver esse problema é preciso fazer o procedimento descrito em 3.
INSTALANDO O MÓDULO PARA O KERNEL novamente, mas isso é muito cansativo de fazer constantemente e manualmente já que as distribuições fazem atualizações regulares do kernel. Nesse momento acionou-se a
Comunidade VOL e criou-se um script para automatizar esse procedimento ao ponto que o usuário apenas necessitará digitar um comando no terminal e reiniciar o computador e o módulo voltará a ser carregado e tudo funcionará como deve. O tópico onde o script foi criado foi o seguinte:
https://www.vivaolinux.com.br/topico/Kernel-Linux/Como-adicionar-um-modulo-ao-kernel-para-iniciar-automaticamente/?pagina=04
A última versão do script no momento da escrita deste artigo é a 1.5, versão essa que foi testada e comprovado seu funcionamento na distribuição Linux Ubuntu 23.10, e tem o seguinte código:
#!/bin/bash
# Programa criado para automatizar procedimento de instalação de
# módulo de saúde de BATERIA de notebook Acer no Kernel Linux
# quando uma nova versão do kernel Linux for instalada.
# Implementação inicial por "raulgrangeiro"
# Testado no Ubuntu 23.10 pelo usuário "raulgrangeiro"
# Tópico para o qual o programa foi escrito:
#
# Versão: 1.5
# Licença: GPLv3
#________________________________________________
## Changelog:
#
# Versão: 1.0
# * Mudança de nomes de variáveis.
# * Remoção de código inútil.
# * Simplificação de código para detectar numero de núcleos.
# * Adicionado versionamento
# * Bloco NEWS para registrar mudanças no programa.
# * Adicionado licenciamento de acordo com as regras do site vivaolinux.
#
# Versão: 1.1
# * Agora a compilação vai acontecer independente do arquivo acer-wmi-battery.ko já existir.
# * Bloco NEWS foi substituído pelo bloco changelog.
#
# Versão: 1.2
# * Adicionado configuração de habilitar ou desabilitar a depuração(habilite antes de reportar)
#
# Versão: 1.3
# * Novas e primeiras funções criadas
# * Adicionado configuração que permite selecionar sistema operacional
# * Agora se configurar Ubuntu e Debian algumas dependências serão instaladas automaticamente
#
# Versão: 1.4
# * Bug ao baixar o código fonte corrigido
# * Agora além do log também vai aparecer a execução no terminal
#
# Versão: 1.5
# * Modificação do diretório padrão de compilação para não ser dependente da pasta do usuário, sem dar erro de compilação.
# * Remoção automática do diretório padrão de compilação após execução.
#________________________________________________
set -e -u # Não editar esta parte do programa
#________________________________________________
## Configurações do programa "driver_acer-wmi-battery_install.sh"
## Para facilitar a configuração do usuário comum
## Essas configurações são opcionais você pode manter a configuração já definida
## Habilite a depuração caso for reportar um erro no programa
## Altere o diretório de compilação somente se necessário, esse diretório será excluído ao final da execução
BATERIA="/tmp/BATERIA" # Variável que determina onde será a compilação (SOMENTE ALTERE SE SOUBER O QUE ESTÁ FAZENDO)
CPU_CORES="$(nproc)" # Variável que define quantos núcleos será usado, detecta automaticamente
LOG_DA_EXECUCAO="/tmp/linux_bateria.log" # Variável que define onde o log será gerado
DEPURACAO="1" # O valor 1(um) habilita a depuração e o valor 0(zero) desabilita
QUAL_E_O_GNU_LINUX="0" # Valor 0(zero) para Debian e Ubuntu e valor 1 para outros GNU/Linux
### Fim da configuração
### A partir daqui para baixo não edite o programa
#________________________________________________
## Depuração
if [[ "${DEPURACAO}" == "1" ]]
then
set -x -e -u
fi
#________________________________________________
## Funções
testar_essential() {
dpkg --list | grep 'build-essential' | sed 's/ .*//;s/.* //'
}
#
testar_headers() {
dpkg --list | grep "linux-headers-$(uname -r)" | sed 's/ .*//;s/.* //'
}
#
testar_git() {
if type git >/dev/null 2>&1
then
echo "0"
fi
}
#________________________________________________
# Tudo executado a partir daqui vai ser gravado em LOG_DA_EXECUCAO
{
# Verifica se é superusuario e notifica, caso não seja aborta a execução
if [[ "$(id -u)" == "0" ]]
then
echo "Você é root!"
else
echo "Você não é root, execute como root!"
exit 2
fi
# Verifica se o diretório BATERIA não existe
if [[ ! -e "${BATERIA}" ]] # Verifica se o diretório BATERIA não existe
then
mkdir -p "${BATERIA}" # Se o diretório BATERIA não existir ele será criado
else
if [[ ! -d "${BATERIA}" ]] # Verifica se o BATERIA não é diretório
then
# Existe algum arquivo no diretório BATERIA e por isso é abortado
echo "${BATERIA} é um arquivo e deveria ser diretório, remova o arquivo e tente novamente, abortado!"
exit 3
else
# Se o arquivo acer_wmi_battery existir ele será deletado
if [[ -f "${BATERIA}/acer-wmi-battery.ko" ]]
then
rm "${BATERIA}/acer-wmi-battery.ko"
fi
fi
fi
cd "${BATERIA}" # Entra no diretório BATERIA
# Instalar as dependências de compilação segundo github do projeto "acer-wmi-battery" caso ainda não estajam instaladas
if [[ "${QUAL_E_O_GNU_LINUX}" == "0" ]]
then
if [[ "$(testar_essential)" != 'build-essential' || "$(testar_headers)" != "linux-headers-$(uname -r)" || "$(testar_git)" != "0" ]]
then
apt-get -y install build-essential linux-headers-"$(uname -r)" git
fi
fi
# Baixa o código fonte do driver no diretório BATERIA
if [[ "$(echo *)" == "*" ]]
then
git clone https://github.com/frederik-h/acer-wmi-battery.git
cp -r "${BATERIA}"/acer-wmi-battery/* "${BATERIA}/"
rm -d -r "${BATERIA}/acer-wmi-battery/"
fi
make -j"${CPU_CORES}" # Inicia a compilação usando o numero de núcleos definido em cpu_cores
# Faz uma copia do arquivo do modulo compilado para os módulos do kernel carregado
cp "${BATERIA}/acer-wmi-battery.ko" "/lib/modules/$(uname -r)"
depmod # Gerar arquivos modules.dep e map
modprobe acer_wmi_battery # Carrega o módulo do kernel
# Remove o arquivo acer-wmi-battery.ko caso ele seja um arquivo
[[ -f "${BATERIA}/acer-wmi-battery.ko" ]] && rm "${BATERIA}/acer-wmi-battery.ko" ||
echo "Falha ao remover acer-wmi-battery.ko, arquivo não existe ou é um diretório, \
isso não é fatal"
# Remove o diretório de compilação completamente já que não é mais necessário
rm -rf ${BATERIA}
} 2>&1 | tee -a "${LOG_DA_EXECUCAO}"
Apenas copie e cole esse código completo em um editor de texto simples e salve o arquivo com o nome
driver_acer-wmi-battery_install.sh
Veja que no início do código você tem as seguintes configurações para fazer:
- BATERIA: recomendo que não altere este local pois ele foi testado como funcional para a compilação do módulo, o que nem sempre acontece
- CPU_CORES: o próprio script explica que serve para definir o número de núcleos para a execução. Não é necessário alterar.
- LOG_DA_EXECUCAO: Este item gera um log salvo na pasta especificada em seguida. Não é necessário alterar.
- DEPURACAO: Isso é útil caso hajam problemas e você queira ver exatamente quais estes que estão acontecendo. Recomendo deixar habilitado.
- QUAL_E_O_GNU_LINUX: Esta opção serve para dizer se o Linux a ser instalado é o Ubuntu e Debian (ou outros baseados nestes) ou outras distros. Serve para instalar alguns pacotes requisitos que o criador do módulo pede que estejam instalados nos sistemas baseados em Debian. Escolha de acordo com sua distro.
Após ter salvo o script, copie-o para a pasta
/usr/local/bin. Não será possível fazer isso apenas abrindo o seu Gerenciador de Arquivos porque se trata de uma pasta do sistema, portanto execute o gerenciador de arquivos como Super Usuário pelo terminal:
sudo seu_gerenciador_de_arquivos
No meu caso é o Nautilus, então fica:
sudo nautilus
Se der o erro como mostrado antes
(org.gnome.Nautilus:28836): Gtk-WARNING **: 08:33:38.240: Failed to open display, coloque a opção "-R" ao comando, deixando-o assim:
sudo -R nautilus
Com ele aberto, navegue até a pasta onde salvou o script, copie-o e depois cole-o na pasta especificada acima.
Agora é preciso dar permissão de execução para o script, o que pode ser feito facilmente com o seguinte comando no terminal:
sudo chmod +x /usr/local/bin/driver_acer-wmi-battery_install.sh
Agora é preciso criar um alias para o script, que é uma espécie de apelido para ele no sistema, e isso vai permitir que você chame o script apenas digitando um simples comando no terminal, e ele fará todo o restante, deixando esse processo longo e cansativo incrivelmente simples. Para isso abra sua pasta home, depois use as opções do seu gerenciador de arquivos para mostrar os arquivos ocultos. No Nautilus que uso aqui fica neste local:
Agora procure pelo arquivo
.bashrc e abra-o com o seu editor de texto e no final do arquivo cole a seguinte linha e depois Salve e Feche:
alias acer-wmi-battery="sudo driver_acer-wmi-battery_install.sh"
Agora carregue o novo alias com o seguinte comando no terminal:
source ~/.bashrc
Feito isso o processo está finalizado. Quando um novo kernel for instalado, e a extensão de bateria do Acer acusar a falta do módulo, abra o terminal e digite apenas isto:
acer-wmi-battery
Reinicie seu computador e pronto, tudo estará funcionando normalmente.
1.
2.
3.
4. Reinstalando O Módulo Quando Atualizar O Kernel Do Sistema
5.