Wie führe ich ein Skript beim Anmelden / Abmelden in OS X aus?


10

Ich spiele mit dem Erstellen eines benutzerdefinierten Renderfarm-Managers und möchte der Renderfarm automatisch OS X-Computer hinzufügen, wenn diese nicht verwendet werden.

Gibt es eine Möglichkeit, die Ausführung eines Skripts auszulösen, sobald sich ein Benutzer abgemeldet hat, und dann anzuhalten, wenn sich ein Benutzer angemeldet hat?

Antworten:


10

Es gibt verschiedene Möglichkeiten, Skripte beim Anmelden / Abmelden in OS X auszuführen. Einige sind aktueller und gelten nur für 10.5 und höher. Einige sind eher veraltet. Am schnellsten ist es jedoch, a hinzuzufügen Login Hook.

Erstellen Sie zunächst das Skript, das Sie ausführen möchten. Öffnen Sie ein Terminal und geben Sie Folgendes ein:

touch ~/script.sh
open -e !$

Dies öffnet einen Texteditor. Geben Sie das Skript ein, z. B. mit folgendem Inhalt:

#!/bin/sh
# insert your script here

Speicher die Datei. Führen Sie in Ihrem Terminal Folgendes aus:

chmod +x ~/script.sh

Dadurch wird die Datei ausführbar. Fügen wir es nun als Haken hinzu:

sudo defaults write com.apple.loginwindow LoginHook /usr/local/bin/script.sh 

Es gibt auch das Logout HookGegenstück:

sudo defaults write com.apple.loginwindow LogoutHook /usr/local/bin/script2.sh

Ich habe dies unter OS X 10.6 getestet und es sollte sogar bis 10.8 funktionieren. Beachten Sie, dass das Skript als ausgeführt wird rootund es nur einen Hook zum Anmelden bzw. Abmelden gibt.

Um dies alles rückgängig zu machen, geben Sie ein

sudo defaults delete com.apple.loginwindow LoginHook
sudo defaults delete com.apple.loginwindow LogoutHook

Beachten Sie, dass diese Methode nicht für die Bereitstellung oder ähnliches empfohlen wird. Wenn Sie sie jedoch nur wie in Ihrer Frage angegeben verwenden, sollte dies kein Problem sein.


funktioniert nicht für Yosemite
Davidcondrey

5

Login-Hooks wurden in 10.4 zugunsten von launchd veraltet. Um ein Skript beim Anmelden auszuführen, speichern Sie eine Liste wie diese unter ~/Library/LaunchAgents/test.plist. Es wird beim nächsten Login geladen, auch wenn Sie nicht laufen launchctl load ~/Library/LaunchAgents/test.plist.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC -//Apple Computer//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>say</string>
        <string>test</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

Weitere Informationen finden man launchd.plistund diesen Blog - Eintrag .


Laut dem verlinkten Blog-Beitrag wird die Liste beim ersten Anmelden geladen und so lange geladen, bis das System neu gestartet wird. Wie verwenden Sie launchd, um bei jedem Login ein Skript auszuführen? Oder beim Abmelden?
ShadSterling

-1

Damit diese Hooks in 10.10 funktionieren, müssen Sie Folgendes tun:

  1. Öffnen Sie die /etc/ttysDatei: Wählen Sie im Finder im Menü "Gehe zu" die Option "Gehe zu Ordner" /etc/, geben Sie ein und klicken Sie auf "Gehe zu".

  2. Öffnen Sie im daraufhin ttysangezeigten Fenster die Datei in Ihrem bevorzugten Texteditor (z. B. TextEdit).

  3. Suchen Sie nach einer Zeile mit der Aufschrift:

    console "/System/Library/CoreServices/loginwindow.app/Contents/MacOS/loginwindow" vt100 on secure window=/System/Library/CoreServices/WindowServer onoption="/usr/libexec/getty std.9600"

  4. Bearbeiten Sie diese Zeile so, dass sie wie folgt lautet (diese Zeile enthält keine Unterbrechungen):

    console "/System/Library/CoreServices/loginwindow.app/Contents/MacOS/loginwindow -LoginHook /path/to/script" vt100 on secure window=/System/Library/CoreServices/WindowServer onoption="/usr/libexec/getty std.9600"

    dh hinzufügen (wo ist der vollständige Pfad zu dem Skript , dass Sie , wenn sich ein Benutzer anmeldet ausgeführt werden soll) kurz vor dem zweiten Zitat ( ) markieren.-LoginHook /path/to/script/path/to/script"

  5. Speicher die Datei.

Stellen Sie sicher, dass der Texteditor, mit dem Sie diese Datei bearbeiten, die obige Zeile nicht in mehr als eine Zeile unterteilt.


oder folgen Sie den vollständigen Anweisungen hier:

http://support.apple.com/en-ca/HT2420


funktioniert nicht für Yosemite
Davidcondrey
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.