Quiero que esto se base en el sistema operativo, por lo que no necesito una conexión a Internet o un navegador abierto, etc. Solo algo que pueda suceder en segundo plano
La forma más sencilla de hacerlo sería con una aplicación, pero a continuación se explica cómo hacerlo solo con los comandos integrados del sistema operativo. Sé que quieres que sea impulsado por un evento, pero no estoy seguro de cómo lograrlo, así que aquí hay una forma de verificar el nivel de la batería y luego hacer otra cosa si está por encima o por debajo de un umbral.
Puede considerar un proceso launchd
, esto es básicamente una tarea programada que se ejecuta cada x
minutos. A menudo son utilizados por usuarios avanzados, pero no son demasiado difíciles de configurar. Configura una tarea programada launchd con un archivo .plist que coloca en este directorio: Macintosh HD\Library\LaunchDaemons
y así es como se estructura el archivo .plist;
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Debug</key>
<true/>
<key>ExitTimeOut</key>
<integer>120</integer>
<key>Label</key>
<string>com.me.BatteryInfo</string>
<key>ProgramArguments</key>
<array>
<string>/Users/yourusername/batt.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StartInterval</key>
<integer>1800</integer>
</dict>
</plist>
Si guardara ese archivo como com.me.BatteryInfo
en la carpeta LaunchDaemons
mencionada anteriormente, crearía una tarea programada que se ejecuta cada 30 minutos. El número, 1800
, directamente arriba de </dict>
es el tiempo en segundos de la frecuencia con la que desea que se ejecute la tarea. Donde dice que <string>/Users/yourusername/batt.sh</string>
es donde usted especifica qué secuencia de comandos se ejecuta en la programación. Debes dejar <string>
y </sting>
intacto.
La línea <string>com.me.BatteryInfo</string>
es el nombre único de la tarea programada. Si va a hacer más de uno, asegúrese de que cada .plist tenga un nombre único aquí.
Lo siguiente que debe hacer es cambiar la propiedad de .plist a root
. Esto se requiere como una función de seguridad (para evitar que los usuarios / software creen tareas maliciosas programadas, supongo). Para cambiar la propiedad del archivo, haga sudo chown root \Library\LaunchDaemons\yourtask.plist
(reemplace yourtask.plist con el nombre de archivo real de la lista que creó). Esta tarea le pedirá una contraseña.
Ahora necesita crear el script que se ejecutará periódicamente. Debe crear un archivo .sh (un script de bash) para decirle a la computadora qué hacer. Para crear un archivo .sh, abra un editor de texto para programadores, como Sublime Text o Edición de Komodo . NO use Text Edit, ya que a menudo agrega texto a sus archivos que podría interferir con su script. La Edición de texto no debería usarse para el código.
Haga un script (archivo .sh) con el siguiente código;
#!/bin/sh
percent=$(ioreg -l | awk '$3~/Capacity/{c[$3]=$5}END{OFMT="%.3f";max=c["\"MaxCapacity\""];print(max>0?100*c["\"CurrentCapacity\""]/max:"?")}')
if [ $percent > 95 ]
then
echo 'charged.'
fi
exit 0
Reemplace echo 'charged.'
con los comandos de terminal que le gustaría ejecutar cuando la batería está cargada. open /Applications/Notes.app
abrirá la aplicación Notas; puede cambiar el directorio para abrir una aplicación diferente.
$percent > 95
Esto le indica a la siguiente línea que solo se ejecute cuando la batería tenga más de 95
cargado. Puedes cambiar esto a lo que quieras. El nivel de batería aquí será a menudo ligeramente diferente al que se muestra en la barra de menú en la parte superior. Si desea 'ejecutar cuando la batería está completamente cargada', recomiendo dejar esto como > 95 .
Si desea que la tarea se ejecute cuando su batería esté por debajo del 20%, por ejemplo, cámbiela a $percent < 20
NOTA: Debido a que esta es una tarea programada, su script se ejecutará cada número de minutos x
. Esto significa que si coloca open \Applications\Notes.app
dentro de su script, la aplicación de Notas se iniciará cada x
minutos (si su batería está cargada)
Esta tarea se ejecutará incluso si nadie ha iniciado sesión.
Sé que hiciste esta pregunta hace un tiempo, pero espero que esto ayude a alguien.