macOS 无法图形化一键设置“连WiFi自动执行动作”,但可用轻量脚本+system命令+launchd实现静默自启;核心是用airport命令可靠获取SSID,配合networksetup操作,并显式指定网络服务名。

macOS 本身不提供图形化界面一键启用“连接某 WiFi 就自动执行动作”的功能,但可通过轻量脚本 + 系统命令 + 后台守护机制实现稳定、静默、开机即用的自动配置。核心不是写复杂程序,而是选对触发方式、用准系统命令、避开权限陷阱。
用 networksetup 检测 SSID 并执行动作
这是最通用、无需额外安装的方案,适合切换代理、挂载共享、启动服务等场景。
macOS 微信消息自动化工具。通过 GUI 自动化实现:发送消息给指定联系人、读取聊天内容、监控新消息。适用于需要自动化微信操作的场景,如定时发送、批量回复、消息备份等。依赖 peekaboo 进行屏幕截图和 UI 交互。仅支持 macOS。开源地址:https://github.com/chairmanmia...
- 获取当前 SSID 的可靠命令是:
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I | grep ' SSID:' | sed 's/^[[:space:]]*SSID:[[:space:]]*//'(比networksetup -getairportnetwork更稳定,尤其在刚连接瞬间) - 脚本中必须显式指定网络服务名(如
"Wi-Fi"),不能假设它总是存在——先运行networksetup -listallnetworkservices确认准确名称 - 若涉及
sudo networksetup修改代理或开关状态,脚本首次运行时会弹窗请求密码;后续可配合launchd配置RunAtLoad和KeepAlive实现开机自启
监听 airportd 日志实现近实时响应
相比轮询,日志监听延迟更低(通常
- 关键日志行是:
airportd[xxx]: <ssid>.*Associated with</ssid>,需用log stream --predicate 'subsystem == "com.apple.airport"' --info或传统tail -f /var/log/system.log(后者需先启用日志:sudo log config --mode "level:info") - 监听脚本需用
while read line; do ... done < <(log stream ...)结构,避免阻塞;匹配到目标 SSID 后直接调用动作脚本,不建议在监听循环里写复杂逻辑 - 该方式不依赖轮询间隔,但需确保日志服务持续运行——推荐用
launchd加载,而非放入登录项
用 ControlPlane 图形化管理多条件上下文
如果你需要同时依据 WiFi 名称、蓝牙设备、地理位置、时间等多种信号触发不同动作,ControlPlane 是更直观的选择。
- 它把“连接 Office-WiFi”当作一种“证据”,当该证据成立时,自动激活预设“上下文”,再绑定 Shell 脚本、App 启动、音量调节等动作
- 支持条件组合(例如:仅当 SSID 是 Home_5G 且蓝牙耳机已连接时才开启媒体服务器),避免单一 WiFi 触发误动作
- 配置保存在用户目录,重装系统后只需重新导入配置文件,无需重写脚本;但需手动开启“WiFi Network”证据源并授权完全磁盘访问
关键权限与调试要点
脚本写得再好,卡在权限上就毫无意义。三项检查缺一不可:
- 终端应用(如 Terminal、iTerm、Alacritty)必须加入「系统设置 → 隐私与安全性 → 完全磁盘访问权限」,否则读不到钥匙串密码、写不了网络配置
- 使用
sudo的命令,若想免密运行,需编辑/etc/sudoers添加对应命令的 NOPASSWD 条目(例如:%admin ALL=(ALL) NOPASSWD: /usr/sbin/networksetup),操作前务必备份 - 验证是否生效:用
console.app搜索脚本名或关键词(如 auto-proxy),看 launchd 是否报错;也可临时在脚本开头加logger "WiFi check fired",然后终端运行log show --last 1m | grep "WiFi check"

















