在 Linux(基于 BlueZ 的系统)中,如果同时存在多个蓝牙控制器(例如主板内置蓝牙与 USB 蓝牙适配器),系统通常会根据内核枚举顺序自动指定默认控制器。这种自动分配并不总是符合用户期望,例如希望使用信号更稳定、性能更好的 USB 蓝牙适配器,而非内置蓝牙模块。
控制器的显示与默认情况
通过 bluetoothctl list 命令,可以查看当前系统检测到的蓝牙控制器。例如输出如下:
Controller XX:XX:XX:XX:XX:XX Hostname #2 [default]
Controller YY:YY:YY:YY:YY:YY Hostname
其中 [default] 表示系统当前使用的默认蓝牙控制器。如果有多个控制器,编号自动按检测顺序排列,内置控制器通常会优先编号并被设为默认。
修改 /etc/bluetooth/main.conf
在 /etc/bluetooth/main.conf 配置文件中,有如下可选参数:
#ControllerMode = dual
#DefaultAdapter = XX:XX:XX:XX:XX:XX
其中 DefaultAdapter 理论上用于指定默认控制器的 MAC 地址。然而,在大多数 Linux 桌面发行版中,这个参数实际上并不会生效。内核与 BlueZ 会根据硬件探测顺序优先指定第一个控制器,而忽略 DefaultAdapter 配置。
手动切换默认控制器
若希望使用指定的控制器,可以通过 bluetoothctl 工具手动切换:
select XX:XX:XX:XX:XX:XX
切换后,新的控制器会被设为默认,并显示 [default] 标签。这种方式简单、直接、且不会影响 Wi-Fi 或其他设备的正常工作。
自动切换方案(可选)
如果需要在启动时自动切换控制器,可以编写脚本:
#!/bin/bash
echo "select XX:XX:XX:XX:XX:XX" | bluetoothctl
将该脚本设置为系统自启动(如 systemd 服务或桌面启动项),即可实现每次启动后自动指定所需的蓝牙控制器。
是否需要禁用内置蓝牙?
也可通过禁用(unbind)内置蓝牙控制器来实现仅保留 USB 蓝牙适配器。例如针对 PCI 总线上的内置控制器,可执行:
echo '0000:03:00.0' | sudo tee /sys/bus/pci/drivers/btusb/unbind
需要注意,这种方式可能影响同一芯片上的 Wi-Fi 功能,因此需要谨慎处理。
配置文件维护建议
由于 DefaultAdapter 等参数在绝大多数场景下无效,建议在 /etc/bluetooth/main.conf 文件中将相关选项保持注释状态,示例如下:
[General]
#ControllerMode = dual
#DefaultAdapter = XX:XX:XX:XX:XX:XX
这样既保持文件简洁,又方便将来需要时快速启用。
总结
- Linux 系统默认会选择首个检测到的蓝牙控制器作为默认
/etc/bluetooth/main.conf文件中DefaultAdapter配置通常不会生效- 推荐使用
bluetoothctl的select命令手动切换控制器 - 若需自动化,可通过脚本或 systemd 服务实现
- 配置文件建议保持注释状态,方便管理
通过以上方式,可灵活、稳定地管理多蓝牙控制器环境,避免影响其他无线功能,实现更好的设备兼容与体验。