惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
Y
Y Combinator Blog
博客园 - Franky
D
Docker
B
Blog RSS Feed
M
MIT News - Artificial intelligence
雷峰网
雷峰网
博客园 - 司徒正美
人人都是产品经理
人人都是产品经理
宝玉的分享
宝玉的分享
S
SegmentFault 最新的问题
GbyAI
GbyAI
Recent Announcements
Recent Announcements
Martin Fowler
Martin Fowler
H
Hackread – Cybersecurity News, Data Breaches, AI and More
MyScale Blog
MyScale Blog
B
Blog
H
Help Net Security
Microsoft Security Blog
Microsoft Security Blog
WordPress大学
WordPress大学
Vercel News
Vercel News
The Cloudflare Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Google DeepMind News
Google DeepMind News

竹林里有冰的博客

Nuxt SSG 博客的尾斜杠到底怎么加? | 竹林里有冰的博客 小米 Xiaomi Book Pro 14 (Ultra X7) Linux 兼容性实测 | 竹林里有冰的博客 国内(大陆)版小米 FCM 熄屏断连:Rootless 环境下的尝试与可能的解决方案 | 竹林里有冰的博客 我没法访问 dl.google.com —— 记一次 TUN 下的网络 debug | 竹林里有冰的博客 Vercel 的缓存控制,你注意过吗? | 竹林里有冰的博客 小记 —— Caddy 在 Layer 4 上的流量代理实践 | 竹林里有冰的博客 你的域名后缀拖慢你的网站速度了嘛?——再谈 DNS 冷启动 | 竹林里有冰的博客 DNS 冷启动:小型站点的“西西弗斯之石” | 竹林里有冰的博客 HTTP/2 Server Push 已事实性“死亡”,我很怀念它 | 竹林里有冰的博客 Nuxt Content v3 中数组字段的筛选困境与性能优化 | 竹林里有冰的博客 后 OCSP 时代,浏览器如何应对证书吊销新挑战 | 竹林里有冰的博客 初试 Github Action Self-hosted Runner,想说爱你不容易 | 竹林里有冰的博客 DNS 解析延迟毁了我的图床优化 | 竹林里有冰的博客 Vue Markdown 渲染优化实战(下):告别 DOM 操作,拥抱 AST 与函数式渲染 | 竹林里有冰的博客 Vue Markdown 渲染优化实战(上):从暴力刷新、分块更新到 Morphdom 的华丽变身 | 竹林里有冰的博客 node-sass 迁移至 dart-sass 踩坑实录 | 竹林里有冰的博客 前端中的量子力学——一打开 F12 就消失的 Bug | 竹林里有冰的博客 2025 年,如何为 web 页面上展示的视频选择合适的压缩算法? | 竹林里有冰的博客 el-image 和 el-table 怎么就打架了?Stacking Context 是什么? | 竹林里有冰的博客 2025年,前端如何使用 JS 将文本复制到剪切板? | 竹林里有冰的博客 ssh 拯救世界——通过 ssh 隧道在内网服务器执行 APT 更新 | 竹林里有冰的博客 Cudy TR3000 吃鹅(daed)记 | 竹林里有冰的博客 使用 Cloudflare Workers 监控 Fedora Copr 构建状态 | 竹林里有冰的博客 基于 Cloudflare Workers 实现的在线服务状态检测告警系统 | 竹林里有冰的博客 构建部署在 Cloudflare Workers 上的 TG Bot | 竹林里有冰的博客 2024年,Firefox 是唯一还在坚持执行在线的 SSL 证书吊销状态检查的主流浏览器 | 竹林里有冰的博客 小爱课程表适配不完全指北——以 ZJUT 本科正方教务系统为例 | 竹林里有冰的博客 将博客从 waline v2 更新到 waline v3 | 竹林里有冰的博客 给家里云装上 Fedora 41 KDE 后,我是如何配置的 | 竹林里有冰的博客 为 Hexo 添加 follow 认证 | 竹林里有冰的博客
在Windows与Linux双系统下共享蓝牙鼠标 | 竹林里有冰的博客
竹林里有冰 · 2021-05-30 · via 竹林里有冰的博客

我自己使用的鼠标是一只小米的无线蓝牙双模鼠标。但是由于我的USB接口不是很充裕,我平时还是蓝牙鼠标用的比较多。

但是,每当我在Windows和Archlinux上切换时,我不得不重新配对我的蓝牙鼠标。原因我在翻译Archwiki上关于蓝牙鼠标相关叙述时已经解释得非常清楚了,我摘在下面:

“首先,计算机保存蓝牙设备的 MAC 地址和配对密钥;然后,蓝牙设备保存计算机的 MAC 地址和配对密钥。这两步通常不会有问题,不过设备蓝牙端口的 MAC 地址在 Linux 和 Windows 上都是相同的 (这在硬件层面上就设定好了)。然而,当在 Windows 或 Linux 中重新配对设备时,它会生成一个新密钥,覆盖了蓝牙设备之前保存的密钥,即与 Windows 配对产生的密钥会覆盖原先与 Linux 配对的密钥,反之亦然。“

先在Linux上连接蓝牙鼠标,再重启到Windows重新配对蓝牙蓝牙鼠标。

微软官网下载PsExec.zip,解压后,记住你所解压的路径。

在Windows中,使用管理员权限打开cmd.exe

在Windows下使用管理员权限打开cmd在Windows下使用管理员权限打开cmd

cd到PsExec解压目录,使用如下命令将我们所需要的蓝牙密钥信息保存到C盘根目录下。

psexec.exe -s -i regedit /e C:\BTKeys.reg HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\BTHPORT\Parameters\Keys

使用psexec获取蓝牙信息使用psexec获取蓝牙信息

根目录的BTkeys.reg可以直接用记事本打开,内容大概是下面这个样子

BTkeys.regBTkeys.reg

为了方便后面的解说,我用各种颜色标注了起来。

在Linux下获取su权限以后,我们需要将Linux下随机分配给鼠标的蓝牙地址改成在Windows上获取的那个地址。上图中「红部分」划出来的就是Windows下获取的地址。

[zhullyb@Archlinux ~]$ su
Password: 
[root@Archlinux zhullyb]# cd /var/lib/bluetooth/E0\:94\:67\:74\:0D\:5F/
[root@Archlinux E0:94:67:74:0D:5F]# ls
C6:2A:1B:33:2E:71  cache  settings
[root@Archlinux E0:94:67:74:0D:5F]# mv C6\:2A\:1B\:33\:2E\:71/ C4\:F6\:B3\:2C\:BD\:7E

再编辑/var/lib/bluetooth/<本机蓝牙地址>/<鼠标蓝牙地址>/info

原文件如下:

[General]
Name=MiMouse
Appearance=0x03c2
AddressType=static
SupportedTechnologies=LE;
Trusted=true
Blocked=false
WakeAllowed=true
Services=00001530-1212-efde-1523-785feabcd123;00001800-0000-1000-8000-00805f9b34fb;00001801-0000-1000-8000-00805f9b34fb;0000180a-0000-1000-8000-00805f9b34fb;0000180f-0000-1000-8000-00805f9b34fb;00001812-0000-1000-8000-00805f9b34fb;

[IdentityResolvingKey]
Key=067764BF59A7531E978AFDC6BB5EC8E1

[LongTermKey]
Key=E3C49B4F3256018192942EB0CDDEE6A3
Authenticated=0
EncSize=16
EDiv=28209
Rand=15970850852728832717

[DeviceID]
Source=2
Vendor=10007
Product=64
Version=40

[ConnectionParameters]
MinInterval=6
MaxInterval=9
Latency=100
Timeout=600
  • 「黄色部分」LTK 对应 LongTermKey 下的 Key,把小写转换成大写并删去逗号即可。
  • 「绿色部分」ERand 对应 Rand。这里比较特殊的是,我们必须先将 Windows 中的值倒转过来再转换为 10 进制。即c2,83,7f,8f,7c,76,b4,02->02,b4,76,7c,8f,7f,83,c2->194910961239294914
  • 「蓝色部分」EDIV 对应 EDiv。把 16 进制转换成 10 进制即可,这里就不用倒转了。

具体的转换方法我不再赘述,我把我的转换过程放在下面,我相信各位读者能够看懂。

[zhullyb@Archlinux ~]$ echo 'e3,c0,b2,8e,64,2b,12,16,d8,c2,d7,d4,59,55,92,cd' | tr a-z A-Z | sed 's/[[:punct:]]//g'
E3C0B28E642B1216D8C2D7D4595592CD
[zhullyb@Archlinux ~]$ echo $((16#02B4767C8F7F83C2))    #这里我是手动倒叙的
194910961239294914
[zhullyb@Archlinux ~]$ echo $((16#000055a3))
21923

做完这些操作以后,sudo systemctl start bluetooth即可