家庭服务器部署过程中,蓝牙的直通问题困扰了不少时间,这边单独拿出了讲讲。

蓝牙直通的诉求来自于安装Pop!_OS后,希望可以通过蓝牙鼠标和蓝牙键盘进行操作,而不是有线鼠标和键盘。

网上也搜索了很多资料,只知道蓝牙设备应该是走的USB总线,但lspcilsusb都没有出现BlueTooth字样的设备,并没有针对GMK M6的蓝牙直通教程。最终只能请教全知全能的ChartGPT。

首先根据提示通过dmesg | grep -i bluetooth命令发现系统启动时存在蓝牙相关的报错:

1
Direct firmware load for mediatek/BT_RAM_CODE_MT7922_1_1_hdr.bin failed with error -2

询问ChartGPT后,提示可能是缺少对应的文件,文件名为:BT_RAM_CODE_MT7922_1_1_hdr.bin

在以下网站搜索得到:

https://github.com/morrownr/USB-WiFi/blob/main/home/How_to_Install_Firmware_for_Mediatek_based_USB_WiFi_adapters.md

https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/mediatek

然后,安装文档说明,将文件放置到/lib/firmware/mediatek文件夹下,重启服务器。再次执行dmesg | grep -i bluetooth命令,发现没有报错。

继续按照ChartGPT的提示,测试蓝牙是否可以正常工作,使用bluetoothctl工具。

1
bluetoothctl

进入bluetoothctl交互模式。

bluetoothctl 中,确保蓝牙设备已经打开并设置为可发现状态:

1
2
3
4
power on
agent on
default-agent
scan on
  • power on:开启蓝牙。
  • agent on:启动代理,用于处理配对请求。
  • default-agent:将代理设置为默认。
  • scan on:启动扫描,查找附近的蓝牙设备。

发现可以正常搜索到附近的蓝牙设备,说明蓝牙可以正常工作了。

此时,最初的问题还没解决,到底哪个设备是对应着蓝牙?经过上面的排查,隐约觉得蓝牙设备和WiFi好像是用的同一个芯片(即MT7922)。并且,在这些设备中,只有着一个设备生产厂商是MediaTek。于是抱着试试看的心态,将对应的USB设备添加到虚拟机中,如下图。最终测试成功。