dontallow: автоотклонение диалога локальной сети macOS
Как утилита dontallow автоматически отклоняет надоедливый диалог «Allow to find devices on local networks?» в macOS Sequoia и новее.
Введение: один диалог, который бесит всех
Вы набираете код, смотрите видео или просто читаете почту — и вдруг посреди экрана всплывает:
Allow “Google Chrome” to find devices on local networks?
Вы нажимаете «Don’t Allow», потому что ничего другого не хотите. Проходит несколько дней — диалог возвращается. И снова. И снова.
Этот попап раздражает пользователей уже несколько лет: почти никогда не хочется давать это разрешение, а системной настройки, чтобы отключить его глобально, попросту не существует.
Именно так появился dontallow — маленькая open-source утилита на Swift, которая решает проблему радикально: автоматически нажимает «Don’t Allow» быстрее, чем вы успеваете заметить диалог.
Почему macOS Sequoia превратила это в кошмар
macOS Sequoia и более поздние версии показывают этот диалог при первом обращении приложения к локальной сети. Решение пользователя должно запоминаться.
Но на практике всё иначе. Существует несколько причин, по которым диалог возвращается снова и снова:
Браузеры на Chromium — главные нарушители
Браузеры Chrome, Brave, Edge, Arc и другие на базе Chromium копируют свой app bundle в случайную временную папку при каждом запуске — чтобы подпись кода сохранялась при обновлениях. macOS привязывает решение о локальной сети к этому случайному пути, поэтому каждый следующий запуск выглядит для системы как абсолютно новое приложение. В настройках Privacy накапливаются дублирующиеся записи «Google Chrome.app», которые уже никуда не указывают.
Версионированные пути установки
Приложения с версионированными путями установки (всё, что ставится в .../versions/1.2.3/) получают новую запись в Privacy при каждом обновлении.
Неправильная атрибуция диалога
macOS может «повесить» диалог на приложение, которое само по себе считается «ответственным» за запрос — и вы будете видеть всплывающее окно от приложений, которые даже не запущены.
tccutil reset не распространяется на локальную сеть.
graph TD
A[Приложение запускается] --> B{macOS проверяет путь к .app}
B --> C[Путь новый / изменился]
B --> D[Путь совпадает с прошлым]
C --> E[Показывается диалог]
D --> F[Разрешение применяется]
E --> G{Пользователь выбирает}
G --> H[Don't Allow]
G --> I[Allow]
H --> J[Диалог вернётся при след. запуске]
I --> K[Может вернуться после обновления]
Что такое dontallow и как он работает
dontallow — это минималистичная утилита с открытым исходным кодом, написанная одним Swift-файлом без сторонних зависимостей.
Она нажимает «Don’t Allow» за вас в доли секунды при каждом появлении диалога. Ноль нагрузки на CPU в режиме ожидания. Переживает перезагрузки. Один Swift-файл, никаких зависимостей.
Технический принцип работы
dontallow регистрирует Accessibility-наблюдатель за созданием окон в целевом процессе и «засыпает» до срабатывания события. Затем он читает текст диалога, проверяет, что это именно запрос локальной сети, а не что-то другое, и выполняет нажатие кнопки.
По сути, инструмент использует Accessibility API macOS — тот самый, который применяется в инструментах автоматизации интерфейса. Это легальный, официально поддерживаемый Apple способ взаимодействия с UI-элементами.
Утилита автоматически закрывает диалог через event-driven Accessibility-наблюдатель. Доступны команды: install, uninstall, status, pause, resume, rules.
Установка и первый запуск
Установка максимально проста — через Homebrew или вручную через make.
Вариант 1: Homebrew (рекомендуется)
brew install johncassil/tap/dontallow
Вариант 2: Сборка из исходников
git clone https://github.com/johncassil/dontallow.git
cd dontallow
make && make install
Активация агента
dontallow install
Команда dontallow install записывает per-user launchd агент, запускает его и открывает System Settings → Privacy & Security → Accessibility, выводя точный путь, который нужно добавить.
После этого нужно выдать программе разрешение Accessibility — macOS попросит об этом сама.
Управление утилитой
dontallow status # проверить состояние агента
dontallow pause # временно приостановить
dontallow resume # возобновить работу
dontallow uninstall # полностью удалить
dontallow rules. dontallow пропустит диалог для этого приложения и не будет нажимать «Don’t Allow».Сравнение: dontallow vs альтернативные подходы
Помимо dontallow, существуют и другие способы справиться с раздражающим диалогом. Рассмотрим их:
| Метод | Автоматизация | Безопасность | Сложность | После перезагрузки |
|---|---|---|---|---|
| dontallow | ✅ Полная | ✅ Whitelist | 🟢 Простая | ✅ Да |
| Ручное «Don’t Allow» | ❌ Нет | ✅ Контроль | 🟢 Просто | ❌ Повторяется |
| Little Snitch | ✅ Частичная | ✅ Гранулярно | 🔴 Сложная | ✅ Да |
| Удаление plist-файла | ❌ Нет | ⚠️ Риск | 🔴 Сложная | ❌ Может сбросить |
defaults write (IP-диапазоны) | ⚠️ Частичная | ⚠️ Не гарантия | 🟡 Средняя | ✅ Да |
| Hammerspoon-скрипт | ✅ Возможно | ✅ | 🔴 Высокая | ⚠️ Требует настройки |
Little Snitch — значительно более мощный инструмент с реальным гранулярным контролем, а не размытым разрешением «да/нет». Но для большинства пользователей это избыточно.
На типичном Mac этот доступ нужен лишь утилитам для принтера/сканера, медиасерверу или LAN-инструментам — и для них достаточно разрешить один раз.
Вопрос приватности: правильно ли блокировать это разрешение?
Диалог «Allow to find devices on local networks?» — это не просто раздражение. За ним стоит реальный вопрос приватности.
Главная проблема диалогов разрешений — отсутствие технических деталей о том, что именно приложение пытается сделать. Как решить: разрешить или запретить, если непонятно, что это означает на практике?
Доступ к локальной сети позволяет приложению:
- Обнаруживать устройства через Bonjour/mDNS
- Подключаться к локальным серверам
- Собирать данные о топологии вашей домашней/офисной сети
Для Google Chrome или Slack это разрешение, как правило, не нужно для базовой работы браузера или мессенджера. Однако для Plex, медиасерверов, устройств умного дома или приложений для печати — оно необходимо.
dontallow rules, чтобы добавить в белый список приложения, которым локальная сеть действительно нужна (принтер, NAS, Plex). Все остальные пусть получают автоматический «Don’t Allow» — это разумная политика безопасности по умолчанию.Технический контекст: баги macOS Sequoia
Стоит отметить, что часть проблем лежит на стороне Apple. Некорректное поведение с правами локальной сети стабильно воспроизводилось на Sequoia 15.1 и иногда на 15.0/15.0.1.
Проблема, по имеющимся данным, была исправлена в Sequoia 15.2. Однако она снова проявилась в macOS Sequoia 15.3.
Даже в сообществе разработчиков Apple этот вопрос остаётся болезненным: на некоторых машинах сетевая коммуникация через приложение просто перестаёт работать спустя время, и расследование показывает, что проблема связана с управлением Local Network Privacy.
В версии v0.1.1 dontallow получил ряд улучшений: исправлена ошибка с путём установки, добавлена пошаговая настройка Accessibility при install и status, усилена защита уведомлений от AppleScript-инъекций, добавлены unit-тесты.
Заключение: маленький инструмент, большое облегчение
dontallow — образцовый пример unix-философии: делать одну вещь, но делать её идеально. Один Swift-файл, event-driven архитектура, ноль зависимостей, ноль нагрузки на CPU — и полное избавление от диалога, который прерывает вашу работу.
Инструмент не решает корневую причину (это задача Apple), но решает проблему пользователя здесь и сейчас. При этом он достаточно умён, чтобы не блокировать приложения из белого списка — те, которым доступ к локальной сети действительно нужен.
Лучшее решение — то, которое не требует вашего внимания вообще. dontallow именно такой.
Ссылки: