macos - 任何围绕从 OSX 守护进程启动 UI 的工作

标签 macos daemon agent

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

您能否建议任何解决办法,以便无需重新启动或注销/登录即可启动 UI?

问候, 阿南德·乔贝

最佳答案

您正在寻找 launchctl bsexec,请参阅 man launchctl 和有关引导命名空间的 OS X 技术说明以获取更多信息。

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

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

  3. 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/

相关文章:

c++ - 在 R 中编译 C++ 代码不再有效

cocoa - Mac OS X 应用程序和其他元素(如 NSButton、NSTabView)的背景

java - Maven 在构建时包括旧的 SNAPSHOT

python 无法在 teed 时分离进程。如何跨越后台进程并无需等待退出?

java - 如何使用 Jericho 解析器设置用户代理

cross-platform - 将 Windows 和 Linux 组合在一个构建中 : No agent could be found with the following capabilities: sh, DotNetFramework

c++ - AudioConverterNew 返回 -50

django - 长时间运行 Django 进程是否可行?

linux - Docker:您是否尝试连接到没有 TLS 的启用 TLS 的守护进程?

java - 有没有办法在没有附加库的情况下启动代理?