На выходных посидел с Firefox. Понял, как заблокировать обновления, а также много чего другого.

Если коротко: демократия закончилась. Начиная с какой-то версии Firefox перешел на систему полиси для расширенных настроек. Редактор about:config по-прежнему работает, но нужно понимать: многие опции теперь — бутафория. Можете до посинения что-то включать и выключать, эффекта не будет.

Теперь Firefox работает с полиси. Это JSON-файл с директивами, которые включают ту или иную функцию. По сравнению с about:config преимущество в коллекциях: в полиси можно задать массив объектов, например, для настройки расширений или mime-типов, а в about:config все было плоским.

Полиси описаны в формате JSON, но на Маке используется яблочный формат plist. Может быть, JSON тоже можно, но я не проверял.

Преимущество полиси в том, что можно задать поведение браузера до последних мелочей. И все это — в текстовом файле, который хранится в Github. Не нужна облачная учетка для синхронизации — вы сами решаете, как раскидывать файл по машинам. Я положил в приватный dotfiles, но приведу копию ниже.

Firefox не пытается оспорить то, что указано в полиси. Если сказано не ставить обновления — он не ставит. Сказано не проверять браузер по умолчанию — не проверяет. Никаких попапов, бейджей, нотификаций, алертов, всплывающих полосок и прочей ахинеи.

Теперь технические шаги. Все примеры будут под мак; на другие системы, думаю, переложить будет не трудно.

Firefox ищет полиси в разных местах, но самое очевидное — файл ~/Library/ Preferences/org.mozilla.firefox.plist. Опция EnterprisePoliciesEnabled означает, использовать ли полиси или пропускать их. Установите ее в истину командой:

defaults write ~/Library/Preferences/org.mozilla.firefox EnterprisePoliciesEnabled -bool  TRUE

Обратите внимание, что расширение .plist указывать не нужно.

Чтобы выключить обновления, задайте DisableAppUpdate в истину:

defaults write ~/Library/Preferences/org.mozilla.firefox DisableAppUpdate -bool true

Перезапустите браузер и откройте About Firefox или настройки — там будет следующее:

Обновления запрещены, никто не пройдет.

Список полиси можно посмотреть во вкладке about:policies. Выглядит так:

Назревает два вопроса. Первый: как узнать, какие полиси есть в принципе и их значения? Второй: ты предлагаешь вводить их в консоли вручную?

Полный список полиси находится на этой странице, и он довольно велик. Проще скачать заголовку под вашу систему и поправить руками. Названия директив говорят сами за себя.

По второму пункту — разумеется, нужно создать файл в редакторе, но в случае с plist есть нюанс. Файлы plist бывают двух форматов: текстовый и бинарный. В первом случае это XML с тегами <plist>, <dict> и <key>. Во втором случае там байты вперемешку с текстом.

Беда в том, что Firefox работает только с бинарным plist: если положить текстовый, он его игнорирует. Бинарник можно поправить в XCode, но это неудобно: не станете же вы хранить бинарь в Github и редактировать программой, которой нужно 15 гигов. К счастью, утилита plutil умеет импорт-экспорт, а заодно проверяет формат на корректность.

У меня получилась папка в dotfiles со следующими файлами. Прежде всего это org.mozilla.firefox.plist, который я выложил в Gist. Вот неполный список того, что он делает:

  • отключает обновления
  • отключает проверку браузера по умолчанию
  • отключает менеджер паролей, мастер-пароль
  • отключает Pocket
  • убирает партнерские ссылки, top-sites и прочий шлак на главной
  • открывает PDF-файлы в Preview.app. Для меня это важно, потому что встроенные
  • открывашки PDF, как правило, убогие
  • отключает всякий трекинг и фингерпринт
  • включает запросы нотификаций, локиции
  • блокирует попапы
  • отключает “что новенького”, рекомендованные расширения, фичи.

Второй файл — конфиг Make, чтобы управлять конфигурацией. Он короткий, приведу полностью:

DOMAIN = ~/Library/Preferences/org.mozilla.firefox.plist
SOURCE = org.mozilla.firefox.plist

policy-import: policy-check
 defaults import ${DOMAIN} ${SOURCE}

policy-false:
 defaults write ${DOMAIN} EnterprisePoliciesEnabled -bool FALSE

policy-true:
 defaults write ${DOMAIN} EnterprisePoliciesEnabled -bool TRUE

policy-check:
 plutil ${SOURCE}

Команда policy-import переносит настройки из текстового .plist-файла в бинарный в домашней папке. Она зависит от policy-check, которая проверяет конфигурацию на корректность.

Команды policy-false и policy-true отключают и включают полиси. Дело в том, что пока они включены, вы не можете обновиться даже если захотите — функция запрещена. Чтобы это сделать, отключите полиси, перезапустите браузер, обновитесь, затем снова включите. На короткое время ужаснитесь тому, как жили раньше: браузер выплюнет сто попапов, что пора обновиться, сделать его главным по умолчанию, а вот здесь у нас новая менюшка, а вот новое расширение, ну и все такое.

В общем, разобраться с полиси было полезно. По аналогии с Емаксом и прочими утилитами, я храню конфиг в дотфайлах и синхронизирую через Гитхаб. Опасение вызывает лишь то, что полиси все еще на этапе разработки. Не ровен час, обновишься — и все слетит.

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

Напоследок — ссылки: