Show HN:自动关闭 Mac OS "允许<应用>在本地网络中查找设备?"
摘要
Show HN 介绍开源工具 dontallow,一个用 Swift 编写的 macOS 代理,可自动点击拒绝反复出现的"允许应用在本地网络中查找设备"提示,并支持暂停、允许列表和规则解码等功能。
查看缓存全文
缓存时间: 2026/10/30 03:10
johncassil/dontallow
来源:https://github.com/johncassil/dontallow
dontallow
自动关闭 macOS 弹窗:
允许“Google Chrome“查找本地网络上的设备吗? 这将允许该 App 发现、连接你网络上的设备并收集相关数据。
它会在不到一秒的时间内替你点击不允许。空闲时 CPU 占用为零,重启后依然有效。仅两个简短的 Swift 文件,无任何依赖。
为什么会有这个项目
macOS(Sequoia 及更高版本)会在 App 首次访问本地网络时弹出此提示。这个决定本应被记住。但对很多 App 来说并没有,于是每次启动都会再次弹窗,而且往往是那些你根本没在用的 App:
- Chromium 系浏览器(Chrome、Brave、Edge、Island、Arc)在启动时会把自身的应用包拷贝到一个随机临时目录,以便代码签名在原地更新后仍然有效。macOS 将本地网络权限的决定绑定到那个随机路径,因此下次启动时系统会认为这是一个全新的 App。你的隐私设置里会不断堆出重复的“Google Chrome.app“条目,而这些条目早已指向不存在的位置。
- 安装路径带版本号的 App(任何安装到
.../versions/1.2.3/路径下的 App),每次更新都会新增一行。 - 弹窗归属错误。 macOS 会把对话框归到它认为“应负责“的那个 App 上,所以你会看到一些根本没在运行的 App 的提示。
- 确实有 App 合法使用该权限:浏览器和媒体播放器中的 Chromecast 与 AirPlay 发现、游戏的局域网联机、打印机和扫描仪工具。如果你用这些功能,就为该 App 选择允许(操作期间可以用
dontallow pause 10m暂停),只要该 App 的路径保持稳定,选择就会一直有效。如果你从不使用这些功能,就永远不需要被打扰。
目前没有官方支持的方法来清理这个列表,没有 MDM 配置描述文件可以预先拒绝该权限,tccutil reset 也不覆盖它。所以:让一个小代理来替你回答“不“。
安装
sh brew install johncassil/tap/dontallow # 或者:make && make install dontallow install
dontallow install 会写入一个按用户的 launchd 代理、启动它、打开“系统设置 > 隐私与安全性 > 辅助功能“,如果 macOS 没有自动弹出提示,它会打印需要添加的确切路径。辅助功能权限是让它能够点击按钮的权限。它会等待你完成授权,并在代理激活后进行确认。任何时候缺少授权,dontallow status 都会重复这些说明。
使用
| 命令 | 作用 |
|---|---|
dontallow status | 查看代理状态、暂停状态、允许列表、最近的关闭记录 |
dontallow pause [1h] | 暂时不管弹窗(30m、2h、1d、forever) |
dontallow resume | 恢复关闭弹窗 |
dontallow rules | 解码系统的本地网络规则存储,显示每条隐私记录实际对应什么,包括孤立条目 |
dontallow uninstall | 停止并移除代理 |
dontallow run --dry-run | 前台运行,记录它将要执行的操作,但不实际点击 |
每次关闭弹窗都会发送一条通知,标明 App 名称和对应的 pause 命令,因此你无需记住如何关闭它。如果不想看到通知,可在系统设置中静音。
当某个 App 确实需要本地网络访问时
三个方案,任选其一:
dontallow pause 10m,然后启动该 App 并自己点击允许。- 把该 App 的名称添加到
~/.config/dontallow/allowlist(每行一个,不区分大小写的子串匹配)。它的弹窗将永远不会被处理。 - 在“系统设置 > 隐私与安全性 > 本地网络“中切换开关。被关闭的弹窗会记录为拒绝,你可以在那里撤销。
如果希望在代理执行前留出点击允许的时间窗口,可将 ~/.config/dontallow/grace 设置为秒数(默认为 0.25)。
工作原理
弹窗是一个由系统进程 UserNotificationCenter 拥有的窗口。dontallow 在该进程上为窗口创建注册一个辅助功能观察器,然后休眠直到有事件触发。它读取对话框文本,确认这是一个本地网络提示而非其他内容,检查暂停状态和允许列表,然后对不允许按钮执行辅助功能的按下操作。如果按下操作被拒绝,它会回退到在按钮位置进行合成点击。
它从不修改系统文件,从不禁用保护机制,也从不选择允许。
企业托管的 Mac
本地网络权限无法通过 MDM 预先设置,但辅助功能可以。对于设备集群:只需构建一次,用 Developer ID 签名,分发二进制文件加一个 PPPC(隐私偏好策略控制)配置描述文件以授予其代码签名要求对应的辅助功能权限,然后每个用户运行一次 dontallow install。无需手动操作“设置“。
升级之后
macOS 将辅助功能授权绑定到二进制文件的代码签名上,而每次构建(包括 brew upgrade)都会生成新的签名。升级后运行 dontallow status。如果提示授权缺失,在辅助功能设置中移除 dontallow 条目,然后按照它打印的路径重新添加。代理会在十秒内自动重新挂载。未来使用 Developer ID 签名的版本将免除这一步骤。
测试
sh make test
单元测试覆盖纯逻辑部分(对话框文本解析、时长与暂停解析、允许列表匹配、launchd plist 生成,以及针对固定夹具存档的本地网络规则解码器)。它们使用普通的 swiftc 构建,无需 Xcode 或 SwiftPM。端到端流程(真实弹窗、真实点击)只能在已授予辅助功能权限的 Mac 上验证;手动测试步骤见 Tests/INTEGRATION.md。
兼容性
- 仅使用 Apple 的 Command Line Tools 即可构建,无需 Xcode。
- Apple Silicon 与 Intel:Homebrew 会在各自平台上原生编译。
- 构建需要 macOS 13 或更高版本;弹窗本身仅存在于 macOS 15 Sequoia 及更高版本。
- 目前已测试:Intel、macOS 26.6。欢迎反馈其他版本的情况。
- 目前仅支持英文版 macOS。匹配器依赖对话框文本和“不允许“按钮标题,本地化字符串已在计划中。
许可证
MIT
相似文章
Show HN:Hob - 开源、本地运行的 Claude Cowork 和 ChatGPT 替代方案
Hob 是 Frigade 开源的桌面应用,号称 Claude Cowork 和 ChatGPT 的本地替代方案,可自动挑选适合用户电脑的前沿开放权重模型,支持离线运行与隐私保护。
Show HN:一款适用于 iPhone、Mac 和你的 AI 代理的待办事项应用
Show HN:Nagare 是一款面向 iPhone 和 Mac 的待办事项应用,将日历事件与任务统一为同一条有序列表,并通过 MCP 将用户数据同步给 AI 助手,让代理能主动根据计划提供帮助。
@Manorgw: 每台设备都得单独配代理,烦不烦?OpenSurge for Mac 或许能省掉这堆活儿。 它能将 Mac 变成局域网里的透明代理网关,手机、电视、游戏机等设备接进来后,基本不用再一台台折腾。 ① 旁路由、DHCP 接管、独立下游 LAN,…
OpenSurge for Mac 可将 Mac 变成局域网的透明代理网关,支持旁路由/DHCP 接管/独立下游 LAN 三种模式,可直接导入 Mihomo 配置与订阅,并自带 Web GUI 管理每台设备的分流规则,免去逐台设备配置代理的麻烦。
Show HN: LookAway——一款知道何时不打扰的Mac休息提醒应用
LookAway是一款Mac应用,能智能提醒你进行屏幕休息、眨眼和改善姿势,同时避免在会议、通话或深度专注时中断。最新版本引入了计划休息、网站使用统计和屏幕评分功能。
Assist
Assist 是一款在 Product Hunt 上发布的 macOS 会议助手,隐藏在 MacBook 刘海区域,可监听会议并实时建议回复,在屏幕共享时不可见,并支持完全在本地 Mac 上运行以保护隐私。