Como posso executar um script quando a fonte de alimentação está conectada ou desligada?

7

Por algum motivo, o brilho da tela do meu laptop não é atualizado quando plugio ou desconecto a fonte de alimentação. Eu olhei para algumas soluções para esse problema, mas nenhuma delas parecia funcionar bem. Então, em vez de desesperar e desistir, decidi tentar transformar isso em uma experiência de aprendizado e ver se não posso escrever um roteiro que faça isso para mim.

Eu tentei descobrir por conta própria, com alguma ajuda da internet, é claro, mas eu sou muito novo no bash scripting e no Ubuntu em geral, então eu não fui longe.

O que eu consegui descobrir foi que eu posso encontrar o estado de a bateria com

$ upower -i /org/freedesktop/UPower/devices/battery_BAT1 | grep -E "state"
state:     charging/discharging

dependendo se o adaptador AC está ou não conectado. Eu não sei se isso é útil, mas é legal, e eu não sabia como usar grep antes, então que diabos, aprender é divertido.

De qualquer forma, há uma maneira um pouco limpa de fazer isso? Por "caminho limpo", eu só quero dizer uma maneira que alguém com experiência em scripts bash limitada poderia compreender.

Uma pergunta semelhante que descobri que tinha uma boa resposta é este , que diz o seguinte:

When you plug in/out the AC adapter, the scripts in /etc/pm/power.d get called with >an argument: "true" (if you run on battery), or "false" (if you run with the power >adapter).

O problema é que não sei como acessar esse argumento de dentro de um script. Então, acho que tudo se resume a um problema bem simples, mas eu pensei em postar a pergunta de qualquer maneira, no caso de as pessoas terem melhores soluções.

    
por Jasper 27.02.2015 / 18:05

1 resposta

4

Você pode usar on_ac_power para executar um script quando o poder o fornecimento é ligado ou desligado.

Tente o seguinte em um terminal.

$ on_ac_power
$ echo $?
0              ## Laptop on ac power

$ on_ac_power
$ echo $?
1              ## Laptop on battery (not on ac power)

Com base nisso, você pode criar seu script como

#!/bin/bash
while true
do
    if on_ac_power; then 
        do_something               ## Laptop on power
    else
        do_something_else          ## Laptop on battery
    fi
    sleep 10                       ## wait 10 sec before repeating
done

EDIT: [sugerido por KasiyA ]

cron job seria uma idéia melhor para executar o script em um intervalo regular em vez de usar um loop infinito.

Salve seu script como myscript.sh e coloque o seguinte conteúdo nele

#!/bin/bash
if on_ac_power; then 
    do_something
else
    do_something_else
fi

Torne o script executável a partir de um terminal, chmod +x /path/to/myscript.sh . Abra seu pessoal crontab as EDITOR=gedit crontab -e e anexe a seguinte linha para executar seu script a cada minuto.

* * * * * /path/to/myscript.sh 
    
por souravc 27.02.2015 / 18:34