Skip to content

Issues with Multiple Adapters and Python 3.14 on Bazzite #1

Description

@creedda

Description: I am unable to get the Switch 2 controller bridge to establish a connection even after editing my code to allow a successful pairing. The service detects the wake signal but fails to connect, logging "connect to [MAC] (wake) failed (no adapter configured)".

This occurs on Bazzite running Python 3.14, where my system has two active Bluetooth adapters (hci0 and hci1). The controller is discovered on hci1, but the bridge attempts to connect using an undefined or incorrect adapter context, resulting in a connection failure.

Environment
OS: Bazzite-deck 44.20260608
Python Version: 3.14.3
Bluetooth Hardware: Dual adapters detected
hci0: (Internal/Primary to use with this)
hci1: (Secondary/USB to use with other controllers)
Controller: Nintendo Switch 2 GameCube Controller
Installation Method: ./scripts/install.sh (via virtual env)
Issues Encountered:

  1. Installation Dependency Errors (Python 3.14)
    Issue: pip install failed for bleak==0.22.2 and evdev due to Python 3.14 incompatibility.
    Error: ERROR: Could not find a version that satisfies the requirement bleak==0.22.2 (Requires <3.14).
    Workaround: Manually patched requirements.txt to use bleak>=1.0.0 and installed python3-devel + gcc via rpm-ostree to compile evdev from source.

  2. Auto-Detection Failure (NoneType Error)
    Issue: During initial pairing, the script crashed when trying to parse the local adapter's MAC address.
    Error: AttributeError: 'NoneType' object has no attribute 'split' inside ngc/att.py.
    Root Cause: The _bond_sync function received None for cfg.adapter_mac because the auto-detection logic failed to extract the address from the D-Bus object on this specific OS/Python combo.
    Workaround: Manually edited ngc/main.py to hardcode the adapter MAC address.

  3. Runtime Connection Failure ("No Adapter Configured")
    Issue: Service starts successfully and detects the controller wake-up signal, but fails to establish the L2CAP connection.

Journal Log (Service Status & Runtime):

Jun 22 22:04:44 HomeOne systemd[1795]: Started nso-gc.service - Switch 2 controller wireless bridge (GameCube / Pro / Joy-Con BLE -> uinput).
Jun 22 22:04:44 HomeOne python[30627]: 22:04:44 INFO ngc.dsu: DSU server listening on 127.0.0.1:26760
Jun 22 22:04:44 HomeOne python[30627]: 22:04:44 INFO ngc.bridge: starting 1 controller worker(s)
Jun 22 22:04:44 HomeOne python[30627]: 22:04:44 INFO ngc.bridge: [MAC] waiting — hold Sync to connect
Jun 22 22:04:44 HomeOne python[30627]: 22:04:44 INFO ngc.bridge: scanning for configured controllers (hold Sync to connect)
Jun 22 22:04:47 HomeOne python[30627]: 22:04:47 INFO ngc.bridge: saw [MAC] (wake)
Jun 22 22:04:50 HomeOne python[30627]: 22:04:50 DEBUG ngc.bridge: connect to [MAC] (wake) failed (no adapter configured)
Jun 22 22:04:55 HomeOne python[30627]: 22:04:55 DEBUG ngc.bridge: connect to [MAC] (wake) failed (no adapter configured)
Jun 22 22:05:00 HomeOne python[30627]: 22:05:00 DEBUG ngc.bridge: connect to [MAC] (wake) failed (no adapter configured)

Verbose Pairing Log (Traceback Snippet):

...
DEBUG ngc.att: Scanning for adapters...
DEBUG ngc.att: Found adapter: /org/bluez/hci0 with Address [MAC_A]
DEBUG ngc.att: Found adapter: /org/bluez/hci1 with Address [MAC_B]
ERROR ngc.main: AttributeError: 'NoneType' object has no attribute 'split'
Traceback (most recent call last):
File "/home/deck/GIT/switch2-controllers-linux/ngc/main.py", line 76, in _pair
ok = await asyncio.get_event_loop().run_in_executor(
...
TypeError: argument of type 'NoneType' is not iterable
...

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions