Uruchom skrypt / aplikację po wylogowaniu

13

Wszyscy wiemy, że Mac OS X ma bardzo przydatną funkcję elementów logowania, która pozwala między innymi skonfigurować aplikacje / skrypty do uruchamiania po zalogowaniu.

Szukam sposobu na skonfigurowanie listy skryptów / aplikacji uruchamianych po wylogowaniu . Lista „Wyloguj się”, jeśli chcesz.
Zasadniczo chcę napisać dla siebie kilka małych skryptów czyszczących, które będą uruchamiane automatycznie po wylogowaniu lub zamknięciu.

Tak więc szukam sposobu na automatyczne uruchomienie skryptu (lub, najlepiej, ich listy) po wylogowaniu. Wylogowanie czekałoby na zakończenie skryptów (tak jak wylogowanie czeka, aż klikniesz Zapisz, jeśli aplikacja tego zażąda).

Czy istnieje sposób automatycznego wyzwalania (a) skryptów po wylogowaniu z Mac OS X?

Nathan Greenstein
źródło

Odpowiedzi:

7

Haki do wylogowywania były przestarzałe w wersji 10.4 , ale nadal działają od wersji 10.9.

sudo defaults write com.apple.loginwindow LogoutHook ~/.logouthook
echo $'#!/bin/bash\nsay a' > ~/.logouthook
chmod +x ~/.logouthook

Wartość klucza LogoutHook może być tylko ścieżką do pliku wykonywalnego, a nie polecenia powłoki. Hak wylogowania jest uruchamiany jako root.

Polecenie defaults modyfikuje /var/root/Library/Preferences/com.apple.loginwindow.plist. Dodawanie klucza LogoutHook do /Library/Preferences/com.apple.loginwindow.plist nie działa.

Jeśli hak wylogowania trwa wystarczająco długo, wyświetlany jest szary ekran, aż hak wylogowania się zakończy. Wydaje się, że nie ma limitu czasu, po którym haki wylogowania zostaną zmuszone do zakończenia.

Nie wymyśliłem żadnego sposobu na niezawodne uruchamianie programów przy wylogowaniu z uruchomionym. Kiedy próbowałem przechwytywać sygnały takie jak EXIT, kod w pułapce był uruchamiany tylko wtedy, gdy wylogowałem się do okna logowania, a nie po wyłączeniu lub ponownym uruchomieniu.

<?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>
Lri
źródło
Hmm, żadne z nich nie działało dla mnie. Mam ten skrypt , który działa, jeśli go uruchomię sh(tworzy ten plik .txt). Zapisałem skrypt jako /etc/rc.shutdown.local i dodałem go defaultstak, jak powiedziałeś. Żaden plik już tam nie był. czy robię coś źle? Dzięki!
Nathan Greenstein,
Nie jestem pewien, czy robię coś źle, czy nie. Mam 10.6.8 i LogoutHook nie działa. Byłbym wdzięczny, gdybyś mógł rzucić okiem na ten zrzut ekranu i dać mi znać, jeśli coś wygląda nie tak. Dzięki!
Nathan Greenstein,
1
Ach! Ten ostatni zrobił lewy w 10.6.8. Dzięki! Jedna uwaga: nie działa z Lionem :(
Nathan Greenstein,
2
Obie metody działają dobrze na moim komputerze Mountain Lion (10.8.2), nawet po wyłączeniu lub ponownym uruchomieniu. Zauważ, że haki LoginHook / LogoutHook działają w kontekście użytkownika root , i że są to pojedyncze haki systemowe , i że hak logowania działa synchronicznie - znacznie wcześniej niż agenty uruchamiające dla poszczególnych użytkowników; podobnie hak wylogowania jest uruchamiany wcześniej niż agent uruchamiania dla każdego użytkownika, który używa metody pułapki EXIT. Są przypadki, w których działają tylko haki; na przykład, jeśli chcesz wyciszyć dźwięk podczas zamykania w celu stłumienia dźwięku startowego komputera Mac, tylko LogoutHook działa niezawodnie.
mklement0
1

W rzeczywistości istnieje sposób:

  1. Otwórz aplikację „Script Editor”
  2. Pasta

do shell script "PUT YOUR START SCRIPT PATH HERE"

on quit
    do shell script "PUT YOUR STOP SCRIPT PATH HERE"
    continue quit
end quit
  1. Plik> Zapisz, wybierz aplikację i pozostań otwarty po uruchomieniu modułu obsługi i zapisz
  2. Preferencje systemowe> Użytkownicy i grupy> karta Elementy logowania> przycisk +
  3. Dodaj aplikację i oznacz ją jako Ukrytą

Aby ukryć go przed Dockiem:

  1. Kliknij aplikację prawym przyciskiem myszy i wybierz opcję Pokaż zawartość pakietu
  2. Otwórz Info.plist i dodaj

<key>NSUIElement</key>
<string>1</string>
filippo
źródło
Kocham to. Prosty i odpowiedni do moich potrzeb. I nie jest przestarzałe.
Ivan X
0

Script Timer to dobry wybór do tego. Może działać przy wylogowaniu, logowaniu i wielu innych. Wybrałbym to na proste i łatwe w użyciu rozwiązanie. Ma prosty GUI:

Uruchomiona akcja

Należy zwrócić uwagę na dwie rzeczy dotyczące Script Timer. Po pierwsze, nie jest za darmo. Kosztuje 12 USD, ale osobiście uważam, że warto. Po drugie, nie jest w pełni kompatybilny z Lion, ale obiecali bezpłatną aktualizację, gdy tylko ją dostosują.

daviesgeek
źródło
1
To jest już nieaktualne
Kirtikumar A.
0

Możesz również utworzyć aplikację Mac na podstawie skryptu, używając czegoś takiego jak dziobak, a następnie dodać ją do elementów logowania, jak każda inna aplikacja.

svth
źródło
0

Power Manager może uruchomić skrypt po wylogowaniu użytkownika. Jest to produkt komercyjny i obsługuje najnowszy system macOS.

Power Manager uruchom skrypt przy wylogowaniu zadania Schedule Assistant

Wcześniejsze wersje wymagały korzystania z edytora zdarzeń , ale teraz włączono zadanie Asystenta harmonogramu do uruchamiania skryptów podczas logowania i wylogowywania.

Napisałem Power Managera, więc możesz zadawać pytania techniczne dotyczące jego wdrożenia. W przypadku wyzwolonych zdarzeń wylogowania, Power Manager nie odpytuje o zmiany w stanie użytkownika, lecz jest powiadamiany o zmianach użytkownika przez macOS. To podejście jest bardziej wydajne niż zapętlanie / odpytywanie skryptu.

Graham Miln
źródło