9 votos

Ejecutar un shell script cuando se cambia a la energía de la batería

Historia del usuario:

Como usuario del MacBookPro quiero ejecutar un script que expulse mi unidad USB cuando desconecte la fuente de alimentación para no tener que acordarme de expulsarla antes de coger el portátil y salir corriendo a una reunión.

Criterios de aceptación:

  1. NO hay aplicaciones de terceros
  2. No hay encuestas. Debe ser impulsado por eventos

Ya tengo un script que utilizo para detectar los cambios de cable de red. Lo lanzo usando launchctl con un WatchPath como este en mi archivo .plist:

<key>WatchPaths</key>
<array>
    <string>/Library/Preferences/SystemConfiguration</string>
</array>

Espero encontrar una manera similar de lanzar un script diferente cuando mi cable de alimentación está conectado/desconectado.

Ya sé cómo detectar si la corriente alterna está conectada o no... Sólo necesito encontrar un evento que me diga que puedo hacerlo.

AC_POWER=`ioreg -l | grep ExternalConnected | cut -d"=" -f2 | sed -e 's/ //g'`

if [[ "$AC_POWER" == "No" ]]
then
    for MEDIA_PATH in "/Volumes/Backup Drive 1/" /Volumes/MyPhotos/
    do
        if [ -e "$MEDIA_PATH" ]
        then
            echo "Ejecting $MEDIA_PATH"
            diskutil eject "$MEDIA_PATH"
        else
            echo "$MEDIA_PATH not mounted"
        fi
        done
else
    echo "AC Power connected"
fi

4voto

shsteimer Puntos 8749

ControlPlane que continúa donde lo dejó el genial Marco Polo, te permite crear reglas basadas en el contexto que pueden hacer cosas por ti en función de dónde estés y qué estés haciendo. Utiliza un enfoque basado en la evidencia para determinar dónde estás y, una vez que tus criterios de localización superan un determinado umbral de confianza, ejecuta acciones por ti basándose en la confianza de que estás "en ese lugar".

Está muy bien.

Una de las fuentes de pruebas que soporta es la fuente de alimentación actual. Y su soporte de fuente de evidencia está todo basado en fuentes impulsadas por eventos.

Y es de código abierto .

Y gratis.

Puedes configurarlo para que ejecute un AppleScript (o un shell script) por ti cuando cambie la fuente de alimentación o sólo cuando cambie en una dirección.

3voto

Steve Evans Puntos 155

Entiendo que no quiere utilizar ninguna aplicación de terceros. Sin embargo, debes saber que hay una que puede hacer exactamente lo que pides. Esto demuestra que lo que buscas es posible.

Power Manager puede ejecutar un script al desconectar el MacBook Pro de la red eléctrica .

Utilizo esta capacidad para que mi MacBook Pro ejecute un shell script cada vez que conecto y desconecto el cable de alimentación.

Run a script on battery - DssW Power Manager

Descargo de responsabilidad: Trabajo para DssW, los creadores de Power Manager. Puedo confirmar que esta solución no hace un sondeo y es impulsada por eventos.

2voto

tulgeywood Puntos 1

Sé que llego muy tarde a responder a esta petición, pero acabo de hacerlo yo mismo y funciona perfectamente. Todo lo que necesita es un LaunchAgent que mira com.apple.telemetry.battery.charge-cycle en /private/var/Root/Library/Preferences (Estoy haciendo esto en Yosemite y no he probado en otros OS).

<?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>Label</key>
        <string>com.me.helloworld</string>
        <key>ProgramArguments</key>
        <array>
                <string>/PATH/TO/SCRIPT.sh</string>
        </array>
        <key>WatchPaths</key>
        <array>
                <string>/private/var/root/Library/Preferences/com.apple.telemetry.battery.charge-cycle.plist</string>
        </array>
</dict>
</plist>

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X