2014-01-15 42 views
2

我有一个正在运行的守护进程,它下载安装程序(pkg)并使用install命令进行安装。安装程序将UI plist文件复制到/ Library/LaunchAgent中,因此UI可以在用户登录后启动。 但安装结束后,安装应该启动UI。由于osx窗口服务器架构,我知道UI不能从守护进程启动,守护进程无法直接启动任何UI进程。任何有关从OSX守护进程启动UI的工作

请问您能否提出任何解决办法,因此可以在不询问重新启动或注销的情况下启动UI?

问候, 阿南德Choubey

回答

3

您正在寻找launchctl bsexec,见man launchctl和OS X技术说明上引导命名空间的更多信息。

  1. 选择一个已登录的用户,您希望为其执行操作;请注意,可能有几个或没有。当前控制台用户是拥有/dev/console的用户;如果所有者UID为0(根),则没有人登录。

  2. 查找loginwindow进程属于该用户的UID。

  3. Exec /bin/launchctl bsexec PID_OF_THAT_LOGINWINDOW_PROCESS command args ...执行命令,就好像它已经由用户自己运行一样。这允许启动GUI进程,执行launchctl setenv/start/load等。不要忘记到目标用户UID的sudo/setuid

如果需要启动一个LaunchAgent,你应该做的是与launchctl load,而不是直接运行的代理,否则它不会出现在launchd像它应该。

+0

因此,有足够的时间来提供替代答案,但很难打败你的优秀答案。 +100,感谢您的信息! – DarkDust