Esegui uno script di shell quando passi alla batteria

7

User Story:

Come utente MacBookPro, voglio eseguire uno script che espelle la mia unità USB quando disconnetto la fonte di alimentazione in modo che non debba ricordarsi di espellerla prima di afferrare il mio portatile e di andare a una riunione.

Criteri di accettazione:

  1. NESSUN app di terze parti
  2. NO polling. Deve essere guidato dagli eventi

Ho già uno script che utilizzo per rilevare le modifiche al cavo di rete. Lo lancio usando launchctl con un WatchPath come questo nel mio file .plist:

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

Spero di trovare un modo simile per avviare uno script diverso quando il mio cavo di alimentazione è collegato / disconnesso.

So già come rilevare se l'alimentazione CA è collegata o meno ... Devo solo trovare un evento che mi dica che posso farlo.

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
    
posta Jason 07.06.2012 - 16:41
fonte

3 risposte

4

ControlPlane , che ha individuato il punto in cui il fantastico Marco Polo lasciato fuori, ti consente di creare regole basate sul contesto che puoi fare le cose per te in base a dove sei e cosa stai facendo. Utilizza un approccio basato sull'evidenza per determinare dove ti trovi e, quando i criteri di localizzazione superano una certa soglia di confidenza, esegue le azioni per te in base alla certezza che sei "in quella posizione".

È fantastico.

Una delle fonti di prova che supporta è l'attuale fonte di energia. E il supporto delle fonti di prova è tutto basato su sorgenti event-driven.

Ed è open source .

E gratuito.

Puoi configurarlo per eseguire un AppleScript (o uno script di shell) per te quando cambia la fonte di alimentazione o quando cambia in una direzione.

    
risposta data 07.06.2012 - 18:28
fonte
3

Capisco che non desideri utilizzare applicazioni di terze parti. Tuttavia, dovresti essere consapevole che ce n'è uno che può fare esattamente quello che chiedi. Ciò dimostra che ciò che cerchi è possibile.

Power Manager può esegui uno script quando si scollega MacBook Pro dall'alimentazione di rete .

Uso questa capacità per fare in modo che il mio MacBook Pro esegua uno script di shell ogni volta che collego e scollego il cavo di alimentazione.

Dichiarazione di non responsabilità: lavoro per DssW, i creatori di Power Manager. Posso confermare che questa soluzione non esegue il polling ed è basata su eventi.

    
risposta data 07.06.2012 - 17:25
fonte
1

So di essere in ritardo rispetto al gioco nel rispondere a questa richiesta, ma l'ho fatto io stesso e funziona perfettamente. Tutto ciò di cui hai bisogno è un LaunchAgent che guardi com.apple.telemetry.battery.charge-cycle in / private / var / root / Library / Preferences (lo sto facendo su Yosemite e non ho testato in altri sistemi operativi.)

<?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>
    
risposta data 05.02.2015 - 03:55
fonte

Leggi altre domande sui tag