Firefox и полиси
На выходных посидел с 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
отключают и включают полиси. Дело в том,
что пока они включены, вы не можете обновиться даже если захотите — функция
запрещена. Чтобы это сделать, отключите полиси, перезапустите браузер,
обновитесь, затем снова включите. На короткое время ужаснитесь тому, как жили
раньше: браузер выплюнет сто попапов, что пора обновиться, сделать его главным
по умолчанию, а вот здесь у нас новая менюшка, а вот новое расширение, ну и все
такое.
В общем, разобраться с полиси было полезно. По аналогии с Емаксом и прочими утилитами, я храню конфиг в дотфайлах и синхронизирую через Гитхаб. Опасение вызывает лишь то, что полиси все еще на этапе разработки. Не ровен час, обновишься — и все слетит.
Вроде бы хороший конец, но все равно — с толикой грусти. Эта борьба вызвана тем, что некие придурки спрятали опции из интерфейса. Не будь придурков — не было бы суеты, конфигов и прочего. Энтропия и трение — вот есть то, что здесь описано.
Напоследок — ссылки:
Нашли ошибку? Выделите мышкой и нажмите Ctrl/⌘+Enter
Oh, 14th Mar 2024, link
Интересно, спасибо!