RU

Xbox Controller on Linux

Also available in Russian

Tired of wired gamepads

I play Minecraft Dungeons and Lego games with my son (currently The Lego Movie Videogame). Our setup:

  • we stream via Steam Link from my PC to the TV in the living room.
  • we play using wired gamepads.

Since we recently moved, the PC vs TV placement became inconvenient (and the controllers need to be plugged into the computer). So I decided to surprise my son and make a gift for myself — bought two new Xbox Wireless Controllers.

We happily brought them home, and I discovered that the controllers just wouldn’t connect properly over Bluetooth on Linux (I’m on Pop!_OS 24.04).

Xbox Wireless Controller
Image generated by AI (ChatGPT)

Bluetooth refuses to cooperate

Symptoms:

  • Pairing succeeds, but the connection fails with a “le-connection-abort-by-local” error.
  • When you put the controller into pairing mode (hold the small button on top of gamepad) and try to connect, you get endless connect / disconnect cycles.
  • Even after pairing succeeds, the Xbox button that indicates connection status keeps slowly blinking and never becomes solid.

What didn’t work

Naturally, the first thing I found was xpadneo.

  • I followed all the instructions, built it, and installed it via DKMS.
  • Applied the Bluetooth config fixes
  • Rebooted, removed the device from paired/trusted, re-paired — no luck.
  • Tried via bluetoothctl: pair by MAC address, but the problem persisted.

I kept searching. The second attempt was to disable ERTM (Enhanced ReTransmission Mode).

  • I did everything required and disabled it. But that didn’t help either.

What actually worked

I found the solution in the Debian wiki, which listed all the previous fixes I had already tried, plus one more — adding the following parameters to the Bluetooth config:

[General]
Privacy = device
JustWorksRepairing = always
Class = 0x000100
FastConnectable = true

To our delight, these lines did the trick, and we got to enjoy proper gaming that evening. I’m not sure whether it was the combination of all fixes or just the last change that made the difference, but the wiki was incredibly helpful — hopefully it helps you too.