Launchctctl - удалить включено/отключено

В OS X Yosemite (10.10) есть ли способ удалить параметр активированного/отключенного переопределения для службы?

Например, чтобы навсегда отключить несуществующий сервис 'test' для root, сделайте следующее:

sudo launchctl disable user/0/test

Убедитесь, что он добавлен в список отключенных:

sudo launchctl print-disabled user/0

Результат:

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

Теперь, как я могу удалить "тест" из списка отключенных служб?

(Я знаю, что могу включить его, но просто хочу полностью удалить запись.)

Примечание:

Если я перезагружу свой компьютер, я вижу, что переопределение "test" было добавлено в файл launchd disabled:

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

Результат:

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

Я попытался запустить эту команду, чтобы вручную удалить ее из файла .plist:

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

Это удалит его из файла, но он снова возвращается, когда я перезагружаю компьютер. Любые идеи?

Ответ 1

Я только что решил эту проблему с LaunchControl на yosemite... его должен иметь удивительный маленький графический интерфейс для управления вашими демонами и агентами на OSX. В нем много функций... Так что просто установите его с помощью cask

$ brew cask install launchcontrol

затем найдите свою службу (в разделе "Использование агентов или глобальных демонов" или что-то еще...) в списке слева.

Выберите его и в главном меню перейдите к Job = > Переопределить Отключенную клавишу = > Всегда False

Затем перезагрузитесь и проверьте... Должен работать!

Ответ 2

Похоже, что изменилась природа информации, которая была в overrides.plist.

В соответствии с launchctl man страница для "устаревших" load/unload подкоманд..

-w Переопределяет клавишу "Отключено" и устанавливает для нее значение false или true для подкоманд загрузки и выгрузки. В предыдущих версиях эта опция изменила бы конфигурационный файл. Теперь состояние ключа "Отключено" хранится в другом месте на диске в месте, которое не может быть напрямую обработано каким-либо другим процессом, кроме запуска.

Теперь я думаю... информация хранится в каталоге /var/db/com.apple.xpc.launchd.

Содержание шахты содержало несколько слоев.

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

В этом случае имена файлов относятся к идентификатору другого пользователя (501 my, 0 - root). Изменение ключей в этих файлах (как root, очевидно) СЛЕДУЕТ удалить соответствующие переопределения с помощью dark-overlord launchd.

Если нет, попробуйте отредактировать эти же файлы при загрузке до восстановления или какой-нибудь другой диск - так что вы можете возиться с ними, пока launchd не работает/неустанно пытается быть боссом.

Ответ 3

Я смог сделать это, используя Single User Mode. Шаги:

  • Выключите компьютер.
  • При запуске введите однопользовательский режим (Command + S).
  • В командной строке введите /sbin/mount -uw /
  • Отредактируйте соответствующий файл /var/db/com.apple.xpc.launchd/disabled.*.plist, удалив отключенные элементы, по желанию.
  • Введите exit.