Xbox Nano Controller (045E:0B4F) pairs over Bluetooth LE but sends no input unless BlueZ host privacy is enabled (Privacy = device)
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 48/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- linux
- Área
- backend, operating-systems
Línea de trabajo
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.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
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).
- Lenguaje dominante
- Sin datos de lenguaje
- Estrellas
- 2.7k
- Forks
- 89
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de ValveSoftware/SteamOS
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
ValveSoftware/SteamOS#3037 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
ValveSoftware/SteamOS#2983 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
ValveSoftware/SteamOS#2927 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
ValveSoftware/SteamOS#2875 · 1 comentario ·
-
steam-short-session-tracker: incorrect registry backup path resets settings during automatic repairAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 80/100
ValveSoftware/SteamOS#2829 ·
Todos los issues de ValveSoftware/SteamOS
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
volcengine/OpenViking#7347 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
kingcharleslzy-ai/dsh-purge#179 ·
Los mantenedores suelen responder en 1 día
-
enhancement
Dificultad 1/5 1-3 horas Aptitud para principiantes 88/100
carp-dk/carp.sensing-flutter#664 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
duolicious/duolicious#1943 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
fedora-infra/anitya#2166 ·
Los mantenedores suelen responder en 1 día