如何从OSX守护程序或具有root的代理启动UI

时间:2014-07-17 22:39:37

标签: macos daemon agent launchd

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

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

我还尝试使用setsid()来调用脚本以使我的程序在不同的进程组中运行,但这也没有帮助。它只是无法显示任何UI内容。

我是OSX的新手,真的需要一些帮助。

1 个答案:

答案 0 :(得分:2)

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

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

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

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