切换到Arch也有一段时间了,一直在用的QC35也又一次遇到了蓝牙配对的问题。以前都是用Blueman,或者直接连接有线,但是问题只是被隐藏了,这次还是好好把这个问题解决了一下。
问题描述
Linux下连接蓝牙设备的方法可以参照Arch Wiki:Bluetooth,我使用的蓝牙设备是USB CSR8510蓝牙适配器,按页面说明安装好软件包后,启动蓝牙服务,进入bluetoothctl,耳机打开配对模式,scan on查找到我的耳机的MAC,pair 04:52:C7:5B:CB:65,出现问题:
[bluetooth]# pair 04:52:C7:5B:CB:65
Attempting to pair with 04:52:C7:5B:CB:65
[CHG] Device 04:52:C7:5B:CB:65 Connected: yes
Failed to pair: org.bluez.Error.AuthenticationFailed
[CHG] Device 04:52:C7:5B:CB:65 Connected: no
如果你在蓝牙设置界面进行配对尝试,不同桌面也有不同的错误提示,反正就是无法完成配对。如果使用Blueman等软件,有机会可以通过多次重试成功连接,但是问题还是间歇出现,并不能治本。
问题解决
百度是找不到什么好解决方案的,直接Google,不一会就找到了有用的解决方法,Pairing Bose QC 35 over Bluetooth on Fedora,问题上看基本就是我的问题,最高票的回答也很简单,QC35声称支持低功耗蓝牙(LE)但不支持低功耗模式下的配对,Bluez也还不支持明明配对一个LE设备,却要切换到BR模式来配对(大概是这个意思),除非你在配置文件里指定所有设备都应该工作在BR模式,所以打开配置文件/etc/bluetooth/main.conf(没有的话新建一个),找到下面的
# Restricts all controllers to the specified transport. Default value
# is "dual", i.e. both BR/EDR and LE enabled (when supported by the HW).
# Possible values: "dual", "bredr", "le"
# ControllerMode = dual
将 # ControllerMode = dual改为ControllerMode = bredr,然后保存,对于新建的文档,直接输入下面的然后保存
[General]
ControllerMode = bredr
然后重启bluetooth服务
sudo systemctl restart bluetooth
现在你应该能在bluetooth里愉快地配对了----才怪,你还需要删除以前的配对设置,否则会出现org.bluez.Error.AuthenticationRejected错误
[bluetooth]# untrust 04:52:C7:5B:CB:65
[CHG] Device 04:52:C7:5B:CB:65 Trusted: no
Changing 04:52:C7:5B:CB:65 untrust succeeded
[bluetooth]# disconnect 04:52:C7:5B:CB:65
Attempting to disconnect from 04:52:C7:5B:CB:65
Successful disconnected
[bluetooth]# remove 04:52:C7:5B:CB:65
[DEL] Device 04:52:C7:5B:CB:65 Bose QuietComfort 35
Device has been removed
再次尝试配对,信任,连接,如果连接时出现Failed to connect: org.bluez.Error.Failed错误,那是你没装pulseaudio-bluetooth包,无法支持A2DP协议,装一个再试就可以了。
成功连接后声音输出可能会默认走的是HSP/HFP,音质会极差,在音频设置里切换到A2DP就正常了。更多蓝牙音频设备的设置可以查看Arch Wiki:Bluetooth headset
更多
关于蓝牙协议可以查看百科,或者这里有简短的科普蓝牙协议分析(1)_基本概念
关于这里bluetooth和QC35在配对时鸡同鸭讲的问题,给出解决问题的人也表示自己的蓝牙鼠标是LE,为了使用他后来把配置文件里的ControllerMode删掉了,但是耳机和鼠标都没受影响,他猜想可能配对后的设备是不受配置文件的影响的。