Date
Nov 21, 2022
Description
最近总莫名其妙出宿舍忘记关台灯锁电脑, 于是便有了这篇文章
Public
Public
Published
Tags
URL
方案选择
目前我能想到的, 能准确判断我是否离开宿舍的方式便是蓝牙了
刚开始我用的一直是这个
Gnome
插件它实现了在我的
小米手环
断开了与 pc 的连接就自动锁上屏幕但是这样毕竟是
Gnome
插件, 通用性不是特别强, 而且自定义起来不是很方便所以这里也用简单的思路先实现一下这个功能吧
功能实现
这里我打算通过
bash
写个小脚本去实现判断蓝牙连接状态
这应该是最重要的部分了
我们通过
bluetoothctl
的命令来实现判断$ bluetoothctl info C1:0C:0A:02:XX:XX Device C1:0C:0A:02:XX:XX (public) Name: Mi Smart Band 6 Alias: Mi Smart Band 6 Appearance: 0x03c1 Icon: input-keyboard Paired: yes Trusted: yes Blocked: no Connected: yes LegacyPairing: no UUID: Vendor specific (00001530-0000-3512-2118-0009af100700) UUID: Generic Access Profile (00001800-0000-1000-8000-00805f9b34fb) UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb) UUID: Immediate Alert (00001802-0000-1000-8000-00805f9b34fb) UUID: Device Information (0000180a-0000-1000-8000-00805f9b34fb) UUID: Heart Rate (0000180d-0000-1000-8000-00805f9b34fb) UUID: Battery Service (0000180f-0000-1000-8000-00805f9b34fb) UUID: Alert Notification Serv.. (00001811-0000-1000-8000-00805f9b34fb) UUID: Human Interface Device (00001812-0000-1000-8000-00805f9b34fb) UUID: Unknown (00003802-0000-1000-8000-00805f9b34fb) UUID: Anhui Huami Information.. (0000fee0-0000-1000-8000-00805f9b34fb) UUID: Anhui Huami Information.. (0000fee1-0000-1000-8000-00805f9b34fb) Modalias: bluetooth:v0157p005Bd0100 ManufacturerData Key: 0x0157 ManufacturerData Value: 02 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ................ ff 03 c1 0c 0a 02 13 1d ........ RSSI: -82 AdvertisingFlags: 06 . Battery Percentage: 0x2d (45)
可以看到这里的输出, 有个
Connected
的字段我们可以通过它去判断蓝牙设备是否连接上了
锁屏
这里大家可以去翻阅你再走的桌面环境的相关命令实现
Gnome
的话可以使用 dbus
协议去调用# Lock dbus-send --session --dest=org.gnome.ScreenSaver --type=method_call --print-reply --reply-timeout=20000 /org/gnome/ScreenSaver org.gnome.ScreenSaver.SetActive boolean:true # Unlock dbus-send --session --dest=org.gnome.ScreenSaver --type=method_call --print-reply --reply-timeout=20000 /org/gnome/ScreenSaver org.gnome.ScreenSaver.SetActive boolean:false
Mac
上的话可以pmset displaysleepnow
关灯
我用的是小米台灯
可以通过
miio
协议去实现控制这里用这个项目自带的命令行工具吧
毕竟人生苦短
对
miio
协议实现感兴趣的也可以看看我的这个项目组装代码
以后有空再把它工程化吧,shell写的又不是不能用
# 自行配置 DeviceMAC="C1:0C:0A:02:XX:XX" Interval=5 # 自定义操作 action(){ echo "lock" # todo echo "Turn off my light" miiocli yeelight --ip 192.168.2.214 --token xxxxxxxxxxxxxxxx off echo "Lock my Mac Book Pro" ssh MacBook-Pro pmset displaysleepnow } export last_status="" while true ; do status=$(bluetoothctl info $DeviceMAC | grep 'Connected:' | awk -F': ' '{ print $2}') if [ "$status" == "no" ];then if [ "$last_status" == "yes" ];then action fi elif [ "$status" == "yes" ];then echo "yes" fi last_status=$status sleep $Interval done
最后
通过这几行代码就实现了预期功能了~
如果你和我一样用的也是小米手环的话
记得在
手机 APP
里开启 实验室-小米笔记本解锁
的功能然后就是记得开启蓝牙自动连接