Instala os modulos de bateria dos notebook da Acer
Publicado por aguamole (última atualização em 08/07/2024)
[ Hits: 1.994 ]
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
Script em Bash para gerenciar as novas versões do Java e permitir escolher a versão pa
Instalação do Cisco Packettracer 7.2 no Debian 10
Redundância de dois links de internet
Nenhum comentário foi encontrado.
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
SysAdmin ou DevOps: Qual curso inicial pra essa área? (0)
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (3)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta