『Hammerspoon』Mac 鎖屏自動開關藍牙


『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

參考鏈接

最後

歡迎關注我的公衆號 【神奇的戰士】

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章