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


10

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

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

回答:


10

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

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


ヨセミテでは機能しません
davidcondrey

5

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


リンクされたブログの投稿によると、これは最初にログインしたときにplistをロードし、システムが再起動するまでロードしたままにします。すべてのログインでlaunchdを使用してスクリプトをどのように実行しますか?またはログアウト時?
ShadSterling 2014

-1

これらのフックを10.10で機能させるには、次のようにする必要があります。

  1. /etc/ttysファイルを開きます。Finderで、/etc/[移動]メニューから[フォルダへ移動]を選択し、と入力して、[移動]をクリックします。

  2. 表示されたウィンドウで、ttys任意のテキストエディター(TextEditなど)でファイルを開きます。

  3. 次の行を探します。

    console "/System/Library/CoreServices/loginwindow.app/Contents/MacOS/loginwindow" vt100 on secure window=/System/Library/CoreServices/WindowServer onoption="/usr/libexec/getty std.9600"

  4. この行を次のように編集します(この行には改行がありません)。

    console "/System/Library/CoreServices/loginwindow.app/Contents/MacOS/loginwindow -LoginHook /path/to/script" vt100 on secure window=/System/Library/CoreServices/WindowServer onoption="/usr/libexec/getty std.9600"

    すなわち、追加(ここだけの二重引用符(前に、ときにユーザーがログイン中に実行したいことをスクリプトへの完全なパスがある))のマーク。-LoginHook /path/to/script/path/to/script"

  5. ファイルを保存します。

このファイルの編集に使用するテキストエディタで、上の行が複数の行に分割されていないことを確認してください。


またはここの完全な指示に従ってください:

http://support.apple.com/en-ca/HT2420


ヨセミテでは機能しません
davidcondrey
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.