Jak uruchomić skrypt przy zamykaniu systemu Snow Leopard?

5

Chcę uruchomić skrypt po zamknięciu lub ponownym uruchomieniu komputera iMac z systemem Snow Leopard.

Czytałem gdzieś, że można do tego użyć /etc/rc.shutdown.local, ale to nie działa dla mnie.

Na przykład umieściłem na nim następujące linie:

#!/bin/sh
/usr/bin/osascript -e "set volume with output muted"

Jeśli biegnę:

source /etc/rc.shutdown.local

rzeczywiście wycisza dźwięk. Jeśli jednak mam włączony dźwięk i ponownie uruchomię system operacyjny, dźwięk będzie nadal włączony. To chyba oznacza, że ​​skrypt nie został wywołany.

Jakieś pomysły?

AKTUALIZACJA: Obecnie działa. Myślę, że to dlatego, że poprawna nazwa to rc.local.shutdown, a nie rc.shutdown.local.

user30115
źródło
To wydaje mi się trochę cofnięte. Dlaczego po prostu nie uruchomisz skryptu wyciszającego na starcie? Należy pamiętać, że dźwięk rozruchowy nie jest już modyfikowany na sprzęcie obecnej generacji.
NReilingh
Dodaj odpowiedź na swoje pytanie, jeśli sam się zorientowałeś, i kliknij znacznik obok. To oznaczy, że to pytanie zostało rozwiązane.
Daniel Beck
Dzwonek startowy jest zdecydowanie zmienny. Podąża za stanem wyciszenia / głośności wewnętrznego urządzenia audio, które było aktywne przy wyłączaniu. Należy jednak pamiętać, że głośność słuchawek jest niezależna od głośności głośnika wewnętrznego, a nowoczesny sprzęt zawsze odtwarza dźwięk statupu przez głośnik wewnętrzny, a nie przez gniazdo słuchawkowe.
David C.

Odpowiedzi:

2

Obecnie działa. Myślę, że to dlatego, że poprawna nazwa to rc.local.shutdown, a nie rc.shutdown.local.

user30115
źródło
1

Inną opcją jest użycie haka wylogowania:

sudo defaults write com.apple.loginwindow LogoutHook ~/.logouthook
echo $'#!/usr/bin/osascript\nset volume with output muted' > ~/.logouthook
chmod +x ~/.logouthook

Wartość klucza LogoutHook może być tylko ścieżką do pliku wykonywalnego, a nie do polecenia powłoki. Hak wylogowania jest uruchamiany z uprawnieniami superużytkownika, więc nie potrzebujesz sudo.

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

Jeśli hak wylogowania trwa wystarczająco długo, aby go uruchomić, wyświetlany jest szary ekran, dopóki hak wylogowania nie zostanie zakończony. Wydaje się, że nie ma limitu czasu, po którym haki wylogowania są zmuszone do zakończenia.

Haki wylogowania były przestarzałe w wersji 10.4, ale nie znalazłem żadnego sposobu na niezawodne uruchamianie programów podczas wylogowywania za pomocą launchd. Nie znam żadnego sposobu na uruchomienie haka wylogowania przed zamknięciem lub ponownym uruchomieniem, ale nie przed wylogowaniem.

Lri
źródło
0

Użyj następującego skryptu:

#!/usr/bin/env bash
trap 'osascript -e "say \"hello\""' TERM
while true; do
    sleep 10
done

Uruchom przez cron lub launchd, którykolwiek wolisz.

Spróbuj go zabić kill pid, który pid będąc jego identyfikatorem procesu, którego się uczysz ps ax.


Nie chcę teraz zamykać się, żeby przetestować to właściwie, ale to powinien praca.

Daniel Beck
źródło
Czy twoja linia osascript nie powinna być „ustawiona głośność z wyciszonym wyjściem” zamiast polecenia powiedz?
NReilingh
@NReilingh True. Testowałem pułapkę za pomocą say i nie zawracałem sobie głowy zmianą.
Daniel Beck
0

Zacznę od stwierdzenia, że ​​jestem noobem w AppleScript. Więc dla dobra innych osób, które zaczynają także - publikuję następujące, które jest niewielką odmianą tego, co autor umieścił.

#!/bin/sh
/usr/bin/osascript -e "set volume 0.5"
Whome
źródło