ユーザーログインが発生する前に、MacとPCの両方でReflectorやAirServerなどのアプリケーションを実行する方法を探しています。アプリケーションは、誰かがデータの送信を開始するまでほとんどGUIがなく、その時点で全画面表示になります。
MacやPCのログイン画面でアプリケーションを実行する方法はありますか?
OS Xでは、ログイン前のlaunchdエージェントを作成できます。たとえば、このプロパティリストを/Library/LaunchAgents/some.label.plist
として保存します。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>some.label</string>
<key>LimitLoadToSessionType</key>
<array>
<string>LoginWindow</string>
<string>Aqua</string>
</array>
<key>ProgramArguments</key>
<array>
<string>say</string>
<string>a</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Plistがrootによって所有されていることを確認してください。そうでない場合は、ユーザーとしてlaunchd load
を実行するとロードできますが、launchdによって自動的にロードされません。
その後、再起動した場合、sayコマンドは、ログインウィンドウが表示されたときに一度実行し、ユーザーがグラフィカルにログインした後にもう一度実行する必要があります。
ユーザーがグラフィカルにログインしたときにプログラムを再度実行したくない場合は、<string>Aqua</string>
を削除します。
自動ログインが有効になっていて、LimitLoadToSessionType
がLoginWindow
だけに設定されている場合、プログラムはまったく実行されません。
詳細については、 デーモンとエージェントのテクニカルノート またはman launchd.plist
を参照してください。