launchctl - 删除启用/禁用覆盖

Fra*_*cis 12 launchd osx-yosemite launchctl

在OS X Yosemite(10.10)上,有没有办法删除服务的启用/禁用覆盖设置?

例如,要永久禁用root用户不存在的服务"test",请执行以下操作:

sudo launchctl disable user/0/test
Run Code Online (Sandbox Code Playgroud)

检查它是否已添加到禁用列表中:

sudo launchctl print-disabled user/0
Run Code Online (Sandbox Code Playgroud)

结果:

disabled services = {
    "test" => true
}
login item associations = {
}
Run Code Online (Sandbox Code Playgroud)

现在,如何从禁用的服务列表中删除"test"?

(我知道我可以启用它,但我只想完全删除该条目.)

注意:

如果我重新启动计算机,我会看到"test"覆盖已添加到launchd disabled文件中:

sudo cat /var/db/com.apple.xpc.launchd/disabled.0.plist
Run Code Online (Sandbox Code Playgroud)

结果:

<?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>test</key>
    <true/>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)

我试过运行此命令手动将其从.plist文件中删除:

sudo /usr/libexec/Plistbuddy /var/db/com.apple.xpc.launchd/disabled.0.plist -c Delete:test
Run Code Online (Sandbox Code Playgroud)

这会将其从文件中删除,但是当我重新启动计算机时它会再次出现.有任何想法吗?

Ale*_*ray 6

似乎以前信息的本质overrides.plist已经改变了..

launchctlman的'传统’页load/ unload分的命令..

-w覆盖Disabled键并分别为load和unload子命令将其设置为false或true.在以前的版本中,此选项将修改配置文件.现在,"已禁用"键的状态存储在磁盘上的其他位置,该位置可能不会被launchd以外的任何进程直接操作.

我想现在......信息存储在/var/db/com.apple.xpc.launchd目录中.

我的内容包含几个plists.

config disabled.0.plist disabled.200.plist ... disabled.501.plist ... disabled.migrated loginitems.0.plist ... loginitems.501.plist ...

在这种情况下,文件名是指不同的用户ID(501我的,0root).更改这些文件中的键(显然是root用户)应该删除带有dark-overlord的相应覆盖launchd.

如果没有,尝试在启动恢复或其他驱动器时编辑这些相同的文件 - 这样你就可以在launchd没有运行/无情地试图成为老板时弄乱它们.

  • 'dark-overlord `launchd`'……太好了。+1 散文。 (2认同)

Gar*_*ary 5

我能够使用单用户模式来做到这一点。步骤是:

  1. 关闭你的电脑。
  2. 启动时,进入单用户模式(Command + S)。
  3. 从命令行输入/sbin/mount -uw /
  4. 编辑适当的/var/db/com.apple.xpc.launchd/disabled.*.plist文件,根据需要删除禁用的项目。
  5. 类型exit


Dre*_*rew 4

我刚刚在yosemite上用LaunchControl解决了这个问题...它必须有一个非常棒的GUI用于管理OSX上的守护进程和代理.它有很多功能......所以只需要用cask安装它

$ brew cask install launchcontrol\n
Run Code Online (Sandbox Code Playgroud)

然后在左侧列表中找到您的服务(在"使用代理"或"全局守护程序"或"其他..."下).

选择它,然后在主菜单中转到Job => Override Disabled key => Always False

然后重新启动并检查......应该工作!

  • 也许值得注意的是,LaunchControl (https://www.soma-zone.com/LaunchControl) 是商业软件,需要付费许可证才能保存更改。Lingon (https://www.peterborgapps.com/lingon) 是另一种替代方案,也需要购买许可证。 (3认同)