[ Content contribution] 双系统蓝牙无缝连接
Tofloor
poster avatar
沈拙言
deepin
2024-06-27 22:17
Author

双系统蓝牙无缝连接

总有人说蓝牙重新配对很方便,方便个毛毛,一开即用才真方便。

本文来自https://github.com/ademlabs/synckeys

上一次发的双系统蓝牙无缝链接 的教程已经落后于时代了,有些设备无法连接了。所幸这一篇手动操作的教程是有用的。

先决条件

Linux需要:

  1. 安装 Python 3
  2. 下载 synckeys.py (从synckeys的github)
  3. 拥有 root 权限

Windows需要:

  1. 下载 PSExec
  2. 拥有管理员权限

步骤

  1. 必须先在Linux上配对好蓝牙设备(方便后面修改已有的配对信息)

  2. 重启到Windows,再次 配对相同的设备。(以便于拿到生成的配对信息去修改Linux下的内容)

  3. Windows里以管理员身份打开终端(或命令提示符),进入存放刚刚下载的PSExec的目录,运行以下命令以转储密钥

    psexec -s -i regedit /e c:\keydump.reg HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\BTHPORT\Parameters\Keys
    

    这里将密钥存放在了C盘根目录。如果你的Linux访问不了这个文件,你就想办法发到Linux上。

  4. 重启到Linux,修改之前的配对信息

    sudo cp -r /var/lib/bluetooth// /var/lib/bluetooth//
    

    实际上是拷贝了一份来修改。其中 是你的电脑的蓝牙适配器的MAC地址,一般只有一个,不需要自己改。之前配对的设备的MAC地址,不知道的话去设置里看。 是刚刚Windows生成的keydump.reg里的没有冒号且是小写表示的MAC地址,这个地址与 只有一位数字(MAC地址是十六进制数表示,A、B、C等也表示数字)不一样,很好找到。

    如果是一样的,就不用做这一步了

  5. root权限运行 synckeys.py, 注意下面修改成自己文件所在路径

    sudo ./synckeys.py /path/keydump.reg
    
  6. 重启蓝牙服务

    sudo systemctl restart bluetooth
    
Reply Favorite View the author
All Replies
hanzn-zzx
deepin
2024-06-27 22:53
#1

like

Reply View the author
131******66
deepin
2024-06-28 09:13
#2

like

Reply View the author
晚秋(lateautumn)
Moderator
2024-06-28 11:28
#3

这个很需要,尤其对于我这类的双系统用户,虽然win系统很少用了,但偶尔还是需要的。

Reply View the author
子龙不秃头
deepin
2024-07-01 17:08
#4

您好,我遇到一个问题在运行 synckeys.py时报错,后续我手动更改LTK导致蓝牙链接windows正常,uos在链接成功和链接失败之间来回横跳

Reply View the author
沈拙言
deepin
2024-07-01 20:56
#5
子龙不秃头

您好,我遇到一个问题在运行 synckeys.py时报错,后续我手动更改LTK导致蓝牙链接windows正常,uos在链接成功和链接失败之间来回横跳

先把UOS的蓝牙配对删掉。然后再试试,遇到报错的时候把报错信息记录下来发来看看

Reply View the author
yagjunie
deepin
2025-01-06 19:07
#6

写了一个自动脚本

注册表导出.zip

PSTools\psexec -s -i regedit /e D:\synckeys\keydump.reg HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\BTHPORT\Parameters\Keys
pause

sync_bluetooth_auto.zip

#!/bin/bash

# 获取蓝牙适配器的 MAC 地址
adapter=$(sudo ls /var/lib/bluetooth/ | grep -E '^[0-9A-Fa-f]{2}(:[0-9A-Fa-f]{2}){5}$')
if [[ -z "$adapter" ]]; then
    echo "未找到蓝牙适配器。请检查蓝牙是否已启用。"
    exit 1
fi
echo "检测到蓝牙适配器: $adapter"

# 自动获取已配对设备的 MAC 地址
paired_devices=$(sudo ls /var/lib/bluetooth/$adapter/ | grep -E '^[0-9A-Fa-f]{2}(:[0-9A-Fa-f]{2}){5}$')

if [[ -z "$paired_devices" ]]; then
    echo "未找到已配对设备。请确保蓝牙设备已在 Linux 系统中配对。"
    exit 1
fi

echo "已配对的设备列表:"
index=1
for mac in $paired_devices; do
    echo "$index. $mac"
    index=$((index + 1))
done

# 提示用户选择设备
read -p "请选择 Linux 配对设备的编号(例如 1): " device_index

# 验证用户输入
if ! [[ "$device_index" =~ ^[0-9]+$ ]] || (( device_index < 1 || device_index > $(echo "$paired_devices" | wc -l) )); then
    echo "无效的编号!请重新运行脚本并选择正确的设备编号。"
    exit 1
fi

# 获取用户选择的 MAC 地址
linux_mac=$(echo "$paired_devices" | sed -n "${device_index}p")
echo "选择的 Linux 配对设备 MAC 地址: $linux_mac"

# 提示用户输入 Windows 配对设备的 MAC 地址
read -p "请输入 Windows 配对设备的 MAC 地址 (带冒号格式,例如: 12:34:56:78:9A:BC): " windows_mac

# 验证输入的 Windows MAC 地址格式
if ! [[ $windows_mac =~ ^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$ ]]; then
    echo "Windows MAC 地址格式不正确!"
    exit 1
fi

# 检查 Linux 配对目录是否存在
linux_dir="/var/lib/bluetooth/$adapter/$linux_mac"
if ! sudo test -d "$linux_dir"; then
    echo "未找到 Linux 配对目录: $linux_dir"
    exit 1
fi

# 目标目录:使用带冒号的 Windows MAC 地址
windows_dir="/var/lib/bluetooth/$adapter/$windows_mac"

# 检查目标目录是否已存在
if sudo test -d "$windows_dir"; then
    read -p "目标目录已存在,是否覆盖? (y/n): " overwrite
    if [[ "$overwrite" != "y" ]]; then
        echo "操作取消。"
        exit 0
    fi
fi

# 拷贝配对信息
echo "正在将配对信息从 $linux_dir 拷贝到 $windows_dir ..."
sudo cp -r "$linux_dir" "$windows_dir"

# 检查是否成功
if [[ $? -eq 0 ]]; then
    echo "配对信息已成功拷贝!"
else
    echo "拷贝失败,请检查权限和路径。"
    exit 1
fi

sudo ls "/var/lib/bluetooth/$adapter/"
sudo python3 ./synckeys-master/synckeys.py ./keydump.reg
sudo systemctl restart bluetooth

Reply View the author
New Thread

Popular Events

More
国际排名
WHLUG