MacBook Air/Pro: Skript beim Schließen des Deckels ausführen?

Wie kann man MacOS (10.8 oder höher) so konfigurieren, dass es automatisch und sofort ein benutzerdefiniertes Skript (wahrscheinlich ein Bash-Skript) aufruft, wenn der Benutzer den Displaydeckel eines MacBook Air oder Pro schließt?

Einzelheiten.

Ich möchte dies tun, weil in einigen Szenarien mein MacBook Air 2013 mit 10.8.5 den Bildschirm beim Schließen des Deckels nicht sofort in den Ruhezustand versetzt/sperrt (möglicherweise weil ein VPN-Client versucht, eine Verbindung zu öffnen). Daher möchte ich, dass das System sofort ein Skript ausführt, das diese Prozedur zum Speichern und Sperren des Bildschirms beim Schließen des Deckels aufruft. Ich weiß jedoch nicht, wie ich Skripte beim Schließen des Displaydeckels aufrufen soll.

Antworten (3)

Es scheint keine Möglichkeit zu geben, dass ein Programm benachrichtigt wird, wenn der Deckel geschlossen ist. Der Zustand des Deckels kann jedoch periodisch überwacht werden (und in diesem speziellen Fall jede Sekunde) und Maßnahmen basierend auf dem Deckelzustand ergriffen werden.

Ich kenne kein Programm, das eine vollständige Lösung für Ihre Anforderungen bieten kann, aber Sie können die folgenden Informationen verwenden, um selbst eine Lösung zu erstellen.

  1. Laden Sie dieses Clamshellstate.pl- Perl-Skript herunter
  2. TerminalSie können es (unter ) wie folgt ausführen /Applications/Utilities:

    ./clamshellstate.pl 1  
    

    um eine Ausgabe wie "Open" oder "Closed" zu erhalten, die den aktuellen Deckelzustand anzeigt

  3. Erstellen Sie ein Shell-Skript wie (ersetzen Sie das auszuführende Skript durch ein Shell-Skript, das Sie ausführen möchten):

    ./clamshellstate.pl 1 | grep Closed > /dev/null && *script-to-run*
    
  4. Konfigurieren Sie dieses Skript mit launchd.plist so, dass es einmal pro Sekunde ausgeführt wird . Oder verwenden Sie Lingon, um launchd.plist einfach zu konfigurieren.

Hinweis: Anstelle von clamshellstate.pl können Sie auch den folgenden Befehl in verwenden Terminal:

ioreg -r -k AppleClamshellState | grep '"AppleClamshellState" = Yes' | cut -f2 -d"="

um ein "Ja" für den geschlossenen Zustand und ein "Nein" für den offenen Zustand zu erhalten.

Beim Schließen des Deckels muss ein Skript ausgeführt werden , nicht beim Schlafen. Ich unterscheide speziell das Schließen des Deckels vom Schlafen aufgrund der Verzögerung, die zwischen dem Schließen und dem Schlafen auftreten kann (ich habe diese Verzögerung empirisch erlebt; die obige Referenz scheint zu bestätigen - "ungefähr 15 [Sekunden]"), was einen unsicheren Zugriff verursacht, wenn jemand (sagen wir ein Dieb) mein MacBook Sekunden, nachdem ich es geschlossen habe (vernünftig für jemanden am Flughafen für einen "hit and run"-Diebstahl), schnappen, es öffnen und das Passwort für das eingeloggte Konto zurücksetzen.
Ich habe die Antwort aktualisiert, aber Sie müssten etwas Skriptarbeit leisten, um eine vollständige Lösung zu entwickeln.
Terminalbefehl sollte sein:ioreg -r -k AppleClamshellState | grep '"AppleClamshellState"' | cut -f2 -d"="

Du könntest es auch mit SleepWatcher versuchen . Anweisungen finden Sie in der Readme:

1. Installieren Sie die SleepWatcher-Software:

$ sudo mkdir -p /usr/local/sbin /usr/local/share/man/man8
$ sudo cp ~/Desktop/sleepwatcher_2.2/sleepwatcher /usr/local/sbin
$ sudo cp ~/Desktop/sleepwatcher_2.2/sleepwatcher.8 /usr/local/share/man/man8

2. Lesen Sie die Manpage und denken Sie über die Funktionen von SleepWatcher nach, die Sie verwenden möchten:

$ man sleepwatcher

3. Schreiben Sie kleine Shell-Skripte, die die Aktionen ausführen, die Sie von SleepWacher auslösen möchten, und testen Sie sie.

4. Testen Sie Ihre Skripte in Kombination mit SleepWatcher, gestartet im Vordergrund in einem Terminalfenster, zB:

$ /usr/local/sbin/sleepwatcher --verbose --sleep /path/to/your/sleepscript --wakeup /path/to/your/wakeupscript ...

5. Fügen Sie Ihre SleepWatcher-Befehlszeile in eine Konfigurationsdatei des launchd-Agenten ein. Als Beispiel können Sie eine der Listen aus ~/Desktop/sleepwatcher_2.2/config verwenden. Weitere Informationen zu launchd und seiner Konfiguration finden Sie auf den Manpages für launchd und launchd.plist sowie unter http://developer.apple.com/macosx/launchd.html.

6. Kopieren Sie Ihre launchd-Agentenkonfiguration nach /Library/LaunchDaemons oder ~/Library/LaunchAgents, je nachdem, ob Sie einen systemweiten Daemon oder einen Benutzeragenten benötigen.

7. Laden Sie die launchd-Agentenkonfiguration mit launchctl (siehe Beispiele oben und die Manpage launchctl).

sleepwatcherist auch über MacPorts verfügbar.

Sie können versuchen, die ControlPlane- App zu verwenden, die auf verschiedene Zustandsänderungen auf Ihrem Mac reagieren kann, einschließlich ob der Deckel geschlossen ist oder nicht.

Es ist auch möglich, Hammerspoon zu verwenden , um bestimmte Skripte zum Aufwachen und Schlafen zu aktivieren, wie in meiner Antwort auf eine andere Frage erwähnt. Die Lua-Skripte könnten erweitert werden, um den Deckelzustand mit dem ioreg -r -k AppleClamshellStatein MKs Antwort hier erwähnten Test zu überprüfen.