「这是我参与2022首次更文挑战的第10天,活动详情查看:2022首次更文挑战」。
作者:Mintimate
Mintimate's Blog,只为与你分享
前言
macOS盖屏后,有时候还是保持蓝牙和Wi-Fi的连接,待机待着没电了?
如何让macOS盖屏后,自动关闭Wi-Fi和蓝牙,在唤醒时又自动开启蓝牙和Wi-Fi呢?
很简单,部署一个脚本,再合盖睡眠时候自动关闭蓝牙和Wi-Fi,在唤醒时候打开即可。
知识储备
其实,并不是什么高端的方法,主要是使用Homebrew实现,Homebrew主要有三个库:
brew
:这个是Homebre最初的库,维护其他库。Homebrew-core
:Homebrew的核心库,大部分的软件、工具包都是由这个仓库进行安装。Homebrew-cask
:Homebrew的预编译库,部分软件,或者非主流版本,由这个仓库进行安装。
一般的主流第三方源,比如:阿里源、网易源和清华源等,都有上述三个库,但是其实还有其他库,有些第三方源没有。
比如:Homebrew-service库->github.com/Homebrew/ho…
这个库的作用很简单:通过launchctl
,进而管理macOS的后台任务和开机任务。
launchctl
用过Linux的小伙伴,可能会知道Linux上的systemctl
,使用这个工具,可以挂起后台任务,设置开机自启等等。
什么?你还不知道,或者不了解
systemctl
?没事,下次给大家介绍。(又挖一个坑~~)
launchctl使用有点复杂(可能是因为习惯了systemctl?)
当然,你也可以看官方文档:support.apple.com/zh-cn/guide…
但是我觉得,官方文档,写的就不是很详细和友好了。总的来说:
- launchctl使用
.plist
文件作为配置文件,配置文件存放地址,参考下文表格。 - launchctl实际上是用来管理launchd的。作用和systemctl类似。
文件夹 | 用途 |
---|---|
/系统/资源库/LaunchDaemons | Apple 提供的系统守护进程 |
/系统/资源库/LaunchAgents | Apple 提供的基于每个用户且所有用户适用的代理 |
/资源库/LaunchDaemons | 第三方系统守护进程 |
/资源库/LaunchAgents | 基于每个用户且所有用户适用的第三方代理 |
~/资源库/LaunchAgents | 仅适用于登录用户的第三方代理 |
有机会,和大家介绍介绍怎么手写;现在,我们可以使用Homebrew-service进行配置。
部署脚本
首先下载这个脚本到本地:SleepAndAutoBluetoothAndWifi
脚本修改自:github.com/dreamncn/Sl…
你也可以使用Git
克隆项目到本地,结果一样。
之后打开Terminal,使用cd
命令进入解压好的文件夹内。
Opt1:Homebrew安装(推荐)
前文有讲解,Homebrew的Homebrew-service,使用Homebrew安装就是用Homebrew-service进行包管理:
我们进入终端内,运行脚本:
zsh install.sh
之后就安装完成了。盖下屏幕。等5min后打开屏幕,看看在解锁前,状态栏上的Wi-Fi是否为关闭状态,是则为脚本启动成功。
Opt2:配置安装(不推荐)
相信还是有极少部分macOS用户是没安装Homebrew,这边提供手动安装的方式,但是不推荐。主要原因:
- 配置安装,不方便管理包(尤其是卸载的时候)
- macOS区分架构,配置安装需要区分
这边脚本里为半自动配置,未测试:
我们进入终端内,运行脚本:
zsh install-without-brew.sh
之后就安装完成了。盖下屏幕。等5min后打开屏幕,看看在解锁前,状态栏上的Wi-Fi是否为关闭状态,是则为脚本启动成功。
你也可以手动配置.plist
文件,其实就在项目内:
底层原理
原理很简单,依赖两个工具包:
Sleepwatcher是两个自动脚本服务,分别是:
- ~/.sleep
- ~/.wakeup
也就是自动在macOS睡眠和唤醒执行的脚本。配合blueutil
来实现对Wi-Fi和蓝牙的控制,实现macOS自动睡眠关闭Wi-Fi和蓝牙,唤醒打开。
如何卸载
运行uninstall.sh
脚本即可。 或者手动删除相关文件:
Homebrew方法安装:
brew services stop sleepwatcher
brew uninstall sleepwatcher
brew uninstall blueutil
cd ~
sudo rm -rf .sleep
sudo rm -rf .wakeup
非Homebrew方法安装:
sudo launchctl unload /Library/LaunchDaemons/de.bernhard-baehr.sleepwatcher-20compatibility-localuser.plist
sudo launchctl kill sleepwatcher
sudo rm -rf /Library/LaunchDaemons/de.bernhard-baehr.sleepwatcher-20compatibility-localuser.plist
sudo rm -rf /usr/local/sbin/sleepwatcher
sudo rm -rf /usr/local/bin/blueutil
sudo rm -rf /usr/local/share/man/man8/sleepwatcher.8
sudo rm -rf .sleep
sudo rm -rf .wakeup
END
这就是本次分享的内容了嗷。主要就是介绍这些。有机会,深度讲解讲解Linux上的systemctl
,以及macOS上的launchctl
。
真不错,又挖坑了~~