web-dev-qa-db-ja.com

ログインウィンドウでアプリケーションを実行する

ユーザーログインが発生する前に、MacとPCの両方でReflectorやAirServerなどのアプリケーションを実行する方法を探しています。アプリケーションは、誰かがデータの送信を開始するまでほとんどGUIがなく、その時点で全画面表示になります。

MacやPCのログイン画面でアプリケーションを実行する方法はありますか?

2
unknowndomain

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>を削除します。

自動ログインが有効になっていて、LimitLoadToSessionTypeLoginWindowだけに設定されている場合、プログラムはまったく実行されません。

詳細については、 デーモンとエージェントのテクニカルノート またはman launchd.plistを参照してください。

1
Lri