Device description
I just got myself a new gamepad, which is a wirless xbox one controller. I don't know how to name the exact variant, but it's an original product, not the pro one, has a filled-in dpad and has a USB-C port. I suspect it's a pretty recent model.
The old controller worked great. I have no idea what particular controller it is, but it also a wireless xbox controller. Dpad is not filled-in and it has a micro usb port.
The problem
With the new controller, if I attempt to pair and connect, I get error messages from bluetoothd and the connection either never happens or gets broken immediately after it is made.
bluetoothctl commands I am using:
[bluetooth]# power on
Changing power on succeeded
[bluetooth]# scan on
Discovery started
[CHG] Controller 00:1A:7D:DA:71:13 Discovering: yes
[NEW] Device 44:16:22:7A:58:B3 Xbox Wireless Controller
[CHG] Device 44:16:22:7A:58:B3 ManufacturerData Key: 0x0006
[CHG] Device 44:16:22:7A:58:B3 ManufacturerData Value:
03 00 80 ...
[CHG] Device 44:16:22:7A:58:B3 ManufacturerData Key: 0x0006
[CHG] Device 44:16:22:7A:58:B3 ManufacturerData Value:
00 .
[bluetooth]# scan off
Discovery stopped
[CHG] Device 44:16:22:7A:58:B3 TxPower is nil
[CHG] Device 44:16:22:7A:58:B3 RSSI is nil
[CHG] Controller 00:1A:7D:DA:71:13 Discovering: no
[Xbox Wireless Controller]# pair 44:16:22:7A:58:B3
Attempting to pair with 44:16:22:7A:58:B3
[CHG] Device 44:16:22:7A:58:B3 Paired: yes
Pairing successful
[CHG] Device 44:16:22:7A:58:B3 Connected: no
[bluetooth]# trust 44:16:22:7A:58:B3
[CHG] Device 44:16:22:7A:58:B3 Trusted: yes
Changing 44:16:22:7A:58:B3 trust succeeded
[bluetooth]# connect 44:16:22:7A:58:B3
Attempting to connect to 44:16:22:7A:58:B3
Failed to connect: org.bluez.Error.Failed
Errors that bluetoothd outputs (started with /usr/lib/bluetooth/bluetoothd -n
:
bluetoothd[354718]: profiles/deviceinfo/deviceinfo.c:read_pnpid_cb() Error reading PNP_ID value: Request attribute has encountered an unlikely error
bluetoothd[354718]: profiles/input/hog-lib.c:info_read_cb() HID Information read failed: Request attribute has encountered an unlikely error
bluetoothd[354718]: profiles/input/hog-lib.c:report_map_read_cb() Report Map read failed: Request attribute has encountered an unlikely error
bluetoothd[354718]: profiles/input/hog-lib.c:report_reference_cb() Read Report Reference descriptor failed: Request attribute has encountered an unlikely error
bluetoothd[354718]: profiles/input/hog-lib.c:report_reference_cb() Read Report Reference descriptor failed: Request attribute has encountered an unlikely error
bluetoothd[354718]: src/service.c:service_accept() input-hog profile accept failed for 44:16:22:7A:58:B3
bluetoothd[354718]: profiles/input/hog-lib.c:info_read_cb() HID Information read failed: Encryption required before read/write
bluetoothd[354718]: profiles/input/hog-lib.c:report_map_read_cb() Report Map read failed: Encryption required before read/write
bluetoothd[354718]: profiles/input/hog-lib.c:report_map_read_cb() Report Map read failed: Request attribute has encountered an unlikely error
bluetoothd[354718]: profiles/input/hog-lib.c:report_reference_cb() Read Report Reference descriptor failed: Request attribute has encountered an unlikely error
bluetoothd[354718]: profiles/input/hog-lib.c:report_reference_cb() Read Report Reference descriptor failed: Request attribute has encountered an unlikely error
bluetoothd[354718]: profiles/battery/battery.c:batt_io_ccc_written_cb() Battery Level: notifications not enabled Request attribute has encountered an unlikely error
The log is basically spammed with these and similar error messages.
Full bluetoothctl session log: http://tcp.st/eaesd
Full bluetoothd output (I added a couple newlines before trying to pair): http://tcp.st/vx933
(links valid till 2021-11-20)
I have tried this on two different Arch Linux machines and the results were similar. Pairing it with an Android device, however, works flawlessly, so I assume the controller itself is working fine.
The actual question
What do those errors actually mean? "Unlikely error" is not exactly the most descriptive error message - how would I go about finding out more? There are also some errors saying "Encryption required before read/write". If this is necessary, why isn't bluetoothd doing the encryption? Can you turn off this requirement, or is it part of the protocol?
Ideally, my question would be "how do I fix this?", but I am not sure anyone is going the have the answer to that, so some hints on how to debug this would be greatly appreciated already.