『Hammerspoon』Mac 鎖屏自動開關藍牙
前言
如果你也像我一樣使用 Mac 連接藍牙耳機,下班後總是忘記關耳機,第二天耳機沒電的話,那麼這篇文章也許有用。
當我嘗試解決上面這個問題時,寫了一個 Python 腳本,但是這並不優雅,直到我找到了 Hammerspoon,從此打開了新世界大門。
首先 Hammerspoon 是什麼?
Hammerspoon 是 MacOS 平臺上的自動化工具,它不僅僅是應用窗口管理工具,配置 ~/.hammerspoon/init.lua
腳本可以與系統進行交互,這就讓這把小錘子的可玩性極高。
在 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
參考鏈接
最後
歡迎關注我的公衆號 【神奇的戰士】