2

WindowServerにアクセスできるOSX用のアプリケーションを開発しています。このアプリケーション (エージェントと呼びましょう) は、現在ログインしているすべてのユーザーに対して最初にロードされます。実行中の loginwindow プロセスを検索し、各ユーザーとして plist をロードします (bsexec を使用して適切なコンテキストを設定します)。

  • ps -ef | grep ログインウィンドウ

    501 90425 1 0 午前 10 時 46 分?? 0:01.21 /System/Library/CoreServices/loginwindow.app/Contents/MacOS/loginwindow コンソール

    502 90721 90426 0 午前 10 時 54 分?? 0:00.36 /システム/ライブラリ/CoreServices/loginwindow.app/Contents/MacOS/loginwindow

    0 91103 90426 0 午前 11:01 ?? 0:02.57 /システム/ライブラリ/CoreServices/loginwindow.app/Contents/MacOS/loginwindow

ここでは、ログインしたユーザー (非アクティブ) 用に 3 つの loginwindow プロセス 2 と、ログイン ウィンドウ (アクティブ) 用に 1 つのプロセスがあります。

  • 走る:

    sudo launchctl bsexec 90721 sudo -u 502 launchctl load -wF -S Aqua /Library/LaunchAgents/com.myagent.plist
    

ログインしているユーザーごとに。

  • sudo launchctl bsexec 91103 launchctl load -wF -S LoginWindow /Library/LaunchAgents/com.myagent.plist
    

ログインウィンドウ用。

問題は、エージェントがログイン ウィンドウで (root として) 起動すると、次のエラーが発生することです。

May 15 15:47:01 Mac-mini.local WSagent.bin[99201]: kCGErrorFailure: This user is not allowed access to the window system right now.
May 15 15:47:01 Mac-mini.local WSagent.bin[99201]: kCGErrorInvalidConnection: CGSGetEventPort: Invalid connection
May 15 15:47:01 Mac-mini.local WSagent.bin[99201]: _RegisterApplication(), FAILED TO establish the default connection to the WindowServer, _CGSDefaultConnection() is NULL.
May 15 15:47:01 Mac-mini.local WSagent.bin[99201]: CGSRegisterConnectionNotifyProc called with invalid connection
May 15 15:47:01 --- last message repeated 1 time ---
May 15 15:47:01 Mac-mini.local WSagent.bin[99201]: kCGErrorInvalidConnection: CGSSetConnectionProperty: Invalid connection
May 15 15:47:01 Mac-mini.local WSagent.bin[99201]: kCGErrorInvalidConnection: Error enabling suspendResume handling

しかし、ユーザーにログインしてから再度ログイン ウィンドウにログアウトすると、起動したエージェントが適切に作成され、ウィンドウ サーバーに問題なくアクセスできます。

新しい OSX バージョンで問題が発生します (たとえば、10.6.8 では問題なく動作します)。

アイデアが不足していますが、これをログインウィンドウで機能させたいと思っています。助けてくれてありがとう!

/グラシュ

4

0 に答える 0