Jak uruchomić skrypt podczas logowania / wylogowywania w OS X?


10

Bawię się budowaniem niestandardowego menedżera farmy renderowania i chcę automatycznie dodawać maszyny OS X do farmy renderowania, gdy nie są one używane.

Czy istnieje sposób na uruchomienie skryptu po wylogowaniu dowolnego użytkownika, a następnie zatrzymanie go po zalogowaniu się?

Odpowiedzi:


10

Istnieje kilka sposobów uruchamiania skryptów podczas logowania / wylogowywania w OS X , niektóre są nowsze i dotyczą tylko wersji 10.5 i nowszych, niektóre są raczej przestarzałe, ale najszybszym byłoby dodanie Login Hook.

Najpierw utwórz skrypt, który chcesz uruchomić. Otwórz terminal i wprowadź:

touch ~/script.sh
open -e !$

Spowoduje to otwarcie edytora tekstu. Wpisz skrypt, np. O następującej treści:

#!/bin/sh
# insert your script here

Zapisz plik. W swoim terminalu uruchom:

chmod +x ~/script.sh

Spowoduje to, że plik będzie wykonywalny. Dodajmy teraz jako hak:

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

Istnieje również Logout Hookodpowiednik:

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

Przetestowałem to na OS X 10.6 i powinno działać nawet do 10.8. Należy pamiętać, że skrypt działa jako rooti istnieje tylko jeden haczyk do logowania i wylogowania odpowiednio.

Aby cofnąć to wszystko, wpisz

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

Pamiętaj, że ta metoda nie jest zalecana do wdrażania ani niczego, ale jeśli używasz jej tylko tak, jak podano w pytaniu, nie powinno to stanowić problemu.


nie działa dla yosemite
davidcondrey

5

Haki logowania zostały wycofane w wersji 10.4 na korzyść wersji uruchomionej. Aby uruchomić skrypt podczas logowania, zapisz taką listę jak ~/Library/LaunchAgents/test.plist. Jest ładowany przy następnym logowaniu, nawet jeśli nie uruchomisz 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>

Aby uzyskać więcej informacji, zobacz man launchd.plisti ten post na blogu .


Zgodnie z linkowanym postem na blogu spowoduje to załadowanie listy odtwarzania przy pierwszym logowaniu i utrzymanie jej do momentu ponownego uruchomienia systemu. W jaki sposób uruchomisz skrypt, aby uruchomić skrypt przy każdym logowaniu? Lub przy wylogowaniu?
ShadSterling

-1

Aby te haki działały w 10.10, musisz to zrobić:

  1. Otwórz /etc/ttysplik: w Finderze wybierz Idź do folderu z menu Idź, wpisz /etc/, a następnie kliknij Idź.

  2. W wyświetlonym oknie otwórz ttysplik w preferowanym edytorze tekstu (takim jak TextEdit).

  3. Poszukaj linii o treści:

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

  4. Edytuj ten wiersz, aby brzmiał następująco (w tym wierszu nie ma przerw):

    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"

    tzn. dodaj (gdzie jest pełna ścieżka do skryptu, który chcesz wykonać, gdy użytkownik się zaloguje) tuż przed drugim znakiem quote ( ).-LoginHook /path/to/script/path/to/script"

  5. Zapisz plik.

Upewnij się, że edytor tekstu używany do edycji tego pliku nie dzieli powyższej linii na więcej niż jedną linię.


lub wykonaj pełną instrukcję tutaj:

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


nie działa dla yosemite
davidcondrey
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.