【问题标题】:Any work around starting UI from OSX daemon从 OSX 守护进程启动 UI 的任何工作
【发布时间】:2014-01-15 10:04:43
【问题描述】:

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

您能否建议任何解决方法,以便在不要求重新启动或注销/登录的情况下启动 UI?

问候, 阿南德·乔贝

【问题讨论】:

    标签: macos daemon agent


    【解决方案1】:

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

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

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

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

    如果您需要启动 LaunchAgent,您应该使用 launchctl load 来完成,而不是直接运行代理,否则它不会像应有的那样出现在 launchd 中。

    【讨论】:

    • 所以,有足够的时间来替代答案,但已经很难击败您的出色答案。 +100,感谢您的信息!
    猜你喜欢
    • 1970-01-01
    • 2014-09-08
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多