Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

launchctl - remove enabled/disabled override

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?

like image 473
Francis Avatar asked Jul 03 '15 12:07

Francis


2 Answers

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.

like image 120
Alex Gray Avatar answered Oct 05 '22 23:10

Alex Gray


I've just solved this kinda problem with LaunchControl on yosemite… its a must have amazing little GUI for managing your daemons and agents on OSX. It has a lot of features… So just install it with cask

$ brew cask install launchcontrol

then find your service (under Use Agents or Global Daemons or whatever… ) in the list on the left.

Select it and in the main menu go to Job=>Override Disabled key=>Always False

Then reboot and check... Should work!

like image 35
Drew Avatar answered Oct 05 '22 22:10

Drew