回答:
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
、およびこのブログ投稿を参照してください。
これらのフックを10.10で機能させるには、次のようにする必要があります。
/etc/ttys
ファイルを開きます。Finderで、/etc/
[移動]メニューから[フォルダへ移動]を選択し、と入力して、[移動]をクリックします。
表示されたウィンドウで、ttys
任意のテキストエディター(TextEditなど)でファイルを開きます。
次の行を探します。
console "/System/Library/CoreServices/loginwindow.app/Contents/MacOS/loginwindow" vt100 on secure window=/System/Library/CoreServices/WindowServer onoption="/usr/libexec/getty std.9600"
この行を次のように編集します(この行には改行がありません)。
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
"
ファイルを保存します。
このファイルの編集に使用するテキストエディタで、上の行が複数の行に分割されていないことを確認してください。
またはここの完全な指示に従ってください: