AppleScript 不能直接开关 macOS 蓝牙,需调用 blueutil 等命令行工具实现:安装 blueutil 后用 --power 参数控制,或通过 defaults 写入偏好并 killall blued;推荐 blueutil 方案,避免 UI 自动化陷阱。

AppleScript 本身不能直接开关 macOS 蓝牙,但它可以作为“调度器”调用系统底层命令或工具,实现自动化控制。核心逻辑是:AppleScript 不操作蓝牙服务本身,而是执行 shell 命令(如 blueutil、defaults 写入偏好、或触发系统事件),再由这些命令真正启停蓝牙模块。
依赖 blueutil 的可靠方式
这是目前最稳定、兼容性最好的方案,需先安装 blueutil:
- 终端运行:
brew install blueutil(需 Homebrew) - 开启蓝牙:
do shell script "/usr/local/bin/blueutil --power 1" - 关闭蓝牙:
do shell script "/usr/local/bin/blueutil --power 0" - 可加判断:用
blueutil --power获取当前状态(返回 0 或 1),再决定执行哪条命令
绕过 GUI 的系统级控制(无需第三方工具)
macOS 原生支持通过 AppleScript 调用系统设置偏好,但仅限于启用/禁用开关,不保证立即生效:
- 写入偏好文件:
do shell script "defaults write /Library/Preferences/com.apple.Bluetooth ControllerPowerState -int 1"(开)或-int 0(关) - 需配合重启蓝牙守护进程:
do shell script "sudo killall blued"(需管理员权限) - 注意:该方法修改的是全局配置,可能受 MDM 策略限制,且部分 macOS 版本(如 Sequoia)对
/Library/Preferences写入更严格
结合 Hammerspoon 或 Automator 的实用链路
AppleScript 很少单独使用,常嵌入更高层自动化中:
- 在 Hammerspoon 的
init.lua中,用hs.osascript.applescript(...)执行上述 blueutil 命令 - 在 Automator 应用程序中,添加“运行 AppleScript”动作,封装为一键双击脚本
- 搭配锁屏事件:监听
screensDidLock后自动关蓝牙,screensDidUnlock后自动开——此时 AppleScript 是执行环节,不是触发源
注意事项与常见陷阱
直接用 AppleScript 模拟点击菜单栏图标或系统设置界面,既不可靠也不推荐:
- UI 元素位置随 macOS 版本变动,脚本极易失效
- 需要开启“辅助功能”权限,且每次系统更新后常需重新授权
- 无法处理蓝牙服务未响应、设备缓存异常等底层问题
- 真正有效的自动化,应基于命令行接口(blued、blueutil)而非图形界面模拟


















