Snow Leopardを実行して、iMacをシャットダウンまたは再起動したときにスクリプトを実行したい。
/etc/rc.shutdown.localを使用できるとどこかで読んだのですが、うまくいきません。
たとえば、次の行を追加します。
#!/bin/sh
/usr/bin/osascript -e "set volume with output muted"
私が実行した場合:
source /etc/rc.shutdown.local
それは確かに音をミュートします。ただし、サウンドをオンにしてOSを再起動すると、サウンドはオンのままになります。これは、スクリプトが呼び出されなかったことを意味していると思います。
何か案は?
更新:実際に動作しています。正しい名前がrc.shutdown.localではなくrc.local.shutdownであるからだと思います。
実際に動作しています。正しい名前がrc.shutdown.localではなくrc.local.shutdownであるからだと思います。
別のオプションは、ログアウトフックを使用することです。
Sudo defaults write com.Apple.loginwindow LogoutHook ~/.logouthook
echo $'#!/usr/bin/osascript\nset volume with output muted' > ~/.logouthook
chmod +x ~/.logouthook
LogoutHookキーの値は、実行可能ファイルへのパスのみであり、シェルコマンドではありません。ログアウトフックはスーパーユーザー権限で実行されるため、Sudoは必要ありません。
Defaultsコマンドは、/ var/root/Library/Preferences /com.Apple.loginwindow.plistを変更します。 LogoutHookキーを/Library/Preferences/com.Apple.loginwindow.plistに追加しても機能しません。
ログアウトフックの実行に十分な時間がかかる場合、ログアウトフックが終了するまで灰色の画面が表示されます。ログアウトフックが強制的に終了するまでの時間制限はないようです。
ログアウトフックは10.4で非推奨になりましたが、launchdを使用してログアウト時にプログラムを確実に実行する方法がわかりませんでした。シャットダウンまたは再起動する前にログアウトフックを実行する方法はわかりませんが、ログアウトする前には実行できません。
次のスクリプトを使用します。
#!/usr/bin/env bash
trap 'osascript -e "say \"hello\""' TERM
while true; do
sleep 10
done
cron
またはlaunchd
のどちらかお好みで開始します。
kill pid
を使用して強制終了してみてください。pid
はps ax
から学習したプロセスIDです。
適切にテストするために今すぐシャットダウンしたくありませんが、should動作します。
私はAppleScriptの初心者だと言うことから始めます。ですから、他の人々の利益のために、私は以下を投稿します。これは、著者が入力したもののマイナーなバリエーションです。
#!/bin/sh
/usr/bin/osascript -e "set volume 0.5"