V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
vczyh
V2EX  ›  macOS

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

  •  
  •   vczyh · 2023-01-05 20:30:31 +08:00 · 1349 次点击
    这是一个创建于 475 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

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

    pkg 安装包可以设置需要 root 权限,这样在安装这个 pkg 的时候,系统会自动提示用户输入管理员账户,这样就可以拥有 root 权限了。
    zhaoxin
        7
    zhaoxin  
       2023-01-06 11:41:40 +08:00 via iPhone
    @vczyh 当然不是 root 权限。只是用户权限。启动根本不需要 root ,应用都是运行在沙盒。
    vczyh
        8
    vczyh  
    OP
       2023-01-06 12:35:04 +08:00
    @zhaoxin
    感谢!
    vczyh
        9
    vczyh  
    OP
       2023-01-06 12:36:14 +08:00
    @ihwbunny
    能不能分享一下如何在 pkg 安装的时候索要 root 权限?
    ihwbunny
        10
    ihwbunny  
       2023-01-07 08:30:39 +08:00
    @vczyh
    你使用什么方式制作 pkg 的?
    jdjingdian
        11
    jdjingdian  
       2023-01-07 17:30:57 +08:00
    刚好在研究类似的问题,我想做一些需要 sudo 执行的命令行工具,懒得手动输命令,是不是通过 SMAppService.daemon()这个 api 给 helper 赋予 root 权限,实际上 gui 还是用户权限,控制的时候要用 xpc 通讯呢?看低版本苹果官方的 SMJobless 有点头大,不知道新的 api 会不会简单一点
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5270 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 08:19 · PVG 16:19 · LAX 01:19 · JFK 04:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.