MacBook合盖休眠后蓝牙不可用的另类解决方法

这个问题困扰了我很长时间,因为蓝牙问题,放弃机械键盘。因为蓝牙问题,放弃AirPods?

不,不,不。每次出现需要放弃我都会去谷歌一翻,每次都有新的解决方法,但是之前的解决方法没有一个能彻底解决的。

这个方法思路源自上周一次无意的测试,如果合盖前把蓝牙关掉,第二天把蓝牙开启,蓝牙依旧可用。

破天荒的想到如果我开发一个脚本,利用系统休眠的Hook来触发开启或者关闭蓝牙不就解决了吗?

但我个人不擅长OSX的开发,因此尝试用了一些工具与命令行来解决,谷歌搜了下『disable bluetooth through terminal』发现真有一些工具可以通过命令行来关闭,而且还搜索到一些工具如sleepwatcher,可以监听 系统是否休眠。

这种方法治标不治本,但是勉强可解决蓝牙不可用(非重启不可)的问题。

我的系统信息:

系统版本:MacOS High Sierra 10.13.6
MacBook Pro (Retina, 13-inch, Early 2015)
处理器:2.7 GHz Intel Core i5
内存:16 GB 1867 MHz DDR3
显卡:Intel Iris Graphics 6100 1536 MB

具体方法:

#安装blueutil,用来通过命令行开关蓝牙
brew install blueutil
#安装sleepwatcher,监控电脑休眠和唤醒时触发执行指定脚本
brew install sleepwatcher
#启动sleepwatcher服务
brew services start sleepwatcher
#通过查看进程可以知道,当触发休眠的时候会执行 ~/.sleep脚本,唤醒的时候执行 ~/.wakeup 脚本
#/usr/local/sbin/sleepwatcher -V -s ~/.sleep -w ~/.wakeup
ps aux | grep sleepwatcher
vim ~/.sleep
  1 /usr/local/bin/blueutil -p 0
  2 echo "[`date "+%Y-%m-%d %H:%M:%S"`] sleep $?" >> ~/.sleepwatcher.log
vim ~/.wakeup
  1 /usr/local/bin/blueutil -p 1
  2 echo "[`date "+%Y-%m-%d %H:%M:%S"`] wakeup $?" >> ~/.sleepwatcher.log
chmod +x ~/.sleep
chmod +x ~/.wakeup

#可以查看 ~/.sleepwatcher.log 来验证是否执行脚本


参考资料:

Turn Bluetooth On and Off from Command Line on macOSdavidwalsh.name图标Possible to run scripts on sleep and wake?apple.stackexchange.com图标解决mac合盖休眠掉电问题 - 杂粹aenes.com

编辑于 2019-08-23