NSAlert 提示输入由进程 运行 作为 root 生成的文本

NSAlert prompting for text input spawned by a process running as root

我有一个在后台以 root 身份运行的进程。当某个事件发生时,我让它弹出一个带有 NSTextField 的 NSAlert,以便用户可以提供一些信息。但是,用户无法单击 TextField 或在其中键入任何内容。我可以拖动警报框并单击警报上的按钮就好了。

我猜这是因为我的进程是 运行 作为 root 而不是登录到机器的最终用户帐户。有没有一种方法可以轻松解决这个问题,而无需作为用户生成单独的进程并通过分布式对象等管道返回信息?

最好的办法是让你的UI东西运行成为当前用户,不仅因为这样的问题,还因为运行一个GUI app as root 会带来大量的安全隐患,事实上过去有很多安全漏洞是由某些支持 AppKit 的进程引起的 运行 as root.

话虽如此,XPC 是您想要用来在根工具和 GUI 应用程序之间进行通信的机制,而不是分布式对象,后者已经过时并且有许多自身的问题.