我正在为 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 上它可以正常工作)。
我的想法已经不多了,但我真的很想让这个在登录窗口上工作。预先感谢您的任何帮助!
/古拉什