【问题标题】:How to start UI from OSX daemon or agent with root如何使用 root 从 OSX 守护程序或代理启动 UI
【发布时间】:2014-09-08 23:34:46
【问题描述】:

我正在寻找一种在用户登录或系统启动时启动我的程序的方法。该程序需要具有root权限,并且需要在顶部菜单栏上显示一些UI内容。

我尝试使用 launchd 将其作为守护程序和代理程序启动。问题是守护进程不能有 UI。并且代理以用户身份运行,因此它没有root权限。

我还尝试让守护程序使用 setsid() 调用脚本,以使我的程序在不同的进程组中运行,但这也无济于事。它只是无法显示任何 UI 内容。

我是 OSX 新手,确实需要一些帮助。

【问题讨论】:

  • 让守护进程执行特权操作,代理执行 GUI。然后让代理向守护进程查询它想要显示的数据。

标签: macos daemon agent launchd


【解决方案1】:

您已正确识别,守护程序无法显示 UI。您需要一个单独的程序与守护程序通信以提供所需的 UI。

有多种沟通方式。如果设计合适,首选方法是使用XPC services,在这种情况下,您需要创建主 GUI 应用程序并将守护程序作为该应用程序的 XPC 服务。

或者,GUI 应用程序可以是启动代理,因此它在登录时启动,然后您需要提供两个进程之间的通信。有几种方法可以做到这一点,例如使用Distributed NotificationsTCP Sockets and Streamslocal sockets

无论您选择哪种方法,为了让守护程序提供 UI,您必须使用单独的进程。

【讨论】:

  • 您好,我正在处理与 root 后台进程相同的问题,即无法触发 crashreporter“意外终止”窗口。我是否需要处理所有导致意外终止的信号并触发对话框?
  • @Zohar81,我建议为此提出一个不同的 SO 问题,因为它超出了这个问题的范围。
  • 其实我也写过这个问题,但是措辞不同,因为我一开始还没有弄清楚问题的根源,也许你可以看看下面的链接stackoverflow.com/questions/35390122/…跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-08
相关资源
最近更新 更多