MacBook Pro 2010 mit OS X Lion.
Ist es möglich, Skripte für Sleep- und Wake-Ereignisse auszuführen?
Meine spezifische Anwendung besteht darin, dass ich Dropbox-synchronisierte Truecrypt-Volumes habe, die ich regelmäßig sowohl auf meinem MacBook als auch auf meinem iMac verwende. Ich fahre mein MBP selten herunter, da das Schließen des Deckels viel schneller und einfacher ist, aber das bedeutet, dass ich daran denken muss, meine Truecrypt-Volumes abzumelden und sie wieder synchronisieren zu lassen, bevor ich mein MBP schließe. Es ist trivial genug, das Ein- und Aushängen per Skript auszuführen, aber ich würde gerne noch einen Schritt weiter gehen und diese Skripte automatisch ausführen lassen.
Es scheint, dass Sleep/Wake bei Auslieferung des Betriebssystems keine Skripte auslösen kann , aber Lösungen von Drittanbietern entwickelt wurden.
Ich habe keine persönliche Erfahrung mit diesen Programmen oder ihren Anbietern.
SleepWatcher kann von Nutzen sein.
Aus der Beschreibung: Es kann verwendet werden, um einen Unix-Befehl auszuführen, wenn der Mac oder das Display des Mac in den Schlafmodus geht oder aufwacht, nach einer bestimmten Zeit ohne Benutzerinteraktion oder wenn der Benutzer seine Aktivität nach einer Pause oder bei Stromausfall wieder aufnimmt Netzteil eines Mac-Notebooks angeschlossen oder abgenommen wird. Es kann den Mac auch in den Ruhemodus versetzen oder die Zeit seit der letzten Benutzeraktivität abrufen.
Es funktioniert gut für mich am 10.6.8. Zur Unterstützung von 10.1(!) bis 10.7 stehen verschiedene Versionen zur Verfügung
brew install sleepwatcher
. Und siehe diesen Beitrag , er ist sehr hilfreich. Das SleepWatcher-Dienstprogramm unterstützt auch OS X El Capitan (10.11).Dies ist meine eigene App, also bedenken Sie das, aber ControlPlane hat die Fähigkeit, Aktionen basierend auf Sleep/Wake auszuführen. Sie finden es unter http://www.controlplaneapp.com/ .
ControlPlane ist ein Fork von MarcoPolo und wurde für die Ausführung auf Snow Leopard und Lion aktualisiert.
Ich habe den folgenden einfachen Launch Daemon entwickelt, um einen „Wake“-Trigger für Skripte auf Leopard bereitzustellen:
<?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>wake-alert</string>
<key>ProgramArguments</key>
<array>
<string>/bin/bash</string>
<string>-c</string>
<string>z=/tmp/wake; test -s $z || { date > $z; say w; };
tail -1 /Library/Logs/DirectoryService/DirectoryService.server.log | grep -v Sleep || > $z
</string>
</array>
<key>WatchPaths</key>
<array>
<string>/Library/Logs/DirectoryService/DirectoryService.server.log</string>
</array>
<key>ExitTimeOut</key>
<integer>2</integer>
<key>ThrottleInterval</key>
<integer>1</integer>
</dict>
</plist>
Sie können „sagen Sie w“ durch Ihren Code ersetzen. Ich schreibe ein Datum zu z, aber Sie könnten dies ändern, um alles zu schreiben. Möglicherweise müssen Sie 'ExitTimeOut' für einige Skripte erhöhen. Mein Launch-Daemon befindet sich unter /Library/LaunchDaemons/wake-alert.plist
Der Launch Daemon überwacht DirectoryService.server.log und schreibt in eine temporäre Datei, sofern die Datei leer ist. Die Datei wird durch einen Log-'Sleep'-Eintrag und durch Herunterfahren gelöscht.
Wenn Sie „schnelle Benutzerumschaltung“ verwenden, um in den Ruhezustand zu wechseln, werden Sie feststellen, dass Skripte, die einen angemeldeten Benutzer erfordern, versuchen, zu früh ausgeführt zu werden, und fehlschlagen, es sei denn, Sie ändern den Launch Daemon – vielleicht grep „Succeeded“ in „secure.log“.
/Library/Logs/DirectoryService/DirectoryService.server.log
existiert nicht in High Sierra (10.13).War früher an dieser Frage interessiert, habe aber keine Schritt-für-Schritt-Anleitung gefunden, wie man sie erreicht. Die Lösung basiert auf dem Open-Source-Tool Sleepwatcher und Apple Launchd . Wurde durch diesen Artikel inspiriert
Also viel Spaß! :
brew install sleepwatcher
~/.wakeup
und ~/.sleep
Skripte und fügen Sie etwas Shell-Logik hinzuchmod 700 ~/.sleep && chmod 700 ~/.wakeup
/usr/local/sbin/sleepwatcher --verbose --sleep ~/.sleep
- Gehen Sie mit laufendem Terminal in den Ruhezustand/Library/LaunchAgents
sudo ln -sfv /usr/local/Cellar/sleepwatcher/2.2/de.bernhard-baehr.sleepwatcher-20compatibility.plist /Library/LaunchAgents/
sudo launchctl load /Library/LaunchAgents/de.bernhard-baehr.sleepwatcher-20compatibility.plist
Hoffe, es wird jemandem helfen :)
/usr/local/sbin/sleepwatcher --verbose --sleep ~/.sleep
auf.brew install sleepwatcher
, um es zu bekommen. Danke!brew services start sleepwatcher; sudo cp /usr/local/Cellar/sleepwatcher/2.2.1/etc/sleepwatcher/rc.* /etc
hinzugefügt .~/.sleep
Ich verwende Keyboard Maestro ( https://www.keyboardmaestro.com/ ), keine Zugehörigkeit. Es kann eine Aktion auslösen, wenn das System in den Ruhezustand wechselt oder neben unzähligen anderen Funktionen aufwacht, um die Arbeit mit dem Mac zu erleichtern.
Ich habe die Sleep/Wake-Ereignisse verwendet, um eine URL auszulösen, die eine Verbindung zu einem IOT-Gerät herstellt, das ich entworfen habe, um einen externen Lüfter zu steuern, den ich oben auf dem Mac Mini platziert habe (der Mac steht auf dem Kopf).
Ein weiteres Programm, das Sie vielleicht entdecken und ausprobieren möchten, ist EventScripts . Obwohl es ein sehr beeindruckendes Programm ist, das ich im Allgemeinen empfehlen würde, scheint es nach dem Testen für diesen Zweck NICHT in der Lage zu sein, Skripte schnell genug auszulösen, damit sie ausgeführt werden, bevor Ihr Mac in den Ruhezustand wechselt, und stattdessen das Schlafskript nicht ausführen, bis der Mac aufgewacht ist, was (offensichtlich) den Zweck verfehlt.
Ich hoffe, Ihnen und allen anderen, die dies lesen, die Stunden des Testens zu ersparen, die ich brauchte, um zu dieser Schlussfolgerung zu gelangen. Es tut mir jedoch leid, sagen zu müssen, dass es fehlgeschlagen ist, weil es in so vieler Hinsicht ein wirklich schön gestaltetes und ziemlich leistungsfähiges und flexibles Programm ist. Es ist auch recht günstig ($3). Die Low-Level-Leistung scheint jedoch einfach nicht da zu sein, um ein Skript vor dem Schlafen auszuführen.
Andererseits hat sich Sleepwatcher in meinen (bisherigen) Tests als recht zuverlässig und schnell erwiesen. Es ist auch kostenlos, was großartig ist. Ich werde weiter testen und wenn ich finde, dass es manchmal nicht funktioniert, werde ich meine Antwort aktualisieren und andere Optionen weiter testen.
UPDATE Ich habe festgestellt , dass Sleepwatcher seit dem ursprünglichen Schreiben dieser Antwort nicht durchgehend zuverlässig ist, obwohl es anfangs zu funktionieren schien. In meinem Fall muss ich keine beliebigen Skripte ausführen, sondern nur externe Laufwerke auswerfen. Ich habe eine kleine und preiswerte App gefunden, die das bisher sehr gut macht: Jettison . Dies ist sehr schnell zu einem der wenigen Dienstprogramme geworden, ohne die ich nicht leben kann. Wenn Ihre Bedürfnisse die gleichen sind wie meine, werden Sie feststellen, dass es die paar Dollar wert ist, die sie verlangen.
WakeWatcher ist eine einfache gesichtslose Hintergrundanwendung für OS X, die ich erstellt habe, um dieses Problem zu lösen. Es wird ausgeführt, ~/.onwake
wenn Wake erkannt wird. Sie können dann die Befehle zum Mounten/Remounten Ihrer Laufwerke in dieses Skript einfügen.
WakeWatcher eignet sich als Login-Item. Es ist nicht sehr anspruchsvoll, aber es ist kostenlos und einfach.
Das Ausführen von Skripts im Ruhezustand wäre eine einfache Ergänzung, aber ich mache mir Sorgen über die Zeit, die für die Ausführung der Skripts zur Verfügung steht, bevor das System tatsächlich in den Ruhezustand übergeht. Wenn Sie es wirklich brauchen, öffnen Sie ein Problem gegen das Github-Projekt und ich werde es hinzufügen.
sh-beta
duftend
Gehirnstrahl