🎮 How to connect a Xbox Series X/S Wireless Controller to Linux (bluetooth)

A tutorial to have your new Xbox One controller working on Linux with bluetooth


A few weeks ago I got one of the new Xbox controller (model 1914 with the share button) in order to replace the DS4 I was using. I kind of prefer the Xbox controller, it’s personal but the feeling and weight of it suits me better and I wanted a USB-C controller.

The new Xbox controller

While connecting the controller via USB is almost as simple as plugin’n’playing, having it over bluetooth is a whole other game.

First thing first, I recommend that you try to find the official Xbox Wireless Adapter for Windows. Not that you can’t connect the controller with third parties but it’s a headache to find one that does work due the need of a BLE (Bluetooth Low Energy) compatible dongle. Ultimately I gave some bucks to Micro$oft. Boo me.

There is only one git repo that I would suggest for now if you want to have bluetooth and usb working at the same time: xone

1. xone https://github.com/medusalix/xone

The experimental branch has these features working:

  • Input and force feedback (rumble)
  • Battery reporting (UPower integration)
  • LED brightness control (using /sys/class/leds)
  • Audio capture/playback (through ALSA)
  • Power management (suspend/resume and remote wakeup)
  • Wireless connectivity (via dongle)

And it supports:

  • Xbox One Controllers
  • Xbox Series X S Controllers
  • Third party controllers (PowerA, PDP, etc.)
  • Xbox One Chat Headset
  • Xbox One Stereo Headset (adapter or jack)
  • Xbox One Chatpad
  • Xbox Adaptive Controller

A word of caution, I strongly suggest that you plugin your wireless adapater to a USB2 port. From my own experience and from some reddit posts, using a USB3 port leads to disconnects every 15 seconds. I don’t know why, but it’s a thing.

Upon connecting you controller via usb you will feel it vibrating, meaning that the controller is recognized and ready to go.

If you are not used to git and don’t know how to get a specific branch, here is the terminal command that you need:

git clone --branch <branchname> <remote-repo-url>

so in our case:

 git clone -b experimental https://github.com/medusalix/xone

Then follow the install guide meaning in terminal:

sudo ./install.sh --release
sudo xone-get-firmware.sh

As you can see, it will download the official Microsoft controller, so if you don’t want any proprietary drivers on your system there is an alternative but without bluetooth.

2. xpadneo https://github.com/atar-axis/xpadneo

This repo is an alternative if you don’t want to have microsoft proprietary driver on your system. However as I said bluetooth is not supported. The install is quite easy and I suggest you follow the guide.

3. steam

Don’t forget to activate Xbox controller support in steam!

Written on December 11, 2021

Share on Twitter Share on Reddit ⬆️ Top