プログラミング
Show HN: Proxmox -> ネットワーク経由でホストのBluetoothをVMと共有する
Show HN: Proxmox -> Share your host's Bluetooth with a VM over the network (github.com)
要約
Proxmox仮想マシン(VM)でBluetoothが利用できない問題に対する解決策を提供するツールが公開されました。特にIntel製オンボードチップや特定のゲーミングOS環境で発生するBluetoothパススルーの失敗や不安定さを回避するため、ホストのBluetoothアダプターをネットワーク経由でVMに共有する仕組みです。このツールは、わずか2つのコマンドで設定でき、Linuxがサポートするあらゆるチップで動作し、再起動にも対応します。
全文翻訳
ProxmoxのLinux VMでBluetoothが利用可能に。ついに。
要約:Proxmox Linux VMでのBluetoothパススルーは、Intel製オンボードチップ(BE200、AX210、AX211 - ハードウェア設計により設定では修正不可)で失敗し、ChimeraOSやBazziteのようなゲーミングディストリビューションでは不安定です。このツールは、代わりにネットワーク経由でホストのBluetoothをVMと共有します。2つのコマンドで動作し、Linuxがサポートするあらゆるチップに対応し、再起動後も機能します。コントローラー、ヘッドフォン、Home Assistantセンサーなどがすべて動作します。
お使いのVM(ChimeraOS、Bazzite、Home Assistant、通常のLinux)でXbox/PlayStationコントローラー、ヘッドフォン、センサーをペアリングしてください。Bluetoothチップが「パススルーできない」場合でも可能です。
聞き覚えがありますか?ProxmoxでゲーミングVMを構築したのに、Bluetoothだけが動作しない。コントローラーが点滅するだけで、諦めてしまう。フォーラムで勧められたIntel BE200/AX210カードを購入したのに、やはりダメ。`qm set ... -usb`を試してVMでデバイスを確認しても、やはり動作しない。「USBケーブルを使うしかない」というスレッドばかり。あなたのせいではありませんし、ハードウェアも壊れていません。Intelは、そのBluetoothチップが起動したマシンだけがそれを制御できるように設計しました。ProxmoxがチップをVMに渡した瞬間、チップは自身をクリアします。この設定で修正されるものではありません。これはチップの物理的な動作方法です。
まず:簡単な方法を試す
通常のUSBパススルーは多くのセットアップで機能します。通常のLinuxディストリビューション(Debian、Ubuntu)に通常のドングルを接続すると、多くの場合、`qm set <vmid> -usb0 host=<vendor:product>`で動作します。これでVMでBluetoothが動作するなら、読むのをやめてください。このプロジェクトは必要ありません。これは、それが機能しない場合のためのものです:Intel製オンボードチップ(BE200/AX2xx - 設計上、決して動作しない)、ゲーミングディストリビューション(ChimeraOS/Bazziteカーネル+奇妙なチップファームウェア)、トリムされたクラウドカーネル、およびVMの再起動後にスタックするドングル。
解決策:チップを渡さない。共有する。
チップはProxmoxホストに残し、そこで動作させます。小さなブリッジがローカルネットワーク経由でVMにストリーミングします。VMは完全に通常のBluetoothアダプターとして認識します。レイテンシはコントローラー自体の無線遅延よりも低いため、感じることはありません。
2つのコマンド。それだけです。
Proxmoxホストで:
curl -fsSL https://raw.githubusercontent.com/lucid-fabrics/proxmox-bluetooth/main/install.sh | sudo bash
以下のような表示が見られるはずです:
==> このマシン上のBluetoothアダプター:
[0] hci0 - 70:08:10:A4:F1:45 (USB)
==> すべてのアダプターは正常です。
準備完了です。
==> Bluetooth (hci0) は 192.168.1.3:9700 で共有されています。
次にVM内でこれを実行します:
curl -fsSL https://raw.githubusercontent.com/lucid-fabrics/proxmox-bluetooth/main/install.sh | sudo bash -s -- 192.168.1.3
手順:最後の行を正確にコピーします(IPアドレスは異なる場合があります)そしてVM内で実行します。VM内では、以下のような表示が見られます:
==> 完了しました。
このVMは現在、動作するBluetoothを持っています。コントローラーをペアリングしてください。
手順:VMのBluetooth設定を開き、通常通りペアリングします。それだけです。両側とも起動時に自動的に開始され、自動的に再接続されます。一度設定すれば、存在を忘れることができます。
私のチップは動作しますか?
Proxmoxホストがそれを認識できれば、VMはそれを利用できます。ホストでこれを実行します:
curl -fsSL https://raw.githubusercontent.com/lucid-fabrics/proxmox-bluetooth/main/install.sh | sudo bash -s -- --check
正常であれば、以下のように表示されます:
==> このマシン上のBluetoothアダプター:
[0] hci0 - 70:08:10:A4:F1:45 (USB)
==> すべてのアダプターは正常です。
準備完了です。
手順:何もしない - 上記のインストールコマンドを実行します。
Intel製チップがスタックしている場合:
!! hci0 が応答しません(ブートローダーでスタックしています)。
修正:シャットダウンし、電源供給スイッチを15秒間オフにしてから起動してください。再起動や前面の電源ボタンだけでは不十分です。READMEを参照してください。
手順:その通りに実行してください。これは極端に見えますが、実際に機能する唯一の方法です - なぜならFAQを参照してください。
実際に動作確認されたハードウェア(確認済み):
ハードウェア ステータス
Intel BE200 ✅ テスト済み - このリポジトリはそれのために存在します
Intel AX200 / AX210 / AX211 ✅ 同じファミリー、同じ動作
MediaTek MT7921 / MT7922 ✅ 標準的なLinuxサポート
汎用CSR / Realtek USBドングル ✅ ホストのLinuxが認識するものすべて
UGREEN "BT 6.0" ドングル (Barrotチップ) ❌ Linuxでのファームウェア破損、ブリッジでも不可。避けてください。
FAQ、人間向けの言葉で
コントローラーに遅延はありますか?
いいえ。ブリッジは同じマシン上で1ミリ秒未満の遅延を追加するだけです。Bluetooth自体の方が遅延が大きいです。
ヘッドフォン、キーボード、Home Assistantセンサーでも動作しますか?
はい - ブリッジはプロトコル透過的です(生のBluetoothトラフィックを転送するだけで、理解したりフィルタリングしたりしません)。通常のLinux Bluetoothアダプターで動作するものはすべて動作します:コントローラー、オーディオ、HID、Home Assistant用のBLEセンサー。
複数のデバイスを同時にペアリングできますか?
はい。VM内では通常のアダプターと全く同じように動作します。コントローラー2台とヘッドフォンでも問題ありません。一度に1台という制限は、VM(1台のVMがチップを所有する)に関するもので、デバイスに関するものではありません。
何か購入する必要がありますか?
いいえ。すでに持っているカードで動作します。交換した古いカードでもおそらく動作しました。
VM全体が「クラッシュ」しました - 黒い画面、ネットワークなし(ChimeraOS / Bazzite)。
クラッシュしたのではなく、スリープしました。ゲーミングディストリビューションは、Steam Deckのようにアイドル状態の後に自動的にサスペンドしますが、GPUパススルーを持つVMはそこから復帰しません。VM内でサスペンドを無効にしてください:`sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target`
コントローラーはペアリングされるが、Steam(ChimeraOS / Bazzite)で何も応答しません。
これはBluetoothではなく、入力レイヤーの既知の不具合です:`sudo systemctl restart inputplumber`を実行し、コントローラーの電源をオフにしてからオンにしてください。これで修正されます。
Intelカードが完全に無反応に見えます。アダプターなし、恐ろしいログ行。
これは、チップが空白のブート状態にスタックしているためです。マシンをシャットダウンし、電源供給スイッチを15秒間オフにしてから起動してください。再起動だけでは不十分です。前面の電源ボタンだけでは不十分です。この一つのトリックで丸一日費やしました - どういたしまして。
ホストにBluetoothチップが複数あります。
`--check`は、MACアドレスとともに見つかったすべてのアダプター(hci0、hci1、...)をリストアップするので、区別でき、複数見つかった場合は推測せず、選択を求めます。`./install.sh --adapter 1`で特定のアダプターを共有します。同時に2つのチップを2つの異なるVMにブリッジすることはまだサポートされていません(現在、ホストあたり1つのインストール)。必要であればイシューを開いてください。これは小さな変更です。
VMがクラッシュした / 再構築した / 別のVMでBluetoothが必要になった。
新しいVMでクライアントワンライナーを実行するだけです。ホストは接続したVM(一度に1台)にチップを提供します。クラッシュしたVMの後始末は不要です。古いVMがまだ実行中の場合は、まずそこでクライアントを停止してください(`--uninstall`)。注意点:ペアリングはゲスト内に保存されるため、新しいVMでデバイスを一度ペアリングしてください。
ChimeraOS / Bazzite OSのアップデートでも機能しますか?
はい。これらのディストリビューションはアップデート時にシステムイメージを置き換えますが、`/etc`と`/var`は保持します。これはまさにこのツールがインストールされる場所です。ブリッジとペアリングは自動的に復元されます。
ホスト自身のBluetoothは失われますか?
はい、共有中は失われます。クローゼットの中のサーバーはめったにそれを気にしません。一時的に必要になったら?`--pause`でチップをホストに戻し、`--resume`でVMに(自動的に再接続されます)渡します。`--uninstall`はすべてを完全に削除します。
これは安全ですか?
ブリッジは認証なしで1つのLANポート(9700、ホストのIPにバインド)で通信します。最初に接続したマシンがチップを取得します。ルーターの後ろにあるホームLANでは、通常は問題ありません。心配な場合は、ポート9700をファイアウォールで保護し、VMのIPのみがアクセスできるようにしてください。
範囲が狭い?デバイスが近くでしかペアリングされない?
それはアンテナの問題であり、ブリッジの問題ではありません。M.2カードには2つの小さなアンテナケーブルを接続する必要があります。金属ケース内の裸のカードはほとんど届きません。USBドングル:前面ポートまたは短い延長ケーブルは、他のケーブルのすべてが近くにある背面ポートよりも優れています。
Windows VMはどうですか?
ブリッジはLinuxゲスト用です(LinuxのBluetoothスタックに依存します)。Windows VMは通常この問題を抱えていません。USBドングルを`qm set <vmid> -usb0 host=<id>`で直接パススルーすると、Windowsではうまく動作します。このツールは、Windowsが平気なところでLinuxゲストが苦労するから存在します。
LXCコンテナはどうですか?
コンテナはホストのカーネルを共有するため、このブリッジは必要ありません。コンテナでは、ホストのBluetoothアダプターを直接利用できます。