Risposte:
Volevo solo rispondere mentre utilizzavo i consigli in questa pagina per configurare il mio crontab -e
lavoro.
Sto eseguendo Lubuntu (fidato) e quanto sopra non ha funzionato per me, ma con un po 'di modifiche ha funzionato. Il mio livello di esperienza (in) è che sono relativamente in grado di leggere script e comandi di base, ma meno in grado di scriverli da zero in Linux Disto. Lo dico perché se riesco a mettere insieme un allarme di batteria funzionante, la maggior parte di voi che leggono questo dovrebbe essere in grado di farlo!
Quindi .... la sceneggiatura e una spiegazione di base ....
Come per i post sopra di Glutanimate e Scott Goodgame (grazie ragazzi!), Ho praticamente fatto quanto segue:
Per ottenere mpg123 ed essere in grado di riprodurre l'audio:
sudo apt-get install acpi mpg123
File da aprire per scrivere il comando:
crontab -e
Comando per inserire alla fine del file:
*/1 * * * * if [ `acpi -b | awk ' { print ( $(NF-2)-0)}'` -lt "15" ] ; then mpg123 /home/andy/Alarm.mp3 ; fi
Asterischi all'inizio
I cinque asterischi rappresentano la frequenza con cui eseguire i comandi.
*/1 * * * *
significa "esegui questo ogni minuto".
If / then / FI:
IF [ stuff inside these brackets ] ; THEN do something ; FI
La maggior parte di voi, immagino, hanno molta familiarità con le affermazioni IF / THEN. L'IF alla fine conclude la dichiarazione IF
Riproduzione dell'audio:
mpg123 /home/andy/Alarm.mp3
questo semplicemente utilizza mpg123
per riprodurre un file chiamato Alarm.mp3
situato nella mia home directory /home/andy/
.
Informazioni sulla batteria di uscita:
acpi -b
questo semplicemente emette lo stato della batteria. Sul mio laptop produce risultati come:
Battery 0: Discharging, 74%, 02:35:18 remaining
Comando pipe to awk
| awk ' { print ( $(NF-2)-0)}'` -lt "15"
Ok, quindi stiamo eseguendo il piping dell'output dello stato della batteria sopra e stampando il valore secondo dalla fine (NF-2) che nell'esempio sopra è '74% '. Tuttavia, dobbiamo rimuovere la 'percentuale' -0 . Vogliamo confrontare il valore corrente con il valore 15 -lt "15" . Quindi per riassumere in un inglese semplice,
SE il valore della batteria è MENO DEL 15% ALLORA, riprodurre un file audio
Apprezzo di averlo attenuato un po 'e forse la mia spiegazione potrebbe essere migliorata, ma spero che possa aiutare qualcun altro a capire come aggiungere un allarme per la batteria ed evitare che i loro laptop si spengano all'improvviso!
In bocca al lupo!
Va bene ... quindi si scopre che quando il mio laptop si sta caricando, l'output di
acpi -b
è:
Battery 0: Charging, 35%, 01:04:08 until charged
mentre sulla batteria è
Battery 0: Discharging, 36%, 01:22:36 remaining
quindi usando il parametro menzionato inizialmente di
print ( $(NF-2)-0)
genera risultati diversi, perché ricorda, il bit del valore NF specifica quanti elementi indietro dalla fine dell'output visualizzare, quindi con l'output sulla batteria di
Battery 0: Discharging, 36%, 01:22:36 remaining
$(NF-2)
genera "36%" mentre con il laptop in carica,
Battery 0: Charging, 35%, 01:04:08 until charged
$(NF-2)
genera '00: 50: 12 ', ovvero la quantità di tempo rimanente fino alla carica.
Il -0
dopo $(NF-2)
svuota lo zero dal valore, quindi quando il valore è una percentuale lo -0
cambia da qualcosa come '36% 'a' 36 '. Quando il valore di output viene percepito come non numerico, come nel caso dell'output temporale di '01: 04: 08 'come sopra, il valore -0
restituito è' 0 '. Quindi puoi vedere il mio problema: quando il mio laptop è in carica, il valore di output è sempre "0". Dal momento che voglio suonare un allarme quando il valore di uscita è inferiore a 15, si traduce in un allarme della batteria che si spegne ogni minuto quando è in carica!
Ho letto un po 'di più sull'output del awk
comando e risulta che non avevo bisogno di farlo leggere il secondo valore dalla fine, potevo iniziare dall'inizio dell'output e saltare avanti. Questo è molto meglio poiché lo stato della mia batteria inizia allo stesso modo sia in carica che in batteria in termini di numero di parametri, ovvero il quarto parametro dall'inizio è sempre il valore della carica in percentuale.
SO ... per farlo leggere il quarto valore, il comando cambia da
awk ' { print ($(NF-2)-0)}'
per
awk ' { print ($4)-0}'
o nella sua piena gloria:
*/1 * * * * if [ `acpi -b | awk ' { print ($4)-0}'` -lt "15" ] ; then mpg123 /home/andy/Alarm.mp3 ; fi
Spero di nuovo che aiuti qualcuno! Buona fortuna e grazie per aver letto!
Va bene, quindi un po 'di più in giro e ho anche scoperto come impostare il volume al 100% e riattivare l'audio prima di suonare l'allarme - perché ammettiamolo, qual è il punto di un allarme della batteria se non riesci a sentirlo perché tu' hai impostato il volume su basso o disattivato ?!
Ad ogni modo, il comando che ti serve è:
*/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
come puoi vedere, tutto quello che ho fatto è stata inserita la stringa di comando
pactl set-sink-volume 0 100% && pactl set-sink-mute 0 0 &&
(si &&
collegano solo più comandi insieme)
Ancora buona fortuna a tutti!
Ok, quindi ... un'ultima modifica (si spera!) Apparentemente ... il segno di percentuale è un segno speciale quando si eseguono attività cron. Pertanto, devi 'sfuggire' al segno di percentuale mettendo una barra rovesciata ( \
) davanti a ciascuna in %
modo che non sia (mis) interpretata dalla shell.
Quindi, in sostanza, sostituire
100%
con
100\%
Pertanto, il comando di cui hai davvero bisogno è:
*/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
Spero che lo ordini per te come per me! (infine!)
È possibile impostare un processo cron che controllerà lo stato della batteria ogni 5/10 minuti e quindi, in base alla percentuale della batteria, verrà riprodotto un suono.
Per riprodurre l'audio è possibile utilizzare
mpg123
filename.mp3
Per installarlo
sudo apt-get install mpg123
Per ottenere lo stato della batteria dalla riga di comando è possibile utilizzare questo comando
upower -i /org/freedesktop/UPower/devices/battery_BAT0
usando grep
puoi estrarre le informazioni esatte come segue
upower -i /org/freedesktop/UPower/devices/battery_BAT0| grep -E "state|to\ full|percentage"
Ora puoi mettere tutte queste cose in uno script di shell (e anche una if
condizione per verificare se lo stato della batteria è inferiore al 10%) e dare semplicemente il percorso di questo script di shell al cron job.
quindi ogni 5 minuti (è possibile modificare questo intervallo) verrà verificato lo stato della batteria e se la batteria è inferiore al 10% verrà riprodotto il file audio fornito!
Spero che sia di aiuto!
Un modo semplice per farlo è quello di aggiungere un semplice controllo al tuo crontab (cron è un sistema per eseguire le cose su base regolare, definita dall'utente in background.)
Per prima cosa è necessario installare un lettore mp3 a riga di comando e acpi per poter leggere lo stato della batteria.
Da un terminale eseguire quanto segue per installare i pacchetti.
sudo apt-get install acpi mpg123
Quindi, mentre sei ancora nel terminale, digita crontab -e
e inserisci quanto segue alla fine del file. Basta cambiare l'utente con il tuo nome utente e .mp3 con il tuo nome file nella tua home directory.
*5 * * * * if [ `acpi |awk '{print substr($NF, 0, length($NF)-1)}'` -lt "10" ] ; then mpg123 /home/user/SuperCoolSound.mp3 ;fi
Premi Control-O (la lettera) e Invio per salvare. Premi Control-x per uscire
Altre cose che potresti voler leggere ...
acpi |awk '{print substr($NF, 0, length($NF)-1)}'
-lt "10"]; quindi aplay /home/felipelalli/Music/siren.wav; fi [: espressione intera prevista: rimanendo ➜ ~ acpi Batteria 0: scarica, 9%, 00:17:56 rimanente
In realtà ho usato la risposta di Andy Pyne ma non ha funzionato per me. Il cron ha eseguito il codice, ma non ha riprodotto il suono. Finalmente ho trovato la soluzione e condividerla qui:
Passaggio 1: installare mpg3
sudo apt-get install acpi mpg123
Passaggio 2:
salvare il comando seguente in~/bin/battery_alert
#!/bin/bash
PATH=/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
if [ `acpi -b | awk ' { print ($3)}'` == "Discharging," ] ; then
# Discharging
# Monitor for low battery
if [ `acpi -b | awk ' { print ($4)-0}'` -le "15" ] ; then
pactl set-sink-volume 0 75\% && pactl set-sink-mute 0 0 && mpg123 /home/user/battery_low.mp3 ;
fi
else
# Charging
if [ `acpi -b | awk ' { print ($4)-0}'` -eq "100" ] ; then
# Fully charged
pactl set-sink-volume 0 75\% && pactl set-sink-mute 0 0 && mpg123 /home/user/battery_full.mp3 ;
fi
fi
Questo script riproduce battery_low.mp3 se il laptop si sta scaricando e la carica è inferiore o uguale al 15%. (Se l'alimentazione CA è collegata, non ti avviserà). Questo codice ti avvisa anche se l'addebito è del 100%. Se non si desidera un avviso per lo stato completamente carico, rimuovere la parte else da questo codice.
Passaggio 3: rendere eseguibile il file utilizzando il seguente comando.
chmod +x ~/bin/battery_alert
Passaggio 4: eseguire questo file utilizzando cron aggiungendo il comando seguente alla fine del file aperto dal crontrab -e
comando.
*/5 * * * * /home/user/bin/battery_alert
(Non dimenticare di avere una riga vuota dopo questo comando)