Ejecutar un script de shell al cambiar a la energía de la batería

7

Historia de usuario:

Como usuario de MacBookPro, quiero ejecutar una secuencia de comandos que expulsa mi unidad USB cuando desconecto la fuente de alimentación para no tener que acordarme de expulsarla antes de agarrar mi computadora portátil y apresurarme a una reunión.

Criterios de aceptación:

  1. NO hay aplicaciones de terceros
  2. NO sondeo. Debe ser impulsado por un evento

Ya tengo un script que uso para detectar cambios en el 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 forma similar de iniciar una secuencia de comandos diferente cuando mi cable de alimentación esté conectado / desconectado.

Ya sé cómo detectar si la alimentación de CA está conectada o no ... solo necesito encontrar un evento que me indique 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
    
pregunta Jason 07.06.2012 - 16:41

3 respuestas

4

ControlPlane , que se retomó donde Marco Polo, que está lleno de errores, le permite crear reglas basadas en el contexto que Puede hacer cosas por usted según dónde esté y qué esté haciendo. Utiliza un enfoque basado en la evidencia para determinar dónde se encuentra y, una vez que sus criterios de ubicación superan un cierto umbral de confianza, ejecuta acciones basadas en la confianza de que está "en esa ubicación".

Es muy bueno.

Una de las fuentes de evidencia que admite es la fuente de energía actual. Y su soporte de fuentes de evidencia se basa en fuentes controladas por eventos.

Y es de código abierto .

Y gratis.

Puede configurarlo para que ejecute un AppleScript (o un script de shell) siempre que cambie la fuente de alimentación o solo cuando cambie en una dirección.

    
respondido por el Ian C. 07.06.2012 - 18:28
3

Entiendo que no desea utilizar ninguna aplicación de terceros. Sin embargo, debe tener en cuenta que existe uno que puede hacer exactamente lo que usted solicita. Esto prueba que lo que buscas es posible.

Power Manager puede ejecute un script cuando desconecte su MacBook Pro de la alimentación de red .

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

Descargo de responsabilidad: trabajo para DssW, los creadores de Power Manager. Puedo confirmar que esta solución no realiza ninguna encuesta y está controlada por eventos.

    
respondido por el Graham Miln 07.06.2012 - 17:25
1

Sé que llego muy tarde al juego para responder a esta solicitud, pero lo hice solo y está funcionando perfectamente. Todo lo que necesita es un agente de ejecución que vea com.apple.telemetry.battery.charge-cycle en / private / var / root / Library / Preferences (Hago esto en Yosemite y no he probado en otros sistemas operativos).

<?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>
    
respondido por el tulgeywood 05.02.2015 - 03:55

Lea otras preguntas en las etiquetas