Como fazer um script bash executar quando a bateria no meu laptop começa a carregar / descarregar?

2

Eu tenho uma configuração conky que exibe meu nível de bateria. O problema é que, sempre que eu conecto / desconecto meu laptop do carregador, eu preciso executar o script conky-startup para que ele seja exibido corretamente. Eu acho que isso é uma dor (mesmo que eu tenha um lançador configurado que executa o script quando clicado) e gostaria de saber o que eu preciso fazer para fazer o script executar sempre que eu ligar / desligar meu laptop do carregador.

    
por It's Willem 17.06.2015 / 00:30

3 respostas

1

Aqui está um script bem simples que pode ser adicionado como Aplicativo de Inicialização e será executado continuamente. Insira o comando que você deseja executar ao detectar a mudança no método de energia, conforme especificado nos comentários.

#!/bin/bash
# Author: Serg Kolo
# Date: June 17,2015
# Description:  this script detects changes in
# the powering method, and does something user
# specifies in appropriate field

on_ac_power
PREVIOUS=$(echo $?)

while [ 1 ]; do
    # check if we're on ac power or not
    on_ac_power
    CURRENT=$(echo $?)
    # check if previous values are current
    # are different. If they are
    # raise the flag.
    if [ $CURRENT -ne $PREVIOUS ]; then
        echo things changed
        # Insert commands you wanna run here 
        # in the space below this comment
        echo running custom stuff

        # when done: make current value previous
        # for future comparison
        PREVIOUS=$(echo $CURRENT )
    else
        # if previous values and current are same
        # it means we didn't switch from battery to
        # ac or vice versa; do nothing
        continue
    fi

    sleep 1
done
    
por Sergiy Kolodyazhnyy 17.06.2015 / 09:28
0

Quando você conecta / desconecta um cabo de alimentação, todos os scripts em /etc/pm/power.d são executados com um argumento "true" quando você conecta e um argumento "false" quando você desconecta.

Adicionar algum script ao final desse arquivo deve fazê-lo ser executado.

Se você tem muito script para executar, você deve tentar adicionar uma linha como esta:

if [ -f /path/to/the/script ]; then
    . /path/to/the/script
fi

Você provavelmente precisará garantir que o script no diretório ... / power.d / seja executável por:

cd /etc/pm/power.d/
chmod +x ./name_of_file 

Para mais informações confira esta resposta: Como posso executar um script quando a fonte de alimentação está conectada ou desligada?

    
por Eric Power 17.06.2015 / 00:55
0

Aqui está uma abordagem genérica:

#!/bin/bash

status="$(grep -Po '^charging\s+state:\s+\K.*$' /proc/acpi/battery/BAT0/state)"

if [[ $status = 'charging' ]]; then
    ##Charging, Do something

elif [[ $status = 'discharging' ]]; then
    ##Discharging, Do something

elif [[ $status = 'charged' ]]; then
    ##Charged, Do something

else
    ##Battery not found, Do something
fi
  • /proc/acpi/battery/BAT0/state contém o status da bateria, substitua BAT0 se o nome da bateria for diferente no seu caso

  • A linha que começa com charging state: do arquivo contém o status se a bateria está carregando, descarregando ou carregando

  • Salvamos a string de status dessa linha na variável status

  • Dependendo do valor de status , podemos fazer o que quisermos.

por heemayl 17.06.2015 / 01:37