如何实现 Mac app 安装后以 root 启动一个 daemon?

2023-01-05 20:30:31 +08:00
vczyh  vczyh

作为 Apple 开发新手,想做一个 Mac App ,有个需求想咨询大家:

  1. 启动 daemon,类似这样,请问怎么实现。我目前只是知道将 .plist 文件放到 /Library/LaunchDaemons 下可以实现后台运行,但是这个需要 root 权限,请问 app 安装包权限有这么高吗 启动项

  2. 怎么在图片中的 允许在后台 列表添加我自己的 App ,目前看到了 SMAppService.daemon() 这个 API

  3. 我的 daemon 程序必须要求 root 账号,因为他会操作 Tun

1728 次点击
所在节点   macOS  macOS
11 条回复
SenLief
SenLief
2023-01-06 00:35:33 +08:00
你可以在站里找一下 clash x pro 的开发者老哥,看看他愿不愿意传授几手,增强模式的 tun 就是 root 权限的。
zhaoxin
zhaoxin
2023-01-06 06:28:12 +08:00
你的思路错了。不是你手动将 plist 放到那里的问题,是你需要创建启动程序。请参考我这篇博客。

https://zhaoxin.pro/15782726304661.html
vczyh
vczyh
2023-01-06 09:52:59 +08:00
感谢 @zhaoxin

现在有了新的 API: https://developer.apple.com/documentation/servicemanagement/smappservice

请问如何以 root 运行后台 LoginItems 程序呢?
zhaoxin
zhaoxin
2023-01-06 10:09:47 +08:00
@vczyh 你有仔细看我的博客吗?都和你说了你的思路是错的,根本不需要 root 权限。因为你调用系统提供的 API ,那个文件是系统自动生成的,不需要你手动放。
vczyh
vczyh
2023-01-06 10:32:14 +08:00
@zhaoxin
我的理解是,最后系统会把你的应用程序拉起来对吧?那么这个程序的运行权限是 root 吗?
ihwbunny
ihwbunny
2023-01-06 11:31:48 +08:00
我的理解“登录时启动”,是针对用户的,类似用户的 Agents ,而不是 daemons ,相当于 OP 主题中贴图的登录项中的“登录时打开”
daemons 运行于 root ,所以安装的时候也是需要 root 的。即便是全局的 Agents ,也是需要 root 的。

pkg 安装包可以设置需要 root 权限,这样在安装这个 pkg 的时候,系统会自动提示用户输入管理员账户,这样就可以拥有 root 权限了。
zhaoxin
zhaoxin
2023-01-06 11:41:40 +08:00
@vczyh 当然不是 root 权限。只是用户权限。启动根本不需要 root ,应用都是运行在沙盒。
vczyh
vczyh
2023-01-06 12:35:04 +08:00
@zhaoxin
感谢!
vczyh
vczyh
2023-01-06 12:36:14 +08:00
@ihwbunny
能不能分享一下如何在 pkg 安装的时候索要 root 权限?
ihwbunny
ihwbunny
2023-01-07 08:30:39 +08:00
@vczyh
你使用什么方式制作 pkg 的?
jdjingdian
2023-01-07 17:30:57 +08:00
刚好在研究类似的问题,我想做一些需要 sudo 执行的命令行工具,懒得手动输命令,是不是通过 SMAppService.daemon()这个 api 给 helper 赋予 root 权限,实际上 gui 还是用户权限,控制的时候要用 xpc 通讯呢?看低版本苹果官方的 SMJobless 有点头大,不知道新的 api 会不会简单一点

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/906843

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX