【问题标题】:Launchd Plist file not running after reboot重新启动后启动的 Plist 文件未运行
【发布时间】:2017-08-03 02:50:47
【问题描述】:

我正在 iMac 的登录页面上创建一个需要 GUI 的 OSX 应用程序,我想知道(如果可能的话)我可以在重启后运行一个启动的 plist 文件。以下 plist 文件位于 "/Library/LaunchAgents/" 目录中:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
         <false/>
    <key>Label</key>
       <string>com.example.apple-samplecode.PreLoginAgentCocoa</string>
    <key>LimitLoadToSessionType</key>
       <string>LoginWindow</string>
    <key>KeepAlive</key>
       <true/>
    <key>ProgramArguments</key>
    <array>
        <string>/Library/PrivilegedHelperTools/PreLoginAgentCocoa.app/Contents/MacOS/PreLoginAgentCocoa</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

该文件在我从桌面注销时有效,但在我重新启动计算机时无效。

任何帮助都是有用的。

【问题讨论】:

    标签: objective-c macos login plist launchd


    【解决方案1】:

    在 iMac 的登录页面上需要 GUI 的 OSX 应用程序

    LaunchAgents 为当前登录的会话用户执行。当您重新启动 Mac 并显示登录屏幕时,没有会话用户。

    正如Apple Documentation 所说:-

    用户代理本质上与守护程序相同,但特定于给定的登录用户,并且仅在该用户登录时执行

    如果没有给定的“登录用户”,您的应用程序将无法作为LaunchAgent 执行。

    该文件适用于我从桌面注销时

    此时会话用户仍然可用,因此在会话用户被释放之前注销时将起作用。

    【讨论】:

    • 我能否也制作一个 LaunchDeamon,然后它会显示在登录屏幕上。
    • 我可以将脚本添加到 Launch Deamon 中吗?有什么需要更改的吗?
    • 我想通了,我有一个加密的驱动器,所以我的 mac 登录然后启动导致 loginwindow 屏幕不显示,但如果你的 mac 未加密它会工作。
    【解决方案2】:

    plist 文件放入以下目录的区别

    /Library/LaunchAgents :它将作为代理运行。代理以登录用户身份在用户会话中运行。

    /Library/LaunchDaemons :它将作为守护进程运行。守护进程在系统上下文中运行,与登录者无关,通常以 root 身份运行。

    如果您想在机器重启时启动您的服务/脚本,那么您需要将您的plist 文件放入/Library/LaunchDaemons 文件夹并执行以下命令。

    sudo launchctl bootstrap system /Library/LaunchDaemons/${YOUR_SERVICE_NAME}.plist
    sudo launchctl enable system/${YOUR_SERVICE_NAME}
    sudo launchctl kickstart -kp system/${YOUR_SERVICE_NAME}
    

    注意:它将以root用户启动服务并在系统范围内启动。

    参考资料: Launchctl 手册页(https://ss64.com/osx/launchctl.html)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-22
      • 1970-01-01
      相关资源
      最近更新 更多