tl; dr: rodzimy proces launcher i OSX za pomocą Menedżera, launchd
.
Aby to zrobić, stwórz launchctl
demona. Będziesz mieć pełną kontrolę nad wszystkimi aspektami skryptu. Możesz uruchomić raz lub pozostać przy życiu jako demon. W większości przypadków jest to właściwy sposób.
- Utwórz
.plist
plik zgodnie z instrukcjami zawartymi w dokumentach Apple Dev tutaj lub bardziej szczegółowo poniżej.
- Umieścić w
~/Library/LaunchAgents
- Zaloguj się (lub uruchom ręcznie przez
launchctl load [filename.plist]
)
Aby uzyskać więcej informacji launchd
, artykuł w Wikipedii jest dość dobry i opisuje system oraz jego zalety w stosunku do innych starszych systemów.
Oto konkretny plik plist do uruchomienia skryptu podczas logowania .
Zaktualizowano 2017/09/25 dla OSX El Capitan i nowszych (podziękowania dla José Messiasa Jr ):
<?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>com.user.loginscript</string>
<key>ProgramArguments</key>
<array><string>/path/to/executable/script.sh</string></array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Zastąp <string>
klucz programu po żądanym poleceniem (zwróć uwagę, że każdy skrypt, do którego odwołuje się to polecenie, musi być wykonywalny: chmod a+x /path/to/executable/script.sh
aby zapewnić, że jest dostępny dla wszystkich użytkowników).
Zapisz jako ~/Library/LaunchAgents/com.user.loginscript.plist
Uruchom launchctl load ~/Library/LaunchAgents/com.user.loginscript.plist
i wyloguj się / zaloguj, aby przetestować (lub przetestować bezpośrednio, uruchomić launchctl start com.user.loginscript
)
Ogon /var/log/system.log
dla komunikatów o błędach.
Kluczem jest to, że jest to wpis uruchamiany specyficzny dla użytkownika, więc będzie uruchamiany przy logowaniu dla danego użytkownika. Demony uruchamiania specyficzne dla systemu (umieszczone w /Library/LaunchDaemons
) są uruchamiane podczas rozruchu.
Jeśli chcesz, aby skrypt działał przy logowaniu dla wszystkich użytkowników, uważam, że LoginHook jest twoją jedyną opcją i prawdopodobnie dlatego istnieje.