Quero que meu computador reproduza um arquivo de som personalizado quando minha bateria estiver fraca (digamos 10%). Como posso fazer isso? obrigado
Quero que meu computador reproduza um arquivo de som personalizado quando minha bateria estiver fraca (digamos 10%). Como posso fazer isso? obrigado
Eu só queria responder, pois usei o conselho desta página para configurar meu próprio crontab -e
trabalho.
Estou executando o Lubuntu (confiável) e as opções acima não funcionaram para mim, mas com um pouco de ajustes, funcionou. Meu nível de (in) experiência é que sou relativamente capaz de ler scripts e comandos básicos, mas menos capaz de escrevê-los do zero nos linux disto. Menciono isso porque, se eu puder montar um alarme de bateria funcionando, a maioria de vocês lendo isso também poderá!
SO .... o script e uma explicação básica ....
De acordo com os posts acima de Glutanimate e Scott Goodgame (obrigado pessoal!), 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
Asteriscos no início
Os cinco asteriscos representam a frequência com que os comandos são executados.
*/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 pessoal /home/andy/
.
Informações da bateria de saída:
acpi -b
isso simplesmente gera 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, estamos canalizando a saída do status da bateria acima e imprimindo o valor do segundo da ponta (NF-2), que no exemplo acima é '74% '. No entanto, precisamos remover a 'porcentagem' -0 . Queremos comparar o valor atual com o valor 15 -lt "15" . Então, resumindo em inglês simples,
SE o valor da bateria for MENOS DE 15%, ENTÃO reproduza um arquivo de áudio
Aprecio que tenha diminuído um pouco e talvez minha explicação possa 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!
Ok ... então, quando meu laptop está carregando, a saída de
acpi -b
é:
Battery 0: Charging, 35%, 01:04:08 until charged
enquanto que na bateria está
Battery 0: Discharging, 36%, 01:22:36 remaining
portanto, usando o parâmetro mencionado inicialmente em
print ( $(NF-2)-0)
produz resultados diferentes, porque lembre-se de que o bit de valor NF especifica quantos itens ao contrário do final da saída serão exibidos, portanto, com a saída na bateria de
Battery 0: Discharging, 36%, 01:22:36 remaining
$(NF-2)
produz '36%', enquanto o laptop é carregado,
Battery 0: Charging, 35%, 01:04:08 until charged
$(NF-2)
produz '00: 50: 12 ', ou seja, a quantidade de tempo restante até ser carregada.
O -0
depois $(NF-2)
diminui o valor zero do valor, portanto, quando o valor é um percentual, -0
muda de algo como '36% 'para' 36 '. Quando o valor de saída é percebido como não numérico, como a saída de tempo de '01: 04: 08 'conforme acima, o valor -0
retornado é' 0 '. Assim, você pode ver meu problema - quando meu laptop está carregando, o valor da saída é sempre '0'. Como eu quero tocar um alarme quando o valor de saída é menor que 15, ele se traduz em um alarme de bateria que dispara a cada minuto quando está sendo carregado!
Eu li um pouco mais sobre a saída do awk
comando e, por fim, não precisei fazer com que ele lesse o segundo valor a partir do final; eu poderia começar do início da saída e avançar. Isso é muito melhor, pois o status da minha bateria começa da mesma forma, seja na carga ou na bateria em termos de número de parâmetros, ou seja, o quarto parâmetro desde o início é sempre o valor da carga em porcentagem.
SO ... para fazê-lo ler o quarto valor, o comando muda de
awk ' { print ($(NF-2)-0)}'
para
awk ' { print ($4)-0}'
ou em toda a sua glória:
*/1 * * * * if [ `acpi -b | awk ' { print ($4)-0}'` -lt "15" ] ; then mpg123 /home/andy/Alarm.mp3 ; fi
Mais uma vez espero que ajude alguém! Boa sorte e obrigado pela leitura!
Ok, então, um pouco mais de cutucada e eu também aprendi como definir o volume para 100% e ativar o som antes de tocar o alarme. definimos o volume para baixo ou o silenciamos ?!
De qualquer forma, o comando que você precisa é:
*/1 * * * * if [ `acpi -b | awk ' { print ($4)-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 o que fiz foi inserir a sequência de comandos
pactl set-sink-volume 0 100% && pactl set-sink-mute 0 0 &&
( &&
apenas ligam vários comandos)
Mais uma vez, boa sorte a todos!
Ok, então ... uma edição final (espero!) ... aparentemente, o sinal de porcentagem é um sinal especial ao executar tarefas cron. Portanto, você precisa "escapar" do sinal de porcentagem colocando uma barra invertida ( \
) na frente de cada um %
para que não seja (mis) interpretado pelo shell.
Então basicamente substitua
100%
com
100\%
Portanto, o comando que você realmente precisa é:
*/1 * * * * if [ `acpi -b | awk ' { print ($4)-0}'` -lt "15" ] ; then pactl set-sink-volume 0 100\% && pactl set-sink-mute 0 0 && mpg123 /home/andy/Alarm.mp3 ; fi
ufa espero que isso classifique para você como para mim !! (eventualmente!)
Você pode configurar um trabalho cron que verificará o status da bateria a cada 5/10 minutos e, dependendo da porcentagem da bateria, ele reproduzirá algum som.
Para reproduzir o som, você pode usar
mpg123
filename.mp3Para instalá-lo
sudo apt-get install mpg123
Para obter o status da bateria na linha de comando, você pode usar este comando
upower -i /org/freedesktop/UPower/devices/battery_BAT0
usando
grep
você pode extrair as informações exatas da seguinte maneiraupower -i /org/freedesktop/UPower/devices/battery_BAT0| grep -E "state|to\ full|percentage"
Agora você pode colocar todas essas coisas em um script de shell (e também uma
if
condição para verificar se o status da bateria é inferior a 10%) e apenas fornecer o caminho desse script de shell para o cron job.então, a cada 5 minutos (você pode alterar esse intervalo), o status da bateria será verificado e, se a bateria for inferior a 10%, o arquivo de som fornecido será reproduzido!
Espero que isto ajude!
fonte
Uma maneira fácil de fazer isso é adicionar uma verificação simples ao seu crontab (o cron é um sistema para executar as coisas regularmente, em uma base definida pelo usuário).
Primeiro, você precisa instalar um mp3 player e um ACPI para poder ler o estado da bateria.
Em um terminal, execute o seguinte para instalar os pacotes.
Em seguida, enquanto ainda estiver no terminal, digite
crontab -e
e digite o seguinte no final do arquivo. Apenas altere o usuário para seu nome de usuário e o arquivo .mp3 para seu nome de arquivo no diretório inicial.Pressione Control-O (a letra) e Enter para salvar. Pressione Control-x para sair
Coisas extras que você pode querer ler ...
Ubuntu CronHowto
Guia do Ubuntu
fonte
acpi |awk '{print substr($NF, 0, length($NF)-1)}'
-lt "10"]; em seguida, /home/felipelalli/Music/siren.wav aplay; fi [: expressão inteiro esperado: remainin ➜ ~ ACPI bateria 0: Descarga, 9%, 00:17:56 restanteNa verdade, usei a resposta de Andy Pyne, mas não funcionou para mim. O cron executou o código, mas não tocou o som. Finalmente encontrei a solução e a compartilhei aqui:
Etapa 1: instalar o mpg3
Etapa 2: salve o seguinte comando em
~/bin/battery_alert
Esse script reproduz o arquivo battery_low.mp3 se o laptop estiver descarregando e a carga for menor ou igual a 15%. (Se a energia CA estiver conectada, não o alertará). Este código também alerta você, se a cobrança for 100%. Se você não deseja um alerta para o estado totalmente carregado, remova a parte else deste código.
Etapa 3: Torne o arquivo executável usando o seguinte comando.
Etapa 4: execute este arquivo usando cron adicionando o seguinte comando ao final do arquivo opend by
crontrab -e
command.(Não esqueça de ter uma linha vazia após este comando)
fonte