ACTUALIZACIÓN 11/6/2018
Hace un tiempo, tanto mi amigo Néstor como yo, venimos buscando en la web algún «programita» para GNU/Linux que avise en forma sonora cuando la batería se está terminando o cuando se terminó de cargar, con el objetivo de ahorrar energía y a la vez extender la vida útil de la batería.
Lamentablemente no encontramos nada y decidimos ponernos a escribir código, que resultó mucho más sencillo de lo esperado.
El script está programado en Bash (seguramente se puede mejorar) y tiene un par de parámetros editables, que son:
- El porcentaje de batería para el que sonará la alarma de «batería descargada».
- El porcentaje de batería para el que sonará la alarma de «batería cargada».
- El nombre de los archivos .wav que se reproducirán en cada caso.
El nombre del archivo puede ser cualquiera. Yo le puse bat.sh y lo guardé en un directorio llamado «energia» dentro de mi /home.
El programita depende de bash (ya que es un script de este tipo) que ya viene instalado con el sistema operativo, pero además usa un programa que deberás instalar. Este se llama acpi y sirve para obtener resultados de diferentes dispositivos de hardware, entre ellos la batería. También usaremos aplay para reproducir sonidos.
Para instalarlo, en las distribuciones basadas en Debian, ejecutar como root o usando sudo:
apt-get install acpi mplayer
NOTA: Antes este script usaba aplay pero con las nuevas versiones de GNU/Linux se dejó de usar alsa migrando a pulseaudio y aplay ya no existe. Por lo que lo reemplazamos, con los mismos resultados, por mplayer
Luego crear un directorio dentro de tu home y usando algún editor (como gedit) escribir el siguiente código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | #!/bin/bash #Script para avisar cuando la batería se está agotando #O cuando está completamente llena #Función para generar la fecha y hora fyh() { date +"%Y-%m-%d %H:%M:%S" } #Exportación de variables. En este caso sirve para #que el cron sepa a donde direccionar la salida #del programa. Cambiar usuario por tu nombre de usuario #y 1000 por el id de tu usuario. Para conocer el id de #usuario, usar el comando id en una terminal. export XDG_RUNTIME_DIR="/run/usuario/1000" export DISPLAY=:0 export XAUTHORITY=/home/usuario/.Xauthority bateria=`/usr/bin/acpi -V | grep ', 10%'`; if [ -z "$bateria" ] then fyh; echo " Carga suficiente ..." else for contador in 1 2 3 4 5 do /usr/bin/mplayer -display :0 -volume 50 /home/usuario/energia/beep.wav sleep 1s done fi; bateriacargada=`/usr/bin/acpi -V | grep ', 100%'`; if [ -z "$bateriacargada" ] then echo "" else for contador2 in 1 2 3 4 5 do echo fyh; echo "Bateria totalmente cargada. Desenchufe cargador\n" /usr/bin/mplayer -display :0 -volume 50 /home/usuario/energia/beep2.wav sleep 1s done fi; |
Notar que en el código las rutas son ABSOLUTAS es decir, si el directorio creado se llama energia, los archivos deberán ponerse con la ruta completa /home/usuario/energia/ donde usuario es tu nombre de usuario.
Guardar el archivo dentro del directorio creado. Ponerle el nombre que quieras. Yo le puse bat.sh
Darle permisos de ejecución. En una terminal, dentro del directorio donde está el script:
chmod 777 bat.sh
En el mismo directorio, poner los archivos .wav que vamos a reproducir, con los mismos nombres que en el script (yo les llamé beep.wav y beep2.wav).
Por supuesto puedes crear tus propios archivos wav con textos como «enchufame, la batería ya se está acabando» y «desenchufame, no gastes electricidad al cuete» 😀
Lo único que queda por hacer es agregar el script al cron, para que se ejecute una vez por minuto. Como es muy sencillo, no usará recursos del sistema y no estará ejecutándose permanentemente.
Para agregar esto al cron, abrimos el archivo /etc/crontab con un editor de textos (puede ser gedit) pero usando permisos de root o usando sudo.
Usar el comando contrab -e
Permite programar una tarea para que se ejecute a una hora específica del día.
Agregar al final la siguiente línea:
* * * * * /bin/sh /home/usuario/energia/bat.sh >> /home/usuario/energia/bat.log
Reemplazar usuario por tu nombre de usuario.
Los asteriscos al principio le dicen al sistema que el programa se ejecute en todos los minutos, en todas las horas, todos los días. Además, genera un archivo bat.log donde guarda la salida de texto del programa. Esto te servirá para estimar el rendimiento de la bateria cuando lo creas necesario. Cada tanto te conviene borrar el archivo bat.log
Por último, reiniciar el servicio de cron
sudo service cron restart
Listo, eso es todo. Es muy sencillo y ahora tendrás avisos sonoros cuando la batería se esté agotando y cuando esté cargada.
Te invito a crear tus propios wav y a compartirlos.
Nota: El script es totalmente básico. Se puede mejorar mucho. Lo dejo a tu imaginación.
Descarga de los wav que yo use:
no se olviden reiniciar el cron
sudo service cron restart
Gracias Néstor por el aporte!
Una consulta para la siguiente línea: export XAUTHORITY=/home/usuario/.Xauthority
En mi caso es debian en español y «Home» es la «Carpeta personal»
¿Debo mantener «home» o cambiar por «Carpeta personal»