Как я могу определить изменения plist при изменении системных настроек, чтобы в следующий раз автоматизировать их?

Я пытаюсь максимально автоматизировать процесс настройки нового ноутбука. Есть определенные изменения, которые я всегда вношу вручную на новом Mac, например, включение масштабирования экрана с помощью модификатора Ctrlи настройка сочетаний клавиш для сопоставления ⌘⌥ ← с «Выбрать предыдущую вкладку» во всех приложениях. Я уверен, что есть preferences.writeэквивалент для этого, но, черт возьми, я понятия не имею, как определить, что это такое. Могу ли я каким-то образом отслеживать или «различать» свои предпочтения после внесения изменений вручную?

~/Библиотека/Настройки/.GlobalPreferences.plist

Ответы (3)

Apple теперь хранит наиболее важные настройки в базе данных, поэтому лучше всего игнорировать файлы plist в файловой системе и сосредоточиться на выводе тех defaults read com.apple.whateverвещей, которые вы меняете. К сожалению, не существует хорошего Розеттского камня, в котором говорилось бы, что если вы находитесь в предпочтении X, ищите изменения в этих семи доменах предпочтений. Где Apple хранит iCloud или информацию о безопасности, не сопоставляется с каждым визуальным значком в системных настройках, поэтому вам нужно будет создать более одного, defaults readчтобы зафиксировать все состояние большинства панелей настроек, поскольку большинство панелей записываются более чем в один домен настроек.

В качестве альтернативы вы можете просто использовать MDM и профили конфигурации и сценарии для внесения всех изменений, чтобы вы просто передавали изменения на все машины из своего инструмента управления и полностью пропускали весь процесс обратного проектирования.

В прошлом MCX был путем к управлению корпоративными конфигурациями, и это эквивалентно вашему желанию просмотреть файлы .plist, в которых изначально хранились эти настройки на заре OS X, но текущая система профилей конфигурации, изменений в сценариях и перехватчиков MDM оставил MCX и .plist в пыльных углах, которые не были обновлены для новой центральной базы данных для хранения пользовательских и системных значений по умолчанию.

Если вы знаете файл, который изменяется, вы можете сравнить вывод до/после в терминале, чтобы найти точное имя настройки. Например:

/usr/libexec/PlistBuddy -c Print ~/Library/Preferences/.GlobalPreferences.plist > /tmp/before.txt

И, diff /tmp/before.txt /tmp/after.txtчтобы увидеть элементы, которые меняются. Но будьте осторожны, потому что, скорее всего, изменяемый параметр будет скрыт в иерархической структуре.

Если вы еще не знаете файл, который изменяется, вы можете отслеживать папку Library/Preferences с помощью, ls -lFatчтобы увидеть самые последние измененные файлы в списке первыми, и вы, вероятно, сможете определить, какой файл вас интересует, оттуда.

Лучший способ, который я нашел, это

  1. Запустить opensnoop(программа, включенная в macOS, которая показывает, какие файлы открыты)
  2. Измените настройки и посмотрите, к какой Preferencesпапке осуществляется доступ
  3. Зайдите в эту папку и отсортируйте по времени модификации
  4. defaults read file.plistни на что подозрительное.