Respuestas:
Solo quería responder, ya que usé los consejos de esta página para configurar mi propio crontab -e
trabajo.
Estoy ejecutando Lubuntu (de confianza) y lo anterior no funcionó para mí, pero con un pequeño ajuste lo hizo. Mi nivel de (in) experiencia es que soy relativamente capaz de leer scripts y comandos básicos, pero menos capaz de escribirlos desde cero en Linux disto. Menciono eso porque si puedo armar una alarma de batería que funcione, ¡la mayoría de ustedes que lo lean también deberían poder hacerlo!
SO .... el guión y una explicación básica ...
Según las publicaciones anteriores de Glutanimate y Scott Goodgame (¡gracias chicos!) Básicamente hice lo siguiente:
Para obtener mpg123 y poder reproducir audio:
sudo apt-get install acpi mpg123
Archivo para abrir para escribir el comando:
crontab -e
Comando para ingresar al final del archivo:
*/1 * * * * if [ `acpi -b | awk ' { print ( $(NF-2)-0)}'` -lt "15" ] ; then mpg123 /home/andy/Alarm.mp3 ; fi
Asteriscos al inicio
Los cinco asteriscos representan la frecuencia con la que se ejecutan los comandos.
*/1 * * * *
significa "ejecutar esto cada minuto".
SI / ENTONCES / FI:
IF [ stuff inside these brackets ] ; THEN do something ; FI
La mayoría de ustedes, imagino, están muy familiarizados con las declaraciones IF / THEN. El FI al final concluye la declaración IF
Reproduciendo el audio:
mpg123 /home/andy/Alarm.mp3
esto simplemente se usa mpg123
para reproducir un archivo llamado Alarm.mp3
ubicado en mi directorio de inicio /home/andy/
.
Información de la batería de salida:
acpi -b
esto simplemente muestra el estado de la batería. En mi computadora portátil produce resultados como:
Battery 0: Discharging, 74%, 02:35:18 remaining
Pipe to awk command
| awk ' { print ( $(NF-2)-0)}'` -lt "15"
Bien, entonces estamos canalizando la salida del estado de la batería arriba e imprimiendo el segundo valor desde el final (NF-2) que en el ejemplo anterior es '74% '. Sin embargo, necesitamos eliminar el 'porcentaje' -0 . Queremos comparar el valor actual con el valor 15 -lt "15" . Para resumirlo en inglés simple,
SI el valor de la batería es MENOR DE 15% ENTONCES reproducir un archivo de audio
Aprecio que lo haya simplificado un poco y tal vez mi explicación podría mejorarse, pero espero que ayude a alguien más a comprender cómo agregar una alarma para la batería y evitar que sus computadoras portátiles se apaguen de repente.
¡Buena suerte!
De acuerdo ... resulta que cuando mi laptop se está cargando, la salida de
acpi -b
es:
Battery 0: Charging, 35%, 01:04:08 until charged
mientras que en la batería es
Battery 0: Discharging, 36%, 01:22:36 remaining
entonces usando el parámetro mencionado inicialmente de
print ( $(NF-2)-0)
produce diferentes resultados, porque recuerde, el bit de valor NF especifica cuántos elementos hacia atrás desde el final de la salida para mostrar, por lo tanto, con la salida en batería de
Battery 0: Discharging, 36%, 01:22:36 remaining
$(NF-2)
produce '36% 'mientras que con el portátil cargado,
Battery 0: Charging, 35%, 01:04:08 until charged
$(NF-2)
salidas '00: 50: 12 ', es decir, la cantidad de tiempo restante hasta la carga.
El -0
después de $(NF-2)
sus menos cero desde el valor, por lo que cuando el valor es un porcentaje -0
cambia de algo como '36%' a '36'. Cuando el valor de salida se percibe como no numérico, como la salida de tiempo de '01: 04: 08 'como se indicó anteriormente, el valor -0
devuelto es' 0 '. Entonces puede ver mi problema: cuando mi computadora portátil está en carga, el valor de salida siempre es '0'. Como quiero reproducir una alarma cuando el valor de salida es inferior a 15, ¡se traduce en una alarma de batería que se activa cada minuto cuando se está cargando!
Leí un poco más sobre la salida del awk
comando y resultó que no necesitaba hacer que leyera el segundo valor desde el final, podría comenzar desde el principio de la salida y saltar hacia adelante. Esto es mucho mejor ya que el estado de mi batería comienza igual, ya sea en carga o en batería en términos de número de parámetros, es decir, el cuarto parámetro desde el principio siempre es el valor de carga en porcentaje.
SO ... para que lea el cuarto valor, el comando cambia de
awk ' { print ($(NF-2)-0)}'
a
awk ' { print ($4)-0}'
o en toda su gloria:
*/1 * * * * if [ `acpi -b | awk ' { print ($4)-0}'` -lt "15" ] ; then mpg123 /home/andy/Alarm.mp3 ; fi
De nuevo espero que eso ayude a alguien! Buena suerte y gracias por leer!
De acuerdo, así que hurgué un poco más y también descubrí cómo configurar el volumen al 100% y activar el silencio antes de tocar la alarma, porque seamos sinceros, ¿cuál es el punto de una alarma de batería si no puedes escucharla porque ' ¿He ajustado el volumen a bajo o lo he silenciado?
De todos modos, el comando que necesitas es:
*/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 puede ver, todo lo que he hecho es insertar la cadena de comando
pactl set-sink-volume 0 100% && pactl set-sink-mute 0 0 &&
( &&
El solo une varios comandos juntos)
Nuevamente, buena suerte a todos!
Bien, entonces ... una edición final (¡con suerte!) ... aparentemente, el signo de porcentaje es un signo especial cuando se ejecutan tareas cron. Por lo tanto, debe 'escapar' del signo de porcentaje colocando una barra diagonal inversa ( \
) delante de cada uno %
para que el shell no lo interprete (mal).
Así que básicamente reemplaza
100%
con
100\%
Por lo tanto, el comando que REALMENTE necesita es:
*/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
¡¡ Espero que eso lo clasifique para ti como lo ha hecho para mí !! (¡finalmente!)
Puede configurar un trabajo cron que verificará el estado de la batería después de cada 5/10 min y luego, dependiendo del porcentaje de batería, reproducirá algo de sonido.
Para reproducir el sonido puedes usar
mpg123
filename.mp3
Para instalarlo
sudo apt-get install mpg123
Para obtener el estado de la batería desde la línea de comandos, puede usar este comando
upower -i /org/freedesktop/UPower/devices/battery_BAT0
utilizando grep
puede extraer la información exacta de la siguiente manera
upower -i /org/freedesktop/UPower/devices/battery_BAT0| grep -E "state|to\ full|percentage"
Ahora puede poner todas estas cosas en un script de shell (y también una if
condición para verificar si el estado de la batería es inferior al 10%) y simplemente dar la ruta de este script de shell al trabajo cron.
así que después de cada 5 minutos (puede cambiar este intervalo) se comprobará el estado de su batería y, si la batería es inferior al 10%, se reproducirá el archivo de sonido proporcionado.
¡Espero que esto ayude!
Una manera fácil de hacer esto es agregar una verificación simple a su crontab (cron es un sistema para ejecutar cosas de forma regular y definida por el usuario en segundo plano).
Primero debe instalar un reproductor de mp3 de línea de comandos y acpi para poder leer el estado de la batería.
Desde una terminal ejecute lo siguiente para instalar los paquetes.
sudo apt-get install acpi mpg123
A continuación, mientras aún está en la terminal, escriba crontab -e
e ingrese lo siguiente al final del archivo. Simplemente cambie el usuario a su nombre de usuario y el .mp3 a su nombre de archivo en su directorio de inicio.
*5 * * * * if [ `acpi |awk '{print substr($NF, 0, length($NF)-1)}'` -lt "10" ] ; then mpg123 /home/user/SuperCoolSound.mp3 ;fi
Presiona Control-O (la letra) y Enter para guardar. Presiona Control-x para salir
Cosas extra que tal vez quieras leer ...
acpi |awk '{print substr($NF, 0, length($NF)-1)}'
-lt "10"]; luego aplay /home/felipelalli/Music/siren.wav; fi [: expresión entera esperada: permanecer en ➜ ~ acpi Batería 0: Descarga, 9%, 00:17:56 restante
En realidad, utilicé la respuesta de Andy Pyne, pero no funcionó para mí. El cron ejecutó el código, pero no reprodujo el sonido. Finalmente encontré la solución y la comparto aquí:
Paso 1: Instalar mpg3
sudo apt-get install acpi mpg123
Paso 2:
guarde el siguiente comando en~/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
Este script reproduce battery_low.mp3 si la computadora portátil se está descargando y la carga es menor o igual al 15%. (Si la alimentación de CA está conectada, no lo alertará). Este código también lo alerta si el cargo es del 100%. Si no desea una alerta para el estado de carga completa, elimine la parte else de este código.
Paso 3: Haz que el archivo sea ejecutable con el siguiente comando.
chmod +x ~/bin/battery_alert
Paso 4: Ejecute este archivo usando cron agregando el siguiente comando al final del archivo opend by crontrab -e
command.
*/5 * * * * /home/user/bin/battery_alert
(No olvides tener una línea vacía después de este comando)