python 连接蓝牙_『Hammerspoon』Mac 锁屏自动开关蓝牙

前言

如果你也像我一样使用 Mac 连接蓝牙耳机,下班后总是忘记关耳机,第二天耳机没电的话,那么这篇文章也许有用。

246f1c7f6e8917d156496a74a496b1d0.png

当我尝试解决上面这个问题时,写了一个 Python 脚本,但是这并不优雅,直到我找到了Hammerspoon,从此打开了新世界大门。

首先 Hammerspoon 是什么?

Hammerspoon 是 MacOS 平台上的自动化工具,它不仅仅是应用窗口管理工具,配置~/.hammerspoon/init.lua脚本可以与系统进行交互,这就让这把小锤子的可玩性极高。

000f45656665b413f4ae126a6fd3ebff.png

init.lua中,注册一系列的回调函数,当监测到事件发生,就能触发对应的回调,例如

  • 按下快捷键事件,快速切换应用;
  • Wi-Fi 连接事件,判断是否到家了;
  • USB 设备连接事件,对插上的设备进行扫描;
  • 电脑休眠和解锁事件;
  • ...

如果使用小锤子,检测到锁屏事件,那么在脚本里就可以自动地对蓝牙进行开关。

在 Mac 上用脚本控制蓝牙开关?

在 OSX 上,使用blueutil可以对蓝牙进行操作

  • 安装方式:brew install blueutil
  • 开启蓝牙:blueutil --power 1
  • 关闭蓝牙:blueutil --power 0

Put Them Together!

  • 蓝牙切换函数,这里使用 Hammerspoon 运行 Applescript 脚本,然后再在 Applescript 里运行 shell 指令
function bluetoothSwitch(state)
  -- state: 0(off), 1(on)
  cmd = "/usr/local/bin/blueutil --power "..(state)
  result = hs.osascript.applescript(string.format('do shell script "%s"', cmd))
end
  • 回调函数
function caffeinateCallback(eventType)
    if (eventType == hs.caffeinate.watcher.screensDidSleep) then
      print("screensDidSleep")
    elseif (eventType == hs.caffeinate.watcher.screensDidWake) then
      print("screensDidWake")
    elseif (eventType == hs.caffeinate.watcher.screensDidLock) then
      print("screensDidLock")
      bluetoothSwitch(0)
    elseif (eventType == hs.caffeinate.watcher.screensDidUnlock) then
      print("screensDidUnlock")
      bluetoothSwitch(1)
    end
end
  • 监测 Mac 系统睡眠锁屏等事件
caffeinateWatcher = hs.caffeinate.watcher.new(caffeinateCallback)
caffeinateWatcher:start()

安装 Hammerspoon 配置

  • 首先需要安装Hammerspoon
  • brew install blueutil
  • git clone https://github.com/wangshub/hammerspoon-config.git ~/.hammerspoon

完整参考配置链接在Github wangshub/hammerspoon-config

参考链接

  • Hammerspoon 文档
  • What is AppleScript?
  • Lua: Getting started
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值