web-dev-qa-db-ja.com

OS Xのログイン/ログアウトでスクリプトを実行する方法

カスタムレンダーファームマネージャーの構築をいじくり回しており、OS Xマシンが使用されていないときに自動的にレンダーファームに追加したい.

ユーザーがログアウトしたらスクリプトを実行し、ユーザーがログインすると停止する方法はありますか?

10
user36659

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
_

この方法は展開などにはお勧めできませんが、質問のように使用するだけであれば問題はありません。

9
slhck

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および このブログ投稿 を参照してください。

5
Lri