Instala os modulos de bateria dos notebook da Acer
Publicado por aguamole (última atualização em 08/07/2024)
[ Hits: 2.660 ]
Download driver_acer-wmi-battery_install.tar.gz
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.
#!/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" <https://www.vivaolinux.com.br/~raulgrangeiro>
# Testado no Ubuntu 23.10 pelo usuário "raulgrangeiro" <https://www.vivaolinux.com.br>
# Tópico para o qual o programa foi escrito:
# <https://www.vivaolinux.com.br/topico/Kernel-Linux/Como-adicionar-um-modulo-ao-kernel-para-iniciar-automaticamente?pagina=01>
# Versão: 1.9.1
# Licença: GPLv3 <https://www.gnu.org/licenses/gpl-3.0.html>
#________________________________________________
## 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.
#
# Versão: 1.6
# * Adicionado condições para excluir BATERIA
# * Novas funções adicionadas
# * Mudança nos nomes de funções para começar o nome com F_*** para diferenciar de variáveis
# * Mudança no conteúdo de variáveis e nova variável de configuração para deletar o diretório BATERIA
#
# Versão: 1.7
# * Bug do diretório temporário corrigido
#
# Versão: 1.8
# * Bug da função F_barra ao determinar se o diretório temporário começa com "barra" corrigido
# * Criado nova função F_instalacao
# * Criado nova função F_exibir_ajuda
# * Agora o programa suporta os parâmetros --help, --install
# * Opção de instalar o programa no systemd para iniciar junto com o sistema, tornando o programa completamente automático
#
# Versão: 1.9
# * Adicionado a função F_tamanho_log para verificar o tamanho em bytes do arquivo de LOG_DA_EXECUCAO
# * Adicionado a variável COMPRESSAO_LOG, 1(um) habilita a compressão do arquivo de registro de log
# * Adicionado um recurso de compressão do LOG_DA_EXECUCAO caso seja habilitado
#
# Versão: 1.9.1
# * Adicionado nova função para adicionar o recurso de desinstalação
# * Parâmetro --uninstall adicionado para desinstalar o programa
# * Agora o programa consegue se desinstalar caso o nome do arquivo do programa seja driver_acer-wmi-battery_install.sh
# durante a instalação, o programa não suporta desinstalação com o nome do programa personalizado.
#________________________________________________
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
BATERIA="$(mktemp)" # Variável que determina onde será a compilação
CPU_NUCLEO="$(nproc)" # Variável que define quantos núcleos será usado, detecta automaticamente
LOG_DA_EXECUCAO="/var/log/acer_linux_bateria.log" # Variável que define onde o log será gerado
DEPURACAO="0" # O valor 1(um) habilita a depuração e o valor 0(zero) desabilita
QUAL_E_O_GNU_LINUX="1" # Valor 0(zero) para Debian e Ubuntu e valor 1 para outros GNU/Linux
EXCLUIR_BATERIA="1" # O valor 1(um) determina que o diretório BATERIA deve ser excluído
COMPRESSAO_LOG="1" # Valor 1(um) para habilita a compressão do arquivo LOG_DA_EXECUCAO
### 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
# Detecta se a dependências build-essential esta instalada
F_testar_essential() {
dpkg --list | grep 'build-essential' | sed 's/ .*//;s/.* //'
}
# Detecta se a dependências linux-headers esta instalado
F_testar_headers() {
dpkg --list | grep "linux-headers-$(uname -r)" | sed 's/ .*//;s/.* //'
}
# Verifica se o git esta instalado
F_testar_git() {
if type git >/dev/null 2>&1
then
return "0"
fi
}
# Filtrar se o diretório BATERIA no segundo delimitador contem "tmp"
F_delimitador() {
echo "${BATERIA}" | cut -d'/' -f2
}
# Filtrar se o conteúdo da variável BATERIA tem "/" como primeiro caractere
F_barra() {
echo "${BATERIA}" | while IFS= read -r line
do
echo "${line:0:1}"
done
}
# Função para instalar "driver_acer-wmi-battery_install.sh" no systemd
F_instalacao() {
local caminho
local programa
# Variaveis que determina a localização do programa "driver_acer-wmi-battery_install.sh"
caminho="$(cd "$(dirname "${0}")" && pwd)"
programa="$(basename "${0}")"
# Verifica se o programa "driver_acer-wmi-battery_install.sh" foi encontrado
if [[ -f "${caminho}/${programa}" ]]
then
if [[ ! -e "/sbin/${programa}" ]]
then
cp "${caminho}/${programa}" "/sbin/" # Faz a copia do programa para "/sbin/"
chmod +x "/sbin/${programa}"
# Configura o systemd
echo "[Unit]
Description=Serviço de inicialização da compilação do driver da bateria.
[Service]
Type=simple
User=root
ExecStart="/sbin/${programa}"
[Install]
WantedBy=multi-user.target" >"/etc/systemd/system/acer_wmi_battery.service"
chmod +x "/etc/systemd/system/acer_wmi_battery.service"
systemctl enable acer_wmi_battery.service
systemctl start acer_wmi_battery.service
return "0"
else
echo "Já existe /sbin/${programa} e não deveria existir. Saindo ..."
return "5"
fi
else
echo -e "O executavel do programa ${programa} não foi encontrado, \
execute o programa ${programa} passando o caminho completo. Saindo..."
return "4"
fi
}
F_exibir_ajuda() {
echo "Este programa tem a utilidade de instalar o driver da bateria dos notebook Acer.
Execute por sua conta e risco!
Opções disponíveis:
--help: Exibe esta mensagem de ajuda.
--install: Instala o programa no sistema.
Caso não seja definido algum parâmetro o programa vai executar sem instalar."
}
# Detecta o tamanho do LOG_DA_EXECUCAO e caso seja maior que 64KB ele será comprimido
F_tamanho_log() {
du -b "${LOG_DA_EXECUCAO}" | grep -oE '[0-9]+' | head -n 1
}
# Esta função desinstala o programa do systemd
F_desinstalar() {
local driver_remove
local servico
local programa
driver_remove="/sbin/driver_acer-wmi-battery_install.sh"
servico="/etc/systemd/system/acer_wmi_battery.service"
programa="$(basename "${0}")"
disintalar_driver="/sbin/${programa}"
systemctl stop acer_wmi_battery.service
systemctl disable acer_wmi_battery.service
if [[ -f "${driver_remove}" && -f "${servico}" ]]
then
rm "${driver_remove}"
rm "${servico}"
return "0"
else
if [[ -f "${disintalar_driver}" && -f "${servico}" ]]
then
rm "${disintalar_driver}"
rm "${servico}"
return "0"
else
echo "O arquivo driver_acer-wmi-battery_install.sh e ou /etc/systemd/system/acer_wmi_battery.service foi renomeado ou deletado..."
echo "Esse erro não é fatal..."
return "7"
fi
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ê não é root, execute como root!"
exit 2
fi
# Caso todas as condições seja verdadeiro, será comprimido o LOG_DA_EXECUCAO
if [[ "${COMPRESSAO_LOG}" == "1" && -f "${LOG_DA_EXECUCAO}" && "$(F_tamanho_log)" -ge "64000" ]]
then
gzip -9 "${LOG_DA_EXECUCAO}"
fi
case "${1}" in
--help)
F_exibir_ajuda # Aqui é onde sera invocada a função de ajuda
;;
--install)
F_instalacao # Inicia a instalação se requisitada
FUNCAO_INSTALACAO="${?}"
[[ "${FUNCAO_INSTALACAO}" != "0" ]] && echo "Falha na instalação! Saindo..." &&
exit "${FUNCAO_INSTALACAO}"
;;
--uninstall)
F_desinstalar
FUNCAO_DESINTALACAO="${?}"
[[ "${FUNCAO_DESINTALACAO}" != "0" ]] && echo "Saindo..." &&
exit "${FUNCAO_DESINTALACAO}"
;;
*)
if [[ -n "${1}" ]] # Verifica se o primeiro parâmetro não é vazio e se verdadeiro imprime
then
echo "Opção inválida. Use --help para obter ajuda."
exit "6"
fi
;;
esac
# Verifica se o kernel Linux atual contem a compilação "acer-wmi-battery.ko" em /lib/modules/$(uname -r)
[[ -f "/lib/modules/$(uname -r)/acer-wmi-battery.ko" ]] && exit "0"
# 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 estejam instaladas
if [[ "${QUAL_E_O_GNU_LINUX}" == "0" ]]
then
if [[ "$(F_testar_essential)" != 'build-essential' || "$(F_testar_headers)" != "linux-headers-$(uname -r)" || "$(F_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_NUCLEO}" # Inicia a compilação usando o numero de núcleos definido em CPU_NUCLEO
# 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!"
# Se as 4 condições for verdadeiro remove o diretório de compilação completamente
if [[ "${EXCLUIR_BATERIA}" == "1" && -d "${BATERIA}" && "$(F_delimitador)" == "tmp" && "$(F_barra)" == "/" ]]
then
rm -r -d "${BATERIA}"
else
echo "O diretório ${BATERIA} não foi excluído, dever ser um diretório dentro de /tmp/ para que seja excluído!"
fi
} 2>&1 | tee -a "${LOG_DA_EXECUCAO}" # Usa o tee para gravar o log
Copia arquivos distribuidos em pastas diferentes para uma única pasta.
Script para fazer download de vídeos do YouTube
Instalação do Cisco Packettracer 7.2 no Debian 10
Cadastro SHELL SCRIPT/MySQL/PHP
Nenhum comentário foi encontrado.
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Novos apps de produtividade, avanços em IA e distros em ebulição agitam o universo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
O programa assinador digital (0)
dpkg: erro: gatilho de arquivo duplicado chamado pelo arquivo de nome (6)
Instalação não está resolvendo as dependencias (2)
Captação de áudio no zorin linux começa a diminuir com o tempo (5)









