我有一个正在运行的守护进程,它下载安装程序(pkg)并使用安装命令安装它。安装程序将 UI plist 文件复制到/Library/LaunchAgent,因此可以在用户登录后启动 UI。 但安装结束后,安装应该启动 UI。我了解 UI 无法从守护进程启动,因为 osx 窗口服务器架构中守护进程无法直接启动任何 UI 进程。
您能否建议任何解决办法,以便无需重新启动或注销/登录即可启动 UI?
问候, 阿南德·乔贝
最佳答案
您正在寻找 launchctl bsexec
,请参阅 man launchctl
和有关引导命名空间的 OS X 技术说明以获取更多信息。
选择您想要执行此操作的登录用户;请注意,可能有几个或没有。当前控制台用户是拥有
/dev/console
的用户;如果所有者 UID 为 0(root),则没有人登录。查找属于该用户 UID 的
loginwindow
进程。Exec
/bin/launchctl bsexec PID_OF_THAT_LOGINWINDOW_PROCESS command args ...
执行命令,就像用户自己运行的一样。这允许启动 GUI 进程,执行launchctl setenv/start/load
等。不要忘记sudo
/setuid
到目标用户 UID .
如果您需要启动 LaunchAgent,您应该使用 launchctl load
来执行此操作,而不是直接运行代理,否则它不会像这样出现在 launchd
中应该。
关于macos - 任何围绕从 OSX 守护进程启动 UI 的工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21134355/