launchctl - remove enabled/disabled override

Francis picture Francis · Jul 3, 2015 · Viewed 15.3k times · Source

On OS X Yosemite (10.10), is there any way to remove the enabled/disabled override setting for a service?

For example, to permanently disable non-existent service 'test' for root, do this:

sudo launchctl disable user/0/test

Check that it has been added to the disabled list:

sudo launchctl print-disabled user/0

Result:

disabled services = {
    "test" => true
}
login item associations = {
}

Now, how can I delete "test" from the disabled services list?

(I know I can enable it, but I just want to remove the entry entirely.)

Note:

If I reboot my computer, I see that the 'test' override has been added to a launchd disabled file:

sudo cat /var/db/com.apple.xpc.launchd/disabled.0.plist

Result:

<?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>

I have tried running this command to manually delete it from the .plist file:

sudo /usr/libexec/Plistbuddy /var/db/com.apple.xpc.launchd/disabled.0.plist -c Delete:test

This does delete it from the file, but it just comes back again when I reboot my computer. Any ideas?

Answer

Alex Gray picture Alex Gray · Sep 23, 2015

It seems like the nature of the info that used to be in overrides.plist has changed..

According to launchctl's man page for the "legacy" load / unload sub-commands..

-w Overrides the Disabled key and sets it to false or true for the load and unload subcommands respectively. In previous versions, this option would modify the configuration file. Now the state of the Disabled key is stored elsewhere on- disk in a location that may not be directly manipulated by any process other than launchd.

I guess now... the info is stored in the /var/db/com.apple.xpc.launchddirectory.

The contents of mine contained several plists.

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

In this case, the file names are referring to the different Users' id's (501 being mine, 0 being root). Changing the keys in these files (as root, obviously) SHOULD remove the corresponding overrides with dark-overlord launchd.

If not, try editing these same files while booted to recovery, or some other drive - so as you can mess with them whilst launchd is not running/relentlessly trying to be boss.