Xbox Nano Controller (045E:0B4F) pairs over Bluetooth LE but sends no input unless BlueZ host privacy is enabled (Privacy = device)
まだ誰も着手していません。
評価
- 難易度
- 4/5
- 見積もり時間
- 3〜5日
- 初心者へのやさしさ
- 48/100
- issue の種類
- バグ
- 明瞭さ
- 明確に書かれている
- 活発さ
- 活発
- 技術スタック
- linux
調査の方向性
Start with the linked btmon excerpts and compare the pairing key distribution with privacy off and with Privacy = device; the issue reports that only the latter exchanges the host identity key and starts HID input notifications. Then trace the SteamOS Bluetooth configuration and the kernel SMP key distribution path described in the report. Done means the Nano sends input on a fresh bond with the stock configuration, while existing LE Secure Connections bonds still reconnect.
索引モデルが issue の本文から書いたものです。
説明
Your system information
- Steam client version: 1792618285
- SteamOS version: 3.9.5 (build 20261023.100), kernel 7.2.7-valve2-2-neptune-72, BlueZ 5.87
- Opted into Steam client beta?: No (stable)
- Opted into SteamOS beta?: No (stable)
- Have you checked for updates in Settings > System?: Yes
- Hardware: custom desktop running SteamOS (ASUS AM5 800-series board), onboard MediaTek MT7925 Bluetooth (USB 13d3:3602)
- Controller: Xbox Nano Controller, 045E:0B4F, firmware 6.19.50.0. It works over USB-C on this machine, and other people report it working over Bluetooth LE on macOS.
Please describe your issue in as much detail as possible:
With the stock SteamOS /etc/bluetooth/main.conf (Privacy left at the default, off), the Xbox Nano Controller pairs and connects over Bluetooth LE. Steam shows it as connected ("XInput Controller #1"), but:
- the controller's LED never goes solid; it keeps flashing,
- no button or stick input reaches Steam,
- the controller powers itself off after a few minutes.
Setting Privacy = device in /etc/bluetooth/main.conf and re-pairing fixes it completely. The LED goes solid, input works immediately, and it keeps working after a reboot. That is the only change from the stock config.
Root cause, from HCI traces (btmon excerpts linked below, with keys and addresses redacted):
- With privacy off, the kernel's SMP Pairing Request does not offer the host's identity key:
Initiator key distribution: EncKey Sign LinkKey (0x0d). The kernel only adds IdKey whenHCI_PRIVACYis set. The Nano answersInitiator key distribution: <none>(legacy pairing), so it never receives the host's IRK or identity address. - Everything else succeeds: link setup, LE encryption, full GATT/HOGP discovery, the Report Map read, and enabling the CCCDs on all three input reports (the controller acknowledges every write). The controller still never sends a single HID input notification; it only sends battery level. While connected it keeps sending connectable
ADV_INDadverts (flags 0x04) and asks for peripheral latency 100. Direct ATT reads of input report 1 return a fixed neutral state even while buttons are held. The controller's HID layer simply never starts on this host. - With
Privacy = devicethe host offers IdKey, and the Nano asks for it straight away:Initiator key distribution: IdKey (0x02). The host sends Identity Information and Identity Address Information, and input reports start streaming within a second (about 865 in the first 10 s).
Ruled out (no effect on the Nano): Bluetooth firmware (stock 20250305 versus linux-firmware 20261016); LE connection interval and latency (the xpadneo [LE] settings, plus a fresh pair at 7.5 to 11.25 ms with latency 0); reading the Report Map before enabling CCCDs; Wi-Fi coexistence (Wi-Fi off) and Wi-Fi power save; PCIe ASPM; signal strength (-57 dBm at 2 ft).
Other controllers on the same machine: a DualSense (Classic HID) and an Xbox Series X|S controller (045E:0B13, BLE, Secure Connections) work with or without privacy. The Series controller doesn't depend on the host IdKey.
Steps for reproducing this issue:
- Stock SteamOS Bluetooth config (
#Privacy = offin/etc/bluetooth/main.conf). - Pair an Xbox Nano Controller through Settings > Bluetooth.
- Steam reports it connected, but the LED keeps flashing and there is no input.
- Set
Privacy = devicein/etc/bluetooth/main.conf, restart Bluetooth (or reboot), forget the controller and pair it again. Input now works.
The same main.conf ships on Steam Deck, so Deck owners with an Xbox Nano are probably affected too. I haven't tested that on a Deck.
Suggested fix and a caveat
- Option A: ship
Privacy = devicein SteamOS's/etc/bluetooth/main.conf. SteamOS already customises this file (for exampleFastConnectable = true).- Caveat, observed here: enabling privacy breaks existing bonds for LE Secure Connections devices that never received the host IRK. The host now connects from a resolvable private address that the device can't resolve. My Series X|S, bonded before the change, hit repeated supervision timeouts (
0x08) on reconnect until I re-paired it. In that state Steam showed the "Xbox controllers with older firmware…" dialog even though firmware wasn't the cause. A rollout would need a re-pair prompt or some other migration.
- Caveat, observed here: enabling privacy breaks existing bonds for LE Secure Connections devices that never received the host IRK. The host now connects from a resolvable private address that the device can't resolve. My Series X|S, bonded before the change, hit repeated supervision timeouts (
- Option B (upstream, less disruptive): have the kernel distribute an identity key during pairing (IRK plus identity address) even when the host doesn't use resolvable private addresses. New bonds would then satisfy controllers like the Nano without changing how existing bonds reconnect.
Possibly related:
- #2691: an Xbox controller on a Steam Deck OLED keeps blinking while connected and drops every ~10 s, but works on macOS and over USB. It may be the same missing host identity key. Worth testing with
Privacy = deviceplus a re-pair. - #2975: its one comment describes a standard Xbox controller flashing forever on SteamOS on an AMD PC, and the workaround they link includes
Privacy = device. - #3038: another stock
main.confdefault (JustWorksRepairing) breaking a Bluetooth device. The mechanism is different. - #2884: LE reconnection problems with resolvable private addresses. This is relevant if host privacy is enabled by default.
Side note, not investigated: Steam names the Nano "XInput Controller #1", and SDL doesn't appear to have a mapping for 045E:0B4F yet.
Logs
Redacted btmon excerpts (gist): https://gist.github.com/Brandon-Haney/eb4c241fb58a71d452f11d4500768be6
nano_privacy_off_no_input.txt: fresh pairing with privacy off. No IdKey exchanged, only battery notifications.nano_privacy_on_input_ok.txt: fresh pairing withPrivacy = device. IdKey exchanged, and HID input notifications follow (first 20 shown).
- 主要言語
- 言語のデータがありません
- スター
- 2.7k
- フォーク
- 89
- PR マージ指標
- 30日以内にマージされた PR はありません
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
ValveSoftware/SteamOS のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
ValveSoftware/SteamOS#3037 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
ValveSoftware/SteamOS#2983 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
ValveSoftware/SteamOS#2927 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
ValveSoftware/SteamOS#2875 · コメント 1 件 ·
-
steam-short-session-tracker: incorrect registry backup path resets settings during automatic repairオープン
難易度 2/5 1〜3時間 初心者へのやさしさ 80/100
ValveSoftware/SteamOS#2829 ·
ValveSoftware/SteamOS の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
volcengine/OpenViking#7347 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 74/100
kingcharleslzy-ai/dsh-purge#179 ·
メンテナーはふだん 1 日以内に返信
-
enhancement
難易度 1/5 1〜3時間 初心者へのやさしさ 88/100
carp-dk/carp.sensing-flutter#664 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
duolicious/duolicious#1943 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
fedora-infra/anitya#2166 ·
メンテナーはふだん 1 日以内に返信