Eu só queria responder, pois usei os conselhos nesta página para configurar meu próprio trabalho crontab -e
.
Eu estou rodando o Lubuntu (fiel) e o acima não funcionou para mim, mas com alguns ajustes ele funcionou. Meu nível de (in) experiência é que eu sou relativamente capaz de ler scripts e comandos básicos, mas menos capaz de escrevê-los a partir do zero no linux disto. Eu mencionei isso porque se eu puder consertar um alarme de bateria funcionando, a maioria de vocês que está lendo isso deve ser capaz também!
SO .... o roteiro e uma explicação básica ....
De acordo com os posts acima por Glutanimate e Scott Goodgame (obrigado pessoal!), eu basicamente fiz o seguinte:
Para obter o mpg123 e poder reproduzir áudio:
sudo apt-get install acpi mpg123
Arquivo a ser aberto para gravar o comando:
crontab -e
Comando para inserir no final do arquivo:
*/1 * * * * if [ 'acpi -b | awk ' { print ( $(NF-2)-0)}'' -lt "15" ] ; then mpg123 /home/andy/Alarm.mp3 ; fi
Explicação acima
Asteriscos no início
Os cinco asteriscos representam a frequência na qual os comandos são executados.
- Primeira estrela = minutos: 0 a 59
- Segunda estrela = horas: 0 a 23
- Terceira estrela = Dia do mês: 0 - 31
- Quarta estrela = Mês: 0 - 12
- Quinta estrela = Dia da semana: 0 - 6 (0 significa domingo)
*/1 * * * *
significa "execute isso a cada minuto".
SE / ENTÃO / FI:
IF [ stuff inside these brackets ] ; THEN do something ; FI
A maioria de vocês, imagino, está muito familiarizada com as declarações IF / THEN. O FI no final conclui a declaração IF
Reproduzindo o áudio:
mpg123 /home/andy/Alarm.mp3
isso simplesmente usa mpg123
para reproduzir um arquivo chamado Alarm.mp3
localizado no meu diretório home /home/andy/
.
Informações sobre a bateria de saída:
acpi -b
isto simplesmente mostra o status da bateria. No meu laptop, ele produz resultados como:
Battery 0: Discharging, 74%, 02:35:18 remaining
Comando pipe to awk
| awk ' { print ( $(NF-2)-0)}'' -lt "15"
Ok, então estamos distribuindo a saída do status da bateria acima e imprimindo o valor do segundo a partir do final (NF-2) , que o exemplo acima é '74% '. No entanto, precisamos remover a "porcentagem" -0 . Queremos comparar o valor atual com o valor 15 -lt "15" . Então, para resumir em inglês simples,
SE o valor da bateria for inferior a 15%, então reproduza um arquivo de áudio
Eu apreciei ter diminuído um pouco e talvez minha explicação pudesse ser melhorada, mas espero que ajude alguém a entender como adicionar um alarme para a bateria e evitar que seus laptops desliguem de repente !
Boa sorte!
EDITAR
Ok ... então, quando meu laptop está carregando, a saída
acpi -b
é:
Battery 0: Charging, 35%, 01:04:08 until charged
enquanto que na bateria é
Battery 0: Discharging, 36%, 01:22:36 remaining
usando o parâmetro mencionado inicialmente de
print ( $(NF-2)-0)
gera resultados diferentes, porque lembre-se, o bit NF- valor especifica quantos itens para trás a partir do final da saída para exibir, assim com a saída na bateria de
Battery 0: Discharging, 36%, 01:22:36 remaining
$(NF-2)
saídas '36% ', enquanto com o laptop responsável,
Battery 0: Charging, 35%, 01:04:08 until charged
$(NF-2)
outputs '00: 50: 12 ', ou seja, o tempo restante até ser cobrado.
O -0
após $(NF-2)
diminui o zero do valor, portanto, quando o valor é um percentual -0
, altera de algo como '36% 'para' 36 '. Quando o valor de saída é percebido como não numérico, como a saída de hora de '01: 04: 08 'como acima, o valor -0
returns é' 0 '. Então você pode ver o meu problema - quando o meu laptop está no comando, o valor de saída é sempre '0'. Como quero tocar um alarme quando o valor de saída for menor que 15, ele se traduz em um alarme de bateria que se apaga a cada um minuto quando estiver em carga!
Eu li um pouco mais sobre a saída do comando awk
e, ao final, não precisei ler o segundo valor do final. Eu pude começar do início da saída e pular para frente. . Isso é muito melhor, pois o status da minha bateria começa do mesmo modo, seja no modo de carga ou na bateria em termos de número de parâmetros, ou seja, o quarto parâmetro do início é sempre o valor da carga em porcentagem.
SO ... para fazer com que ele leia o quarto valor, o comando muda de
awk ' { print ($(NF-2)-0)}'
para
awk ' { print ()-0}'
ou em toda a sua glória:
*/1 * * * * if [ 'acpi -b | awk ' { print ()-0}'' -lt "15" ] ; then mpg123 /home/andy/Alarm.mp3 ; fi
Mais uma vez espero que ajude alguém! Boa sorte e obrigado pela leitura!
EDIÇÃO DE BÔNUS
Ok, um pouco mais de atenção e eu também trabalhei em como ajustar o volume para 100% e ativar antes de tocar o alarme - porque, vamos encarar, qual é o objetivo de um alarme de bateria se você não consegue ouvi-lo? porque você definiu o volume como baixo ou mudo?!
De qualquer forma, o comando que você precisa é:
*/1 * * * * if [ 'acpi -b | awk ' { print ()-0}'' -lt "15" ] ; then pactl set-sink-volume 0 100% && pactl set-sink-mute 0 0 && mpg123 /home/andy/Alarm.mp3 ; fi
como você pode ver, tudo que eu fiz foi inserir a string de comando
pactl set-sink-volume 0 100% && pactl set-sink-mute 0 0 &&
(os &&
apenas ligam vários comandos juntos)
Mais uma vez, boa sorte a todos!
ÚLTIMA EDIÇÃO
Ok, então ... uma final (esperançosamente!edite ... aparentemente, o sinal de porcentagem é um sinal especial ao executar tarefas do cron. Portanto, você precisa 'escapar' do sinal de porcentagem colocando uma barra invertida ( \
) na frente de cada %
, de modo que não seja (mal) interpretada pelo shell.
Então, basicamente, substitua
100%
com
100\%
Portanto, o comando que você realmente precisa é:
*/1 * * * * if [ 'acpi -b | awk ' { print ()-0}'' -lt "15" ] ; then pactl set-sink-volume 0 100\% && pactl set-sink-mute 0 0 && mpg123 /home/andy/Alarm.mp3 ; fi
phew espero que o classifique para você como tem para mim !! (eventualmente!)