我有一个正在运行的守护程序,它会下载安装程序(pkg)并使用install命令安装它。安装程序将UI plist文件复制到/ Library / LaunchAgent中,因此可以在用户登录后启动UI。 但是安装结束,安装应该启动UI。我知道由于osxmon窗口服务器架构守护进程无法直接启动任何UI进程,因此无法从守护进程启动UI。
你能否建议任何解决方法因此可以启动UI而无需重新启动或注销/进入?
此致 Anand Choubey
答案 0 :(得分:3)
您正在寻找launchctl bsexec
,有关其他信息,请参阅有关引导名称空间的man launchctl
和OS X技术说明。
选择您要执行此操作的已登录用户;请注意,可能有几个或没有。当前控制台用户是拥有/dev/console
的用户;如果所有者UID为0(根),则没有人登录。
查找属于该用户UID的loginwindow
进程。
执行/bin/launchctl bsexec PID_OF_THAT_LOGINWINDOW_PROCESS command args ...
执行命令,就好像它是由用户自己运行一样。这允许启动GUI进程,执行launchctl setenv/start/load
等。不要忘记sudo
/ setuid
到目标用户UID。
如果您需要启动LaunchAgent,则应该使用launchctl load
执行此操作,而不是直接运行代理,否则它将不会出现在launchd
中。