ubuntu+windows双系统切换后蓝牙设备无法连接

最近在安装ubuntu+Windows双系统后,电脑连接蓝牙出现了问题,每次切换系统之后都要把原来储存的蓝牙信息删除才能再次连接。

这是因为蓝牙设备的配对信息存储在操作系统中。当从一个系统(如 Windows)切换到另一个系统( Ubuntu)时,设备识别到配对信息不一致,导致连接失败。

想要解决这个问题有两种方法,一种是在ubuntu系统中把蓝牙设备的信息改成和Windows中的一样,第二种是在Windows中把信息改成和ubuntu的一样。

由于懒得改Windows的注册表,所以选择第一种方法。

提前准备

  1. 进入你的ubuntu系统,将蓝牙设备与 Linux 系统进行配对, 留下设备信息, 完成后重启系统引导至 Windows
  2. 将蓝牙设备与 Windows 系统进行配对, 留下设备信息。

获取 Windows 下蓝牙设备信息

  1. 在微软官方文档网站下载 PsExec. 我们可以使用这个工具来获得Windows注册表内的蓝牙设备信息
  2. 解压 PSTools.zip 压缩包至合适目录下
  3. 以管理员身份打开终端并进入这个目录。比如你解压到了C:\Program Files\PSTools
c:
cd C:\Program Files\PSTools
  1. 输入如下命令,将注册表内有关信息导出保存到 C:\BTKeys.reg 中
    因为Windows终端默认不会从当前位置加载命令,所以加上.\表示信任此命令。
.\psexec -s -i regedit /e C:\BTKeys.reg HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\BTHPORT\Parameters\Keys
  1. 复制 C:\BTKeys.reg 到 ubuntu分区 或 U盘 内,当然也能在ubuntu中挂载C盘,反正确保你在ubuntu系统中能够读取到这个文件即可

在ubuntu中修改蓝牙配置

Windows的BTKeys.reg格式

用任意文本编辑器打开BTKeys.reg 文件,会看到里面的格式类似这样,具体参数会不一样。

Windows Registry Editor Version 5.00[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\BTHPORT\Parameters\Keys][HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\BTHPORT\Parameters\Keys\ffffffffffff]"MasterIRK"=hex:00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\BTHPORT\Parameters\Keys\ffffffffffff\00000000000]"LTK"=hex:f3,13,02,86,20,9d,04,12,c0,1e,8e,cb,fb,e9,04,1b"KeyLength"=dword:00000010"ERand"=hex(b):18,57,93,eb,5f,b2,15,2e"EDIV"=dword:0000ecb0"IRK"=hex:a0,8d,5a,98,34,41,31,3f,00,72,c9,f8,95,5f,fa,d5"Address"=hex(b):27,d5,bb,fc,5a,eb,00,00"AddressType"=dword:00000001"CSRK"=hex:bc,70,a8,79,7c,35,9e,9a,3f,0d,d7,f7,70,64,44,a4"OutboundSignCounter"=dword:00000000"MasterIRKStatus"=dword:00000001"AuthReq"=dword:0000002d[HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\BTHPORT\Parameters\Keys\ffffffffffff\1111111111111]"LTK"=hex:88,0f,f4,8d,11,db,33,28,36,54,06,cd,a6,27,a2,64"KeyLength"=dword:00000010"ERand"=hex(b):38,bb,05,08,11,91,f1,8b"EDIV"=dword:0000882b"MasterIRKStatus"=dword:00000001"AuthReq"=dword:0000002d

从含有中括号 [ ] 的行至下一个含有中括号 [ ] 的行前是一个蓝牙设备的配置信息
如:

第 9 行 [ …\Keys\ffffffffffff] 的 ffffffffffff 就是该主机蓝牙控制器的十六位地址

第 15 行 [ …\Keys\ffffffffffff\000000000000] 的 000000000000 就是一个蓝牙设备的十六位地址,至第 40 行是该设备的配置信息

第 41 行 [ …\Keys\ffffffffffff\1111111111111] 的 1111111111111 就是另一个蓝牙设备的十六位地址,至第 53 行是该设备的配置信息

Linux 下设备蓝牙信息

在任意位置打开 ubuntu 的终端,进入管理员权限

sudo su

键入命令(以 root 用户身份),进入蓝牙信息的目录,并查看里面的文件夹。

cd /var/lib/bluetooth/
ls

会看到一个地址

FF:FF:FF:FF:FF:FF // 该文件夹名称对应之前获取的该主机蓝牙控制器的十六位地址

进入这个目录(小技巧,在cd后面按Tab键会自动帮你填好),再输入ls查看

cd FF:FF:FF:FF:FF:FF

假如这两个蓝牙设备都在你的ubuntu上连接过的话,会出现这样的信息,
00:00:00:00:00:01 11:11:11:11:11:12是两个蓝牙设备的信息,具体数字因人而异,如果你只连过一个设备的话,就只有一个地址。

00:00:00:00:00:01 11:11:11:11:11:12 cache settings

文件夹 00:00:00:00:00:01 和 11:11:11:11:11:12 则是 Linux 下两个蓝牙设备的十六位地址(和Windows的数有一位数字的偏差)

修改蓝牙配置文件夹名称

我们需要将两个文件夹的名称改为 Windows 下同一设备的地址,比如同一个设备在Windows上是00:00:00:00:00:00,在ubuntu上是00:00:00:00:00:01,则把ubuntu上的文件夹名更改。
再ls查看是否更改成功。

mv 00:00:00:00:00:01 00:00:00:00:00:00
ls

进入这个改好的目录,并使用任意文本编辑器打开里面的info文件

cd 00:00:00:00:00:00
ls 

这里列举了几个常用的文本编辑器。

  1. 使用 vim
    vim info
  2. 使用 gedit
    gedit info
  3. 使用 code(VS Code)
    code info
  4. 使用 subl(Sublime Text)
    subl info

打开后能看到这样格式的代码(比Windows的好看很多(bushi))

[General]
Name=Ergonomic Keyboard
Appearance=0x03c1
AddressType=static
SupportedTechnologies=LE;
Trusted=true
Blocked=false
WakeAllowed=true
Services=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;
Alias=Ergonomic Keyboard[ConnectionParameters]
MinInterval=12
MaxInterval=12
Latency=20
Timeout=200[DeviceID]
Source=2
Vendor=1118
Product=2071
Version=308[IdentityResolvingKey]
Key=A08D5A983441313F0072C9F8955FFAD5[LocalSignatureKey]
Key=BC70A8707C359E9A3F0DD7F770444A04
Counter=0
Authenticated=true[LongTermKey]
Key=F3130286209D0412C01E8ECBFBE9041B
Authenticated=1
EncSize=16
EDiv=60592
Rand=3320756425299547928

配置项中, Linux 下名称和 Windows 下名称对应为

[IdentityResolvingKey] <=> “IRK”
[LocalSignatureKey] <=> “CSRK”
[LongTermKey] <=> “LTK”
EncSize ([LongTermKey]下) <=> “KeyLength”
EDiv ([LongTermKey]下) <=> “EDIV”
Rand ([LongTermKey]下) <=> “ERand”

但是由于二者的进制编码不同,所以需要进行进制转换后才能更改info的信息。

对应数值转换

用终端把 BTKeys.reg 内的数值转换后修改对应 info 文件下的数值

“IRK”项 只保留字母数字,且字母小写转大写

echo "a0,8d,5a,98,34,41,31,3f,00,72,c9,f8,95,5f,fa,d5" | tr a-z A-Z | sed "s/[[:punct:]]//g"

“CSRK”项 只保留字母数字,且字母小写转大写

echo "bc,70,a8,79,7c,35,9e,9a,3f,0d,d7,f7,70,64,44,a4" | tr a-z A-Z | sed "s/[[:punct:]]//g"

“LTK”项 只保留字母数字,且字母小写转大写

echo "f3,13,02,86,20,9d,04,12,c0,1e,8e,cb,fb,e9,04,1b" | tr a-z A-Z | sed "s/[[:punct:]]//g"

“KeyLength”项 只保留数字,且十六进制转十进制

echo $((16#00000010))

“EDIV”项 只保留字母数字,且十六进制转十进制

echo $((16#0000ecb0))

“ERand”项 只保留字母数字,且以逗号相隔为一组,各组逆序排列后所得十六进制转十进制

echo $((16#2e15b25feb935718))

“IRK”的数值需修改 [IdentityResolvingKey] 下一行的 key

同理修改 [LocalSignatureKey] 和 [LongTermKey]

EncSize ,EDIV 和 Rand 找到其对应名称修改即可

若未在 BTKeys.reg 的某一设备中发现某一配置,不用着急,找出其存在的配置即可。因为 Linux 下 info 文件里也不需要该未出现的配置

修改完一个蓝牙设备后记得保存info文件的更改。
如果需要更改多个蓝牙设备的话,进入另外一个目录修改另一个蓝牙设备的 info 文件。

重启蓝牙服务

修改完毕后,重启蓝牙服务,此时蓝牙设备应该能够正常在 Linux 系统下使用且不用重新配对也能够在重启后引导至 Windows 系统下使用

sudo systemctl restart bluetooth

参考链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/19210.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

SpringCloud多机部署,负载均衡-LoadBalance

一.负载均衡 1.1问题描述 //根据应用名称获取服务列表 List<ServiceInstance> instancesdiscoveryClient.getInstances("product-service"); //一个微服务可能有多个实例&#xff0c;获取第一个 EurekaServiceInstance instance(EurekaServiceInstance)insta…

基于Java Springboot甘肃旅游管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…

软考-信息安全-网络安全体系与网络安全模型

4.1 网络安全体系概述 网络安全保障是一项复杂的系统工程&#xff0c;是安全策略&#xff0c;多种技术&#xff0c;管理方法和人员安全素质的综合。 4.1.1 网络安全体系概念 现代的网络安全问题变化莫测&#xff0c;要保障网络系统的安全&#xff0c;应当把相应的安全策略&a…

CSS基础选择器与div布局

基础选择器一 全局选择器 可以与任何元素匹配&#xff0c;优先级最低&#xff0c;不推荐使用 *{margin: 0;padding: 0;}元素选择器 HTML文档中的元素&#xff0c;p、b、div、a、img、body等。 标签选择器&#xff0c;选择的是页面上所有这种类型的标签&#xff0c;所以经常…

Python毕业设计选题:基于Spark的国漫推荐系统的设计与实现-django+spider

开发语言&#xff1a;Python框架&#xff1a;djangoPython版本&#xff1a;python3.7.7数据库&#xff1a;mysql 5.7数据库工具&#xff1a;Navicat11开发软件&#xff1a;PyCharm 系统展示 系统登录 管理员功能界面 漫画数据管理 看板界面 系统管理 摘要 系统的设计主要包括…

Linux 链式与层级中断控制器讲解:原理与驱动开发

往期内容 本专栏往期内容&#xff0c;interrtupr子系统&#xff1a; 深入解析Linux内核中断管理&#xff1a;从IRQ描述符到irq domain的设计与实现Linux内核中IRQ Domain的结构、操作及映射机制详解中断描述符irq_desc成员详解Linux 内核中断描述符 (irq_desc) 的初始化与动态分…

“数字化”让党建更“智慧”:帆软塑造党建发展新动能

智慧党建是新时代党的建设的重要创新&#xff0c;它通过互联网、大数据、云计算和人工智能等现代信息技术&#xff0c;实现了党建工作的数字化、智能化。帆软公司的Fine产品线&#xff0c;包括FineDataLink、FineReport、FineVis和FineBI&#xff0c;提供了一个全面的大数据分析…

利用c语言详细介绍下冒泡排序

软件开发过程中&#xff0c;排序算法是常规且使用众多的方法之一&#xff0c;而冒泡算法又是排序算法中最常规且基本的算法。今天我们利用c语言&#xff0c;图文详细介绍下冒泡算法。 一、图文介绍 我们输入一个数组&#xff0c;数组为【10&#xff0c;5&#xff0c;3&#xf…

小程序-基于java+SpringBoot+Vue的实习生管理系统设计与实现

项目运行 1.运行环境&#xff1a;最好是java jdk 1.8&#xff0c;我们在这个平台上运行的。其他版本理论上也可以。 2.IDE环境&#xff1a;IDEA&#xff0c;Eclipse,Myeclipse都可以。推荐IDEA; 3.tomcat环境&#xff1a;Tomcat 7.x,8.x,9.x版本均可 4.硬件环境&#xff1a…

全新升级抗性宏基因组,直击病毒和毒力因子分析!

基于宏基因组测序的抗性基因分析是目前抗性基因分析的重要手段。为了协助研究工作者对抗性基因开展更深入且全面的探研&#xff0c;凌恩生物技术团队致力于技术研发&#xff0c;推出了全新升级版的宏基因组抗性基因分析流程。此流程采用五大数据库进行详尽的注释分析&#xff0…

算法--“汽车加油”问题.

def greedy():n 100 # 汽车满油后可行驶的最大距离d [50, 80, 39, 60, 40, 32] # 加油站的距离k len(d) # 加油站的数量# 检查是否有加油站距离超过汽车的最大行驶距离for dist in d:if dist > n:print(no solution)returnnum 0 # 加油次数current_position 0 # 当…

细说STM32单片机DMA中断收发RTC实时时间并改善其鲁棒性的方法

目录 一、DMA基础知识 1、DMA简介 (1)DMA控制器 (2)DMA流 (3)DMA请求 (4)仲裁器 (5)DMA传输属性 2、源地址和目标地址 3、DMA传输模式 4、传输数据量的大小 5、数据宽度 6、地址指针递增 7、DMA工作模式 8、DMA流的优先级别 9、FIFO或直接模式 10、单次传输或突…

HTTP 缓存策略

文章目录 一、HTTP的缓存的过程是怎样的&#xff1f;二、什么时候触发强缓存或协商缓存强缓存ExpiresCache-Control 协商缓存 三、服务器如何判断资源是否新鲜Last-Modified/If-Modified-SinceETag/If-None-Match 四、整体缓存过程 一、HTTP的缓存的过程是怎样的&#xff1f; …

Leetcode234.回文链表(HOT100)

链接 代码&#xff1a; class Solution { public:bool isPalindrome(ListNode* head) {ListNode* slow head;ListNode* fast head;// while(slow&&fast){// slow slow->next;// fast fast->next;// if(fast)// {// fast fast->…

【Unity Dots之Ecs原理分析(无入门代码示例)】

Unity Ecs原理分析 前言一、ECS是什么&#xff1f;Entity是什么&#xff1f;Component是什么&#xff1f;System是什么&#xff1f;不得不提的Archetype为什么时16kb&#xff1f; 什么是Structural Change&#xff1f;ASpect有关ECS使用时的安全性Conversion World & Shado…

【pyspark学习从入门到精通14】MLlib_1

目录 包的概览 加载和转换数据 在前文中&#xff0c;我们学习了如何为建模准备数据。在本文中&#xff0c;我们将实际使用这些知识&#xff0c;使用 PySpark 的 MLlib 包构建一个分类模型。 MLlib 代表机器学习库。尽管 MLlib 现在处于维护模式&#xff0c;即它不再积极开发…

【大模型推理】all-reduce

https://andrew.gibiansky.com/blog/machine-learning/baidu-allreduce/#ref-4 1. ALL reduce , reduce, broadcast 概念 Introduction 在过去的几年中&#xff0c;神经网络已经被证明是解决各种问题的令人难以置信的有效工具&#xff0c;并且在规模和计算需求上都迅速增长。…

opencv(c++)---自带的卷积运算filter2D以及应用

opencv(c)—自带的卷积运算filter2D以及应用 #include <opencv2/opencv.hpp> #include<iostream>using namespace cv; using namespace std;int main() {Mat imgin, imgout;imgin imread("D:/1234.png");if (imgin.empty()){cout << "Could …

C++20中的Concepts与TypeScript

C20中的Concepts与TypeScript 大家好&#xff01;上一篇聊了C20中概念&#xff08;Concepts&#xff09;&#xff0c;这是一个非常赞的特性&#xff0c;极大简化了模板编程&#xff0c;但是如果跳出C去查看一下其他编程语言的特性&#xff0c;就会发现&#xff0c;这样类似的特…

联想thinkpad笔记本哪些配置可以安装win7_联想thinkpad笔记本装win7解析(支持新旧机型)

联想thinkpad笔记本哪些配置可以安装win7&#xff1f;联想ThinkPad L14在安装win7后usb键盘不能使用&#xff0c;并且bios中要关闭安全启动和开启CSM兼容模式&#xff0c;那么联想ThinkPad L14要怎么安装win7系统呢&#xff1f;下面小编就给大家介绍详细的联想ThinkPad L14装wi…