mac可通过launchd轮询检测ssid或监听system.log触发脚本,无需图形界面和权限弹窗,重启后持续生效;推荐使用launchd方案,需创建检测脚本、赋予执行权限、配置plist文件并加载任务。

Mac连接特定Wi-Fi后自动运行脚本,需绕过系统原生限制,用轮询检测或日志监听触发执行——不依赖图形界面、不弹权限框、重启后仍生效。
用 launchd 轮询检测 SSID 并执行脚本
这是最稳定、无需第三方工具的方案,适合长期后台运行。
第一步:创建检测脚本,路径建议为 ~/bin/on-wifi-connect.sh
用文本编辑器写入以下内容(替换 【YourTargetSSID】 为你要匹配的实际 Wi-Fi 名称):
#!/bin/zsh<br>CURRENT_SSID=$(/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -I 2>/dev/null | grep ' SSID:' | sed 's/^[[:space:]]*SSID:[[:space:]]*//')<br>if [[ "$CURRENT_SSID" == "YourTargetSSID" ]]; then<br> ~/bin/my-action.sh<br>fi
注意:脚本中调用的 ~/bin/my-action.sh 必须已存在且有执行权限,否则静默失败。
第二步:赋予脚本可执行权限
chmod +x ~/bin/on-wifi-connect.sh
第三步:新建 launchd 配置文件 ~/Library/LaunchAgents/local.wifi-trigger.plist
内容如下(无需 sudo,用户级任务):
<?xml version="1.0" encoding="UTF-8"?><br><br><plist version="1.0"><br><dict><br> <key>Label</key><br> <string>local.wifi-trigger</string><br> <key>ProgramArguments</key><br> <array><br> <string>sh</string><br> <string>/Users/yourusername/bin/on-wifi-connect.sh</string><br> </array><br> <key>StartInterval</key><br> <integer>15</integer><br> <key>RunAtLoad</key><br> <true></true><br></dict><br></plist>
⚠️ 替换其中 /Users/yourusername 为你的实际家目录路径,可用 echo $HOME 确认。
第四步:加载并启动任务
launchctl load ~/Library/LaunchAgents/local.wifi-trigger.plist<br>launchctl start local.wifi-trigger
监听 system.log 实时捕获 Wi-Fi 关联事件
比轮询更及时,首次连接后约 0.5 秒内即可响应,但需确保日志级别开启。
方法一:用 tail -f 捕获 airportd 日志行
新建脚本 ~/bin/watch-airport-log.sh:
#!/bin/zsh<br>tail -f /var/log/system.log | while read line; do<br> if echo "$line" | grep -q "Associated with YourTargetSSID"; then<br> ~/bin/my-action.sh &<br> fi<br>done
这一步不能后台化运行在普通终端里——必须交由 launchd 托管,否则终端关闭即失效。
方法二:启用日志捕获权限(仅需一次)
sudo log config --mode "level:info"
方法三:为该脚本创建独立 launchd 任务(配置同上,但 ProgramArguments 改为调用此脚本)
注意:【必须授予“终端”完全磁盘访问权限】,否则 tail -f /var/log/system.log 会因隐私限制读取失败——前往「系统设置 → 隐私与安全性 → 完全磁盘访问」中勾选终端应用。
用 ControlPlane 图形化配置免写脚本
适合不想碰命令行、需要多条件组合判断(如“SSID + 蓝牙设备离线”才触发)的用户。
第一步:从官网下载 ControlPlane 最新版并安装,启动后点击菜单栏图标 → Preferences
第二步:在 Evidence Sources 标签页中,启用 WiFi Network 和(可选)Bluetooth Device
第三步:进入 Contexts 标签页,点击 + 新建上下文,命名为 “OfficeMode”,然后在下方 WiFi Network 行输入目标 SSID
第四步:切换到 Rules 标签页,添加新规则:当上下文变为 “OfficeMode” 时,执行 Shell Script 动作
第五步:在动作配置中填入完整路径,例如 /Users/yourname/bin/my-action.sh,保存后 ControlPlane 自动监听并触发











