2

我正在为 OSX 开发一个可以访问 WindowServer 的应用程序。这个应用程序(我们称之为代理)首先为当前登录的每个用户加载。我正在搜索正在运行的 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 /System/Library/CoreServices/loginwindow.app/Contents/MacOS/loginwindow

    0 91103 90426 0 上午 11:01 ?? 0:02.57 /System/Library/CoreServices/loginwindow.app/Contents/MacOS/loginwindow

在这里,我有三个登录窗口进程 2 用于登录用户(非活动),一个用于登录窗口(活动)。

  • 我跑:

    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