从OSX守护程序启动UI的任何工作

时间:2014-01-15 10:04:44

标签: macos daemon agent

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

你能否建议任何解决方法因此可以启动UI而无需重新启动或注销/进入?

此致 Anand Choubey

1 个答案:

答案 0 :(得分:3)

您正在寻找launchctl bsexec,有关其他信息,请参阅有关引导名称空间的man launchctl和OS X技术说明。

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

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

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

  4. 如果您需要启动LaunchAgent,则应该使用launchctl load执行此操作,而不是直接运行代理,否则它将不会出现在launchd中。