Führen Sie ein Shell-Skript aus, wenn Sie auf Batteriestrom umschalten

7

Benutzer Geschichte:

Als MacBookPro-Benutzer möchte ich ein Skript ausführen, das mein USB-Laufwerk auswirft, wenn ich die Stromquelle trenne, damit ich nicht daran denken muss, es auszuwerfen, bevor ich meinen Laptop greife und zu einer Besprechung eile.

Akzeptanzkriterium:

  1. KEINE Apps von Drittanbietern
  2. KEINE Abstimmung. Es muss ereignisgesteuert sein

Ich habe bereits ein Skript, mit dem ich Netzwerkkabeländerungen erkennen kann. Ich starte es mit launchctl mit einem WatchPath wie diesem in meiner .plist-Datei:

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

Ich hoffe, einen ähnlichen Weg zu finden, um ein anderes Skript zu starten, wenn mein Netzkabel angeschlossen / abgezogen ist.

Ich weiß bereits, wie ich feststellen kann, ob Wechselstrom angeschlossen ist oder nicht ... Ich muss nur ein Ereignis finden, das mir sagt, dass ich es tun kann.

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
Jason
quelle
Darf ich fragen, warum Sie gegen die Verwendung eines Tools von Drittanbietern sind?
Macaco
Bin ich der einzige, der dies eher als Forderung als als Frage findet?
Thecafremo
Entschuldigung, ich bin ein Softwareentwickler und habe versucht, die Frage als User Story zu formulieren, damit sie klar und präzise ist. Es ist sicherlich eine Frage, keine Forderung. Die Akzeptanzkriterien wurden angegeben, um die Lösungen auszusortieren, die ich bereits untersucht hatte.
Jason
ControlPlane ist ein kostenloses, evidenzbasiertes Open-Source-Tool zur Ausführung von Aktionen für OS X. Es kann Dinge basierend auf dem Status Ihres Mac ausführen. Eine der unterstützten Beweisquellen ist die aktuelle Stromquelle (Batterie oder Wechselstrom), und bei Änderungen kann ein Skript ausgeführt werden. Hast du es gesehen?
Ian C.
2
Informationen zur Funktionsweise von ControlPlane finden Sie unter : github.com/dustinrue/ControlPlane/blob/master/Source/… .
Ian C.

Antworten:

4

Mit ControlPlane , das dort angekommen ist , wo der coole, aber fehlerhafte Marco Polo aufgehört hat, können Sie kontextbasierte Regeln erstellen, die Dinge für Sie tun können, je nachdem, wo Sie sich befinden und was Sie tun. Es verwendet einen evidenzbasierten Ansatz, um zu bestimmen, wo Sie sich befinden, und führt, sobald Ihre Standortkriterien einen bestimmten Konfidenzschwellenwert überschreiten, Aktionen für Sie aus, basierend auf dem Vertrauen, dass Sie sich "an diesem Standort" befinden.

Es ist ziemlich cool.

Eine der unterstützten Beweisquellen ist die aktuelle Stromquelle. Die Unterstützung für Beweisquellen basiert auf ereignisgesteuerten Quellen.

Und es ist Open Source .

Und frei.

Sie können es so einrichten, dass ein AppleScript (oder ein Shell-Skript) für Sie ausgeführt wird, wenn sich die Stromquelle ändert oder wenn sie sich in eine Richtung ändert.

Ian C.
quelle
3

Ich verstehe, dass Sie keine Anwendungen von Drittanbietern verwenden möchten. Sie sollten sich jedoch bewusst sein, dass es eine gibt, die genau das kann, wonach Sie fragen. Dies beweist, dass das, was Sie suchen, möglich ist.

Power Manager kann ein Skript ausführen, wenn Sie Ihr MacBook Pro vom Stromnetz trennen .

Ich verwende diese Funktion, damit mein MacBook Pro jedes Mal, wenn ich das Netzkabel ein- und ausstecke, ein Shell-Skript ausführt.

Führen Sie ein Skript mit Batterie aus - DssW Power Manager

Haftungsausschluss: Ich arbeite für DssW, die Entwickler von Power Manager. Ich kann bestätigen, dass diese Lösung nicht abfragt und ereignisgesteuert ist.

Graham Miln
quelle
2
Ja, ich bin bei der Suche nach der Lösung auf einige Ihrer Links gestoßen. Es war eine sehr schöne Lösung, nur ein bisschen zu schwer für meine Bedürfnisse. Ich habe eine Gruppe von 20 Entwicklern mit dem gleichen Problem und kann das nicht in das Budget aufnehmen. Ich gebe Ihnen eine positive Bewertung, weil Ihre App genau das tut, was ich will. Ich habe das Gefühl, meine Frage ist eines Ihrer schwer verdienten Geschäftsgeheimnisse. Vielen Dank!
Jason
Vielen Dank. Sie sind sich nicht sicher, wie Sie Abfragen vermeiden können, ohne eine Anwendung zu verwenden. Eine reine Shell-Skriptlösung ist unwahrscheinlich, aber möglicherweise kann ein leichteres Tool gefunden werden.
Graham Miln
2

Ich weiß, dass ich sehr spät zum Spiel komme, um auf diese Anfrage zu antworten, aber ich habe das einfach selbst gemacht und es funktioniert perfekt. Alles, was Sie brauchen, ist ein LaunchAgent, der com.apple.telemetry.battery.charge-Cycle in / private / var / root / Library / Preferences überwacht (ich mache dies auf Yosemite und habe es nicht in anderen Betriebssystemen getestet.)

<?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>
Tulgeywood
quelle
Scheint nach Yosemite oder El Capitan nicht mehr zu funktionieren, diese Datei wurde für mich seit 2015 nicht mehr aktualisiert.
JBis