控制器插上蓝牙以后只会一直闪灯,闪到你怀疑人生——这是不少在 Proxmox 上搭 Linux 游戏虚拟机的人都撞过的墙。USB 直通配置得明明白白,设备也在虚拟机里现身了,蓝牙就是配不上。问题不在操作,在硬件设计:Intel BE200、AX210、AX211 这类板载蓝牙芯片,一旦被直通交出去,固件会被清空回到裸机启动状态,虚拟机永远完不成握手。开源项目 proxmox-bluetooth 给出的解法不算优雅,但确实管用——芯片不直通了,把它的数据流搬到网络上共享。

两条命令背后发生了什么

方案的底层是 BlueZ 官方源码里的 btproxy 工具,这东西从没进过发行版软件包。宿主机上,它以 HCI 用户通道模式打开蓝牙适配器,把原始 HCI 流通过 TCP 9700 端口丢到局域网里;虚拟机里,客户端用 hci_vhci 建一个虚拟蓝牙控制器,把这条流接回去。BlueZ 在虚拟机里毫无察觉,以为自己在管一块正常的板卡。两边各挂一个 systemd 服务,开机自启、断线自连。

受影响的主要是 Proxmox/KVM 上跑 ChimeraOS、Bazzite、Home Assistant 这类 Linux 虚拟机的家庭实验室用户。Windows 虚拟机通常不需要这套——USB 狗直通给 Windows 反而顺畅;LXC 容器共享宿主机内核,直接挂载设备就行,同样用不上。如果普通 USB 蓝牙狗直通本来就能用,项目自己也建议别折腾这套桥接。

蓝牙桥接怎么跑通 宿主机 蓝牙芯片 HCI 用户通道 驱动固件正常加载 btproxy 服务 TCP 9700 局域网转发 原始 HCI 数据流 虚拟机 hci_vhci 虚拟蓝牙适配器 BlueZ 毫无察觉 芯片留在宿主机,虚拟机只拿到一条流

为什么直通天生会失败

Intel CNVi 蓝牙(BE200/AX2xx 这一家子)要求宿主机的 btusb/btintel 驱动在开机时加载固件。任何直通操作——USB 重定向、vfio、解绑驱动——都会把芯片重置回 ROM 引导状态,虚拟机永远没机会完成固件握手。这不是驱动没适配好,是芯片设计本身不允许。

这个限制不等于"所有 Intel 蓝牙都直通不了"。项目本身也只针对 BE200、AX200、AX210、AX211 这一固件握手机制,以及游戏发行版内核、裁剪过的云内核、重启几次就卡死的蓝牙狗这类不稳定场景。普通 USB 蓝牙狗插进 Debian、Ubuntu 这类常规发行版,大多直通就能用,不需要这套方案。


我的判断:巧是真巧,但离"能用"还有一道锁

这套方案本质是曲线救国:直通这条正路走不通,就换网络这条侧路。作为工程补丁,思路干净,代价也讲得明白——项目文档没有藏着掖着。这一点值得肯定。

但几个边界不能被"两条命令,开箱即用"的宣传盖过去。一台宿主机安装,当下只能把一颗芯片交给一台虚拟机;共享期间,宿主机自己失去这个蓝牙适配器。项目文档自称桥接延迟"低于 1 毫秒",这是作者自述,没有第三方独立测过,读者可以信个大概,别当验证结论。

更值得盯住的是认证这一环。服务在 TCP 9700 上裸奔,没有任何身份验证——局域网里谁先连上,谁就拿走蓝牙控制权。这像极了早年互联网的 Telnet、FTP:能用先用,安全后补。在自家路由器后面,风险确实不大,但这不是"多租户共享",而是单连接、单虚拟机独占的临时借用,叫法上不能拔高。

芯片留在宿主机,信任却留在了局域网。
共享的代价 1 颗芯片 同一时刻只归 1 台 VM 0 身份认证 局域网内先连先得 9700 TCP 端口 建议防火墙限制来源
  • 建议.能用普通 USB 蓝牙狗直通就直通,这套桥接方案只该留给 Intel 板载芯片和游戏发行版这类死结场景。
  • 风险.服务在局域网内无身份认证,先连上 TCP 9700 的设备就拿走蓝牙控制权,务必用防火墙锁死来源 IP。

项目目前 7 颗星,兼容列表靠社区自行提交确认,规模谈不上成熟生产方案,更像是一份写得很认真的个人补丁说明书。对折腾 Home Assistant 或游戏虚拟机的人,这盏灯总算不用再一直闪了——但控制权这把锁,还得自己动手上。