Instala os modulos de bateria dos notebook da Acer
Publicado por aguamole (última atualização em 08/07/2024)
[ Hits: 2.039 ]
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
Gera estatísticas de consumo de memória e cpu.
POSTFIX AUTOMÁTICO COM MYSQL E IPTABLES - DESBLOQUEAR IP
Firewall para Compartilhamento de Conexão 3G
Sincronizar arquivos com rsync
Desligamento programado com interface gráfica em Zenity
Nenhum comentário foi encontrado.
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
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
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI