Como adicionar módulo de saúde da bateria dos notebooks Acer ao kernel para iniciar automaticamente?

37. Re: Como adicionar módulo de saúde da bateria dos notebooks Acer ao kernel para iniciar automaticame

Raul Lopes S. Grangeiro
raulgrangeiro

(usa Fedora)

Enviado em 05/05/2024 - 13:53h

aguamole escreveu:

#!/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.6
# 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
#________________________________________________

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_CORES="$(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

### 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
echo "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}" | sed 's/^\(.\).*/\1/p'
}
#________________________________________________

# 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 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_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!"

# 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


Testei aqui e tive essa saída, parceiro:

++ id -u
+ [[ 0 == \0 ]]
+ echo 'Você é root!'
Você é root!
+ [[ ! -e /tmp/tmp.blH4OjGEAH ]]
+ [[ ! -d /tmp/tmp.blH4OjGEAH ]]
+ echo '/tmp/tmp.blH4OjGEAH é um arquivo e deveria ser diretório, remova o arquivo e tente novamente, abortado!'
/tmp/tmp.blH4OjGEAH é um arquivo e deveria ser diretório, remova o arquivo e tente novamente, abortado!
+ exit 3


Saberia como podemos resolver, por gentileza? Estou terminando de escrever o artigo, aí falta somente acertarmos o funcionamento do script e publico!

Deus o abençoe!

Creia no Senhor Jesus Cristo e serás salvo!


  


38. Re: Como adicionar módulo de saúde da bateria dos notebooks Acer ao kernel para iniciar automaticamente?

Raul Lopes S. Grangeiro
raulgrangeiro

(usa Fedora)

Enviado em 06/05/2024 - 15:04h

@aguamole

Sei que ele fala para apagar o arquivo, mas esse arquivo não fui eu que criei, então poderia ser que um usuário viesse a ter o mesmo problema. Seria melhor ele criar uma pasta com o nome específico que nenhuma outra tenha?

Creia no Senhor Jesus Cristo e serás salvo!


39. Re: Como adicionar módulo de saúde da bateria dos notebooks Acer ao kernel para iniciar automaticame

aguamole
aguamole

(usa KUbuntu)

Enviado em 06/05/2024 - 22:26h

raulgrangeiro escreveu:
++ id -u
+ [[ 0 == \0 ]]
+ echo 'Você é root!'
Você é root!
+ [[ ! -e /tmp/tmp.blH4OjGEAH ]]
+ [[ ! -d /tmp/tmp.blH4OjGEAH ]]
+ echo '/tmp/tmp.blH4OjGEAH é um arquivo e deveria ser diretório, remova o arquivo e tente novamente, abortado!'
/tmp/tmp.blH4OjGEAH é um arquivo e deveria ser diretório, remova o arquivo e tente novamente, abortado!
+ exit 3


E ai, você conferiu? é um diretório mesmo ou um arquivo? se for um arquivo o "/tmp/tmp.blH4OjGEAH" então esta correto, se for um diretório então esta errado onde tem
if [[ ! -d "${BATERIA}" ]]   # Verifica se o BATERIA não é diretório 
a exclamação não deveria estar ai deveria ser
if [[ -d "${BATERIA}" ]]   # Verifica se o BATERIA não é diretório 


O "/tmp/tmp.blH4OjGEAH" é um diretório certo?


40. Re: Como adicionar módulo de saúde da bateria dos notebooks Acer ao kernel para iniciar automaticame

aguamole
aguamole

(usa KUbuntu)

Enviado em 06/05/2024 - 22:40h

A sim, já intende o que aconteceu, o mktemp cria arquivos temporarios, e para ele criar diretorios tem que passar o parametro -d ficando "mktemp -d".
Fica assim agora:
#!/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.7
# 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
#________________________________________________

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 -d)" # Variável que determina onde será a compilação
CPU_CORES="$(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

### 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
echo "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}" | sed 's/^\(.\).*/\1/p'
}
#________________________________________________

# 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 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_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!"

# 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

Eu estou te falando, esse programa será totalmente automatizado, se você lançar uma documentação agora ela vai ficar desatualizada. Lança a documentação no github que vc pode ir atualizando ela aos poucos.
Hoje eu estava programando o systemd para colocar ele para rodar automático na inicialização do sistema.


41. Re: Como adicionar módulo de saúde da bateria dos notebooks Acer ao kernel para iniciar automaticamente?

Raul Lopes S. Grangeiro
raulgrangeiro

(usa Fedora)

Enviado em 07/05/2024 - 18:55h


aguamole escreveu:

raulgrangeiro escreveu:
++ id -u
+ [[ 0 == \0 ]]
+ echo 'Você é root!'
Você é root!
+ [[ ! -e /tmp/tmp.blH4OjGEAH ]]
+ [[ ! -d /tmp/tmp.blH4OjGEAH ]]
+ echo '/tmp/tmp.blH4OjGEAH é um arquivo e deveria ser diretório, remova o arquivo e tente novamente, abortado!'
/tmp/tmp.blH4OjGEAH é um arquivo e deveria ser diretório, remova o arquivo e tente novamente, abortado!
+ exit 3


E ai, você conferiu? é um diretório mesmo ou um arquivo? se for um arquivo o "/tmp/tmp.blH4OjGEAH" então esta correto, se for um diretório então esta errado onde tem
if [[ ! -d "${BATERIA}" ]]   # Verifica se o BATERIA não é diretório 
a exclamação não deveria estar ai deveria ser
if [[ -d "${BATERIA}" ]]   # Verifica se o BATERIA não é diretório 


O "/tmp/tmp.blH4OjGEAH" é um diretório certo?


No dia que vi não cheguei a conferir, e nessa sessão esse arquivo/pasta já não existem.

Creia no Senhor Jesus Cristo e serás salvo!


42. Re: Como adicionar módulo de saúde da bateria dos notebooks Acer ao kernel para iniciar automaticamente?

Raul Lopes S. Grangeiro
raulgrangeiro

(usa Fedora)

Enviado em 07/05/2024 - 19:07h


aguamole escreveu:

A sim, já intende o que aconteceu, o mktemp cria arquivos temporarios, e para ele criar diretorios tem que passar o parametro -d ficando "mktemp -d".
Fica assim agora:
#!/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.7
# 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
#________________________________________________

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 -d)" # Variável que determina onde será a compilação
CPU_CORES="$(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

### 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
echo "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}" | sed 's/^\(.\).*/\1/p'
}
#________________________________________________

# 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 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_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!"

# 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

Eu estou te falando, esse programa será totalmente automatizado, se você lançar uma documentação agora ela vai ficar desatualizada. Lança a documentação no github que vc pode ir atualizando ela aos poucos.
Hoje eu estava programando o systemd para colocar ele para rodar automático na inicialização do sistema.


Dessa vez funcionou, mas não excluiu o diretórios temporários que ele criou, olha o log:

++ id -u
+ [[ 0 == \0 ]]
+ echo 'Você é root!'
Você é root!
+ [[ ! -e /tmp/tmp.X2P7sea7ZG ]]
+ [[ ! -d /tmp/tmp.X2P7sea7ZG ]]
+ [[ -f /tmp/tmp.X2P7sea7ZG/acer-wmi-battery.ko ]]
+ cd /tmp/tmp.X2P7sea7ZG
+ [[ 0 == \0 ]]
++ F_testar_essential
++ dpkg --list
++ sed 's/ .*//;s/.* //'
++ grep build-essential
+ [[ build-essential != \b\u\i\l\d\-\e\s\s\e\n\t\i\a\l ]]
++ F_testar_headers
++ dpkg --list
++ sed 's/ .*//;s/.* //'
+++ uname -r
++ grep linux-headers-6.5.0-28-generic
++ uname -r
+ [[ linux-headers-6.5.0-28-generic != \l\i\n\u\x\-\h\e\a\d\e\r\s\-\6\.\5\.\0\-\2\8\-\g\e\n\e\r\i\c ]]
++ F_testar_git
++ type git
++ echo 0
+ [[ 0 != \0 ]]
++ echo '*'
+ [[ * == \* ]]
+ git clone https://github.com/frederik-h/acer-wmi-battery.git
Cloning into 'acer-wmi-battery'...
+ cp -r /tmp/tmp.X2P7sea7ZG/acer-wmi-battery/acer-wmi-battery.c /tmp/tmp.X2P7sea7ZG/acer-wmi-battery/LICENSE /tmp/tmp.X2P7sea7ZG/acer-wmi-battery/Makefile /tmp/tmp.X2P7sea7ZG/acer-wmi-battery/README.md /tmp/tmp.X2P7sea7ZG/
+ rm -d -r /tmp/tmp.X2P7sea7ZG/acer-wmi-battery/
+ make -j16
make -C /lib/modules/6.5.0-28-generic/build M=/tmp/tmp.X2P7sea7ZG modules
make[1]: aviso: jobserver indisponível: usando -j1. Inclua '+' na regra pai.
make[1]: Entrando no diretório '/usr/src/linux-headers-6.5.0-28-generic'
warning: the compiler differs from the one used to build the kernel
The kernel was built by: x86_64-linux-gnu-gcc-13 (Ubuntu 13.2.0-4ubuntu3) 13.2.0
You are using: gcc-13 (Ubuntu 13.2.0-4ubuntu3) 13.2.0
CC [M] /tmp/tmp.X2P7sea7ZG/acer-wmi-battery.o
MODPOST /tmp/tmp.X2P7sea7ZG/Module.symvers
CC [M] /tmp/tmp.X2P7sea7ZG/acer-wmi-battery.mod.o
LD [M] /tmp/tmp.X2P7sea7ZG/acer-wmi-battery.ko
BTF [M] /tmp/tmp.X2P7sea7ZG/acer-wmi-battery.ko
Skipping BTF generation for /tmp/tmp.X2P7sea7ZG/acer-wmi-battery.ko due to unavailability of vmlinux
make[1]: Saindo do diretório '/usr/src/linux-headers-6.5.0-28-generic'
++ uname -r
+ cp /tmp/tmp.X2P7sea7ZG/acer-wmi-battery.ko /lib/modules/6.5.0-28-generic
+ depmod
+ modprobe acer_wmi_battery
+ [[ -f /tmp/tmp.X2P7sea7ZG/acer-wmi-battery.ko ]]
+ rm /tmp/tmp.X2P7sea7ZG/acer-wmi-battery.ko
+ [[ 1 == \1 ]]
+ [[ -d /tmp/tmp.X2P7sea7ZG ]]
++ F_delimitador
++ echo /tmp/tmp.X2P7sea7ZG
++ cut -d/ -f2
+ [[ tmp == \t\m\p ]]
++ F_barra
++ echo /tmp/tmp.X2P7sea7ZG
++ sed 's/^\(.\).*/\1/p'
+ [[ /
/ == \/ ]]
+ echo 'O diretório /tmp/tmp.X2P7sea7ZG não foi excluído, dever ser um diretório dentro de /tmp/ para que seja excluído!'
O diretório /tmp/tmp.X2P7sea7ZG não foi excluído, dever ser um diretório dentro de /tmp/ para que seja excluído!


E sobre a tua sugestão: bem que eu queria, amigo, mas acredito que eu não tenha competência para resolver um bug, por exemplo, no código do git caso ele seja modificado e venha a causar problemas. Pensei em documentar aqui pelo site para facilitar para outras pessoas que tiverem esse notebook e quiserem fazer a função funcionar. Mas, numa atualização futura, caso venha a quebrar, e eu tiver mais conhecimento na área poderei colocar lá para outras pessoas usufruírem de atualizações. No caso aqui, esse script super organizado só é possível por causa da sua ajuda, senão eu publicaria meu primeiro script super simples, que apesar de tudo funciona, mas está longe de ser o ideal.

Creia no Senhor Jesus Cristo e serás salvo!


43. Re: Como adicionar módulo de saúde da bateria dos notebooks Acer ao kernel para iniciar automaticamente?

aguamole
aguamole

(usa KUbuntu)

Enviado em 07/05/2024 - 20:18h

Eu estava dando a ideia era de você criar a arquivos de textos.txt ou makedown.md e upar eles para o github, eu não estava falando do programa, e ai você ia editando os arquivos .txt ate sair a versão final do programa, e ai então você postava tudo no vivaolinux.


44. Re: Como adicionar módulo de saúde da bateria dos notebooks Acer ao kernel para iniciar automaticame

aguamole
aguamole

(usa KUbuntu)

Enviado em 07/05/2024 - 22:12h

#!/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.8
# 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
#________________________________________________

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_CORES="$(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

### 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."
}
#________________________________________________

# 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

# 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"

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}"
;;
*)
if [[ -n "${1}" ]]
then
echo "Opção inválida. Use --help para obter ajuda."
exit "6"
fi
;;
esac

# 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_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!"

# 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

Se estiver tudo funcionando, então é a versão final, não tem mais funções a adicionar, ou será que tem? Ele esta totalmente automatizado.
Eu antes desta versão estava pensando em adicionar um recurso para fazer uma compressão automaticamente do log depois que ele atingir um certo tamanho, porque arquivo no formato texto.txt ocupam muito espaço de armazenamento.
Pega essa versão e posta em scripts do vivaolinux e coloca um link na dica apontando para a pagina do script no vivaolinux.
Não, melhor, eu vou postar nos scripts do vivaolinux, e ai você aponta para ele na sua dica.


45. Re: Como adicionar módulo de saúde da bateria dos notebooks Acer ao kernel para iniciar automaticamente?

aguamole
aguamole

(usa KUbuntu)

Enviado em 09/05/2024 - 09:29h

Eu estive pensando hoje, talvez programar a desinstalação.


46. Re: Como adicionar módulo de saúde da bateria dos notebooks Acer ao kernel para iniciar automaticamente?

Raul Lopes S. Grangeiro
raulgrangeiro

(usa Fedora)

Enviado em 13/05/2024 - 13:59h


aguamole escreveu:

Eu estive pensando hoje, talvez programar a desinstalação.


Boa tarde, meu amigo! Tudo bem com o senhor? Desculpa demorar a voltar desde a última mensagem, tive uma semana passada extremamente cheia e praticamente não consegui voltar a mexer no computador e ver as coisas.

Sobre ser um software a ser instalado na máquina vou dar uma opinião minha e pedir uma opinião do senhor. Infelizmente esse módulo não está no kernel Linux incorporado como todos os outros módulos de drivers que fazem o notebook funcionar corretamente, mas há um método de inseri-lo manualmente, que é o que estamos fazendo, e funciona super bem. Mas é preciso que o usuário entenda o que ele está fazendo, pois caso hajam problemas ele pode pedir ajuda à comunidade e resolver. Se tudo ficar completamente automatizado ele não saberá nada sobre, e quando houver problemas será mais difícil solucionar, isso porque muitos usuários (como eu) não são programadores ou da área de TI, então caso eles tenham problemas com o script ou o módulo virão a nós pedir ajuda, e caso consigamos ajudar é ótimo, mas caso contrário, ficarão com mais problemas.

Inicialmente fiz um script super simples para automatizar a recompilação do módulo no kernel, que é apenas um dos passos na instalação, mas o sistema completo na manutenção. Há todo um tutorial de como fazer o módulo inciar automaticamente e acredito que seja útil fazê-lo pelo menos até esse módulo vir incoporado no kernel (isso se um dia vier), e depois fazer-se apenas a execução de um comando no terminal e ele automatiza a recompilação do módulo, deixando assim o usuário ciente do que está fazendo e se der problemas, como ele mesmo colocou cada arquivo em seu devido lugar, fica muito mais fácil pra ele resolver. Aqui na minha máquina estou usando a versão 1.5 do script que foi a última que funcionou bem, e eu apenas dou o comando
acer-wmi-battery 
no terminal e o sistema faz o resto, mas tudo inseri manualmente então sei exatamente o que fiz. Então acredito que um script mais simples com esse uso seja mais interessante, além de ser mais fácil consertar. Talvez o ideal fosse fazer algo simples como o script 1.5, mas com a expertise do senhor em deixá-lo seguro contra mau uso, e aí no artigo eu consigo ensinar como fazer cada passo de forma simples e o usuário saberá o que ele próprio está fazendo.

O que o senhor acha?

Creia no Senhor Jesus Cristo e serás salvo!


47. Re: Como adicionar módulo de saúde da bateria dos notebooks Acer ao kernel para iniciar automaticame

aguamole
aguamole

(usa KUbuntu)

Enviado em 13/05/2024 - 15:00h

raulgrangeiro escreveu:


aguamole escreveu:

Eu estive pensando hoje, talvez programar a desinstalação.


Boa tarde, meu amigo! Tudo bem com o senhor? Desculpa demorar a voltar desde a última mensagem, tive uma semana passada extremamente cheia e praticamente não consegui voltar a mexer no computador e ver as coisas.

Sobre ser um software a ser instalado na máquina vou dar uma opinião minha e pedir uma opinião do senhor. Infelizmente esse módulo não está no kernel Linux incorporado como todos os outros módulos de drivers que fazem o notebook funcionar corretamente, mas há um método de inseri-lo manualmente, que é o que estamos fazendo, e funciona super bem. Mas é preciso que o usuário entenda o que ele está fazendo, pois caso hajam problemas ele pode pedir ajuda à comunidade e resolver. Se tudo ficar completamente automatizado ele não saberá nada sobre, e quando houver problemas será mais difícil solucionar, isso porque muitos usuários (como eu) não são programadores ou da área de TI, então caso eles tenham problemas com o script ou o módulo virão a nós pedir ajuda, e caso consigamos ajudar é ótimo, mas caso contrário, ficarão com mais problemas.

Inicialmente fiz um script super simples para automatizar a recompilação do módulo no kernel, que é apenas um dos passos na instalação, mas o sistema completo na manutenção. Há todo um tutorial de como fazer o módulo inciar automaticamente e acredito que seja útil fazê-lo pelo menos até esse módulo vir incoporado no kernel (isso se um dia vier), e depois fazer-se apenas a execução de um comando no terminal e ele automatiza a recompilação do módulo, deixando assim o usuário ciente do que está fazendo e se der problemas, como ele mesmo colocou cada arquivo em seu devido lugar, fica muito mais fácil pra ele resolver. Aqui na minha máquina estou usando a versão 1.5 do script que foi a última que funcionou bem, e eu apenas dou o comando
acer-wmi-battery 
no terminal e o sistema faz o resto, mas tudo inseri manualmente então sei exatamente o que fiz. Então acredito que um script mais simples com esse uso seja mais interessante, além de ser mais fácil consertar. Talvez o ideal fosse fazer algo simples como o script 1.5, mas com a expertise do senhor em deixá-lo seguro contra mau uso, e aí no artigo eu consigo ensinar como fazer cada passo de forma simples e o usuário saberá o que ele próprio está fazendo.

O que o senhor acha?

Creia no Senhor Jesus Cristo e serás salvo!

É justamente para esse propósito que programas tem documentação, essas documentações devem explicar ao leitor tudo que ele precisa saber para operar o programa, incluindo informações técnicas. Acredita que ate cities skylines tem documentação de como usar o programa(cities skylines)? Ate alguns jogo tem documentação.
A documentação deve instruir o usuário a como manipular o software.

A instalação no systemd não é obrigatória, o programa funciona sem estar no systemd.
Para que a instalação no systemd ocorra é preciso passar o parâmetro "--install".

As versões 1.7 e 1.8 recebeu correções.


48. Re: Como adicionar módulo de saúde da bateria dos notebooks Acer ao kernel para iniciar automaticame

aguamole
aguamole

(usa KUbuntu)

Enviado em 15/05/2024 - 18:56h

#!/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
# 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
#________________________________________________

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
}
#________________________________________________

# 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

# 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"

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}"
;;
*)
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 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

Versão: 1.9 adicionado um recurso de compressão do LOG_DA_EXECUCAO caso seja habilitada a compressão só vai comprimir se o log tiver maior que 64KB, o que é bastante caractere. O principal motivo para isso, é que arquivos de txt quando muito grande, alguns leitores de txt ficam lentos, e também rodar o scroll do mouse ate o final do arquivo txt leva muito tempo devido a isso esta habilitado por padrão.






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts