カスタムレンダーファームマネージャーの構築をいじくり回しており、OS Xマシンが使用されていないときに自動的にレンダーファームに追加したい.
ユーザーがログアウトしたらスクリプトを実行し、ユーザーがログインすると停止する方法はありますか?
OS Xのログイン/ログアウト時にスクリプトを実行するいくつかの方法 、いくつかはより新しく、10.5以降にのみ適用されます。いくつかはかなり非推奨ですが、_Login Hook
_。
まず、実行するスクリプトを作成します。ターミナルを開き、次のように入力します。
_touch ~/script.sh
open -e !$
_
これにより、テキストエディタが開きます。スクリプトを入力します。次の内容で:
_#!/bin/sh
# insert your script here
_
ファイルを保存します。ターミナルで次を実行:
_chmod +x ~/script.sh
_
これにより、ファイルが実行可能になります。それをフックとして追加しましょう:
_Sudo defaults write com.Apple.loginwindow LoginHook /usr/local/bin/script.sh
_
_Logout Hook
_にも対応するものがあります。
_Sudo defaults write com.Apple.loginwindow LogoutHook /usr/local/bin/script2.sh
_
私はこれをOS X 10.6でテストしましたが、10.8まででも動作するはずです。スクリプトはroot
として実行され、ログインとログアウトのそれぞれに1つのフックしかないことに注意してください。
すべて元に戻すには、次のように入力します。
_Sudo defaults delete com.Apple.loginwindow LoginHook
Sudo defaults delete com.Apple.loginwindow LogoutHook
_
この方法は展開などにはお勧めできませんが、質問のように使用するだけであれば問題はありません。
10.4では、ログインフックが非推奨になり、launchdが採用されました。ログイン時にスクリプトを実行するには、このようなplistを~/Library/LaunchAgents/test.plist
として保存します。 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>
詳細については、man launchd.plist
および このブログ投稿 を参照してください。