Wir alle wissen, dass Mac OS X über die sehr nützliche Funktion „ Anmeldeobjekte “ verfügt , mit der Sie unter anderem Apps/Skripts einrichten können, die ausgeführt werden, wenn Sie sich anmelden.
Ich suche nach einer Möglichkeit, eine Liste von Skripten/Apps einzurichten, die ausgeführt werden, wenn ich mich abmelde . Eine "Logout Items"-Liste, wenn Sie so wollen.
Grundsätzlich möchte ich ein paar kleine Bereinigungsskripte für mich selbst schreiben, die automatisch ausgeführt werden, wenn ich mich abmelde oder herunterfahre.
Ich suche also nach einer Möglichkeit, ein Skript (oder idealerweise eine Liste davon) automatisch auszulösen, wenn ich mich abmelde. Die Abmeldung würde warten, bis die Skripts abgeschlossen sind (genauso wie die Abmeldung darauf wartet, dass Sie auf Speichern klicken, wenn eine App dies anfordert).
Gibt es eine Möglichkeit, (ein) Skript(e) automatisch auszulösen, wenn ich mich von Mac OS X abmelde?
Logout-Hooks waren in 10.4 veraltet , aber sie funktionieren immer noch ab 10.9.
sudo defaults write com.apple.loginwindow LogoutHook ~/.logouthook
echo $'#!/bin/bash\nsay a' > ~/.logouthook
chmod +x ~/.logouthook
Der Wert des LogoutHook-Schlüssels kann nur ein Pfad zu einer ausführbaren Datei und kein Shell-Befehl sein. Der Logout-Hook wird als root ausgeführt.
Der Standardbefehl ändert /var/root/Library/Preferences/com.apple.loginwindow.plist. Das Hinzufügen eines LogoutHook-Schlüssels zu /Library/Preferences/com.apple.loginwindow.plist funktioniert nicht.
Wenn die Ausführung eines Logout-Hooks lange genug dauert, wird ein grauer Bildschirm angezeigt, bis der Logout-Hook beendet wird. Es scheint kein Zeitlimit zu geben, nach dem Logout-Hooks beendet werden müssen.
Ich habe keine Möglichkeit gefunden, Programme beim Abmelden zuverlässig mit launchd auszuführen. Als ich versuchte, Signale wie EXIT abzufangen, wurde der Code im Trap nur ausgeführt, wenn ich mich vom Anmeldefenster abmeldete, und nicht, wenn ich herunterfuhr oder neu startete.
<?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>test</string>
<key>ProgramArguments</key>
<array>
<string>bash</string>
<string>-c</string>
<string>trap 'echo a>/Users/username/Desktop/a;say a' EXIT;while :;do sleep 10;done</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
sh
(es erstellt diese .txt-Datei). Ich habe das Skript als /etc/rc.shutdown.local gespeichert und es mit hinzugefügt, defaults
wie Sie sagten. Keine der Dateien war bereits vorhanden. Mache ich etwas falsch? Vielen Dank!Tatsächlich gibt es einen nicht veralteten Weg, dies zu tun:
do shell script "PUT YOUR START SCRIPT PATH HERE"
on quit
do shell script "PUT YOUR STOP SCRIPT PATH HERE"
continue quit
end quit
Um es im Dock auszublenden:
<key>NSUIElement</key>
<string>1</string>
Script Timer ist dafür eine gute Wahl. Es kann beim Abmelden, Anmelden und vielem mehr ausgeführt werden. Ich würde mit dieser für eine einfache und benutzerfreundliche Lösung gehen. Es hat eine einfache GUI:
Es gibt zwei Dinge, die Sie beim Skript-Timer beachten müssen. Erstens ist es nicht kostenlos. Es kostet $ 12, aber ich persönlich denke, es ist es wert. Zweitens ist es nicht vollständig mit Lion kompatibel, aber sie haben ein kostenloses Update versprochen, sobald sie es kompatibel gemacht haben.
Sie könnten auch eine Mac-Anwendung aus Ihrem Skript erstellen, indem Sie so etwas wie Platypus verwenden und sie dann wie jede andere Anwendung zu Anmeldeobjekten hinzufügen.
Power Manager kann ein Skript ausführen, wenn sich ein Benutzer abmeldet. Dies ist ein kommerzielles Produkt und unterstützt das neueste macOS.
Frühere Versionen erforderten die Verwendung des Ereigniseditors , aber jetzt ist eine Aufgabe des Planungsassistenten zum Ausführen von Skripts beim An- und Abmelden enthalten.
Ich habe Power Manager geschrieben, also zögern Sie nicht, technische Fragen zu seiner Implementierung zu stellen. Im Fall von durch Abmelden ausgelösten Ereignissen fragt Power Manager keine Änderungen im Benutzerstatus ab, sondern wird stattdessen von macOS über Benutzeränderungen benachrichtigt. Dieser Ansatz ist effizienter als eine Skriptschleife/-abfrage.
Benutzer588