
How to configure an Xbox One controller with dongle to work with Linux
Mar 29, 2025
5 min read
I'm a Linux user at heart, but I also like to play video games. So at the beginning of the year I decided to drop Windows 10 on my desktop, as it was about to reach its end of life for official support, and move to Manjaro Linux. One of the first things I did was to install Steam, and configure my old Xbox One controller to work with it.
I've been using an Xbox One controller with a dongle to play on Windows, and I wanted the same experience on Linux. I would just plug the dongle into my computer and start playing. The dongle I use is an old model like the one in the picture below. Microsoft released a new model later, that is less bulky. I guess these instructions will work for the new model as well, but I haven't tested it.

Click on image to enlarge
Two options to configure the controller
There are two drivers out there to make the dongle work with Linux. One is xow, a mature yet old (not necessary a bad thing!) driver that has been around for a while. The other one is xone, made by the same author, but is newer and also supports Xbox Series X/S controllers and audio/led control with the controller.
I was unable to make the xone
driver work with my controller, so I used the xow
driver. Following now, I'll indicate how I configured the controller to work with my system (Manjaro Linux, based on Arch Linux) and play with it on Steam. If you are interested in the xone
driver, you can check the installation instructions directly in the repository. I linked both of them above.
Installing and configuring the xow driver
First, we need to install the packages required by xow
.
sudo pacman -S curl cabextract libusb
Now, we need to clone the repository and run the installation script.
cd /tmp
git clone https://github.com/medusalix/xow
cd xow
make BUILD=RELEASE
sudo make install
We also need to install the firmware for the controller. Once xow
is installed, it also installs a script in our path to get the controller firmware. So we can execute it as follows from anywhere.
sudo xow-get-firmware.sh
Lastly, xow
will also install a systemd service to handle the dongle. It should be already started, but we can ensure it by running the following command.
sudo systemctl enable xow
sudo systemctl restart xow
At this point, we should be able to plug the dongle into our computer and recognized, but we still need to pair the controller with the dongle, even if it was paired with the dongle in another computer before (or in a previous Windows installation like my case).
Connecting and pairing the controller
First, let's connect the dongle to the computer. If everything works you should see under the logs for the daemon that the dongle was initialized.
systemctl status xow
# Or alternatively for the logs only
# journalctl -u xow -f
In my case, it shows the following output:
● xow.service - Xbox One Wireless Dongle Driver
Loaded: loaded (/etc/systemd/system/xow.service; enabled; preset: disabled)
Active: active (running) since Sat 2025-02-01 16:05:31 CET; 2h 38min ago
Invocation: 5704f28070f64b2eb864b645f1f9cdb9
Main PID: 981 (xow)
Tasks: 4 (limit: 38251)
Memory: 1.1M (peak: 2.3M)
CPU: 28ms
CGroup: /system.slice/xow.service
└─981 /usr/local/bin/xow
feb 01 16:05:31 manjaro systemd[1]: Started Xbox One Wireless Dongle Driver.
feb 01 16:05:35 manjaro xow[981]: 2025-02-01 16:05:35 INFO - xow v0.5-36-gd335d60 ©Severin v. W.
feb 01 16:05:35 manjaro xow[981]: 2025-02-01 16:05:35 INFO - Waiting for device...
feb 01 18:43:04 manjaro xow[981]: 2025-02-01 18:43:04 INFO - Wireless address: XX:XX:XX:XX:XX:XX
feb 01 18:43:05 manjaro xow[981]: 2025-02-01 18:43:05 INFO - Dongle initialized
Also, you can check the device is recognized by running lsusb
. This is also a good place to start debugging if you have any issues. In my case, it shows the following (apart from other devices):
Bus 001 Device 005: ID 045e:02e6 Microsoft Corp. Xbox Wireless Adapter for Windows
If everything is working, you should be able to pair the controller with the dongle. To do this, as always, first long-press the pairing button on the dongle, see the white light of the dongle blinking. Then, long-press the pairing button on the controller. The Xbox logo should start blinking on the controller, and once the pairing is successful, the light will turn on steadily.
However, I had some problems when pairing the controller initially, let's see them, so hopefully I can save you some time if you have the same issue.
Troubleshooting
When pairing the controller, dongle light was blinking, as so the controller light was blinking too. However, the controller light was not turning on steadily after the pairing was successful and the controller was not paired.
Checking the logs for the xow
service, I saw the following:
INFO - Pairing enabled
terminate called after throwing an instance of 'InputException'
what(): Error opening device: Permission denied
The old known permissions issue in Linux. It seemed that xow
didn't have the proper permissions to access the input devices. What I had to do to fix it was:
- First, stop the
xow
service.
sudo systemctl stop xow
- Then, copy the udev rules to the correct location. They are under the
install
directory of the repository.
sudo cp install/udev.rules /etc/udev/rules.d/99-xow.rules
- Reload the udev rules.
sudo udevadm control --reload-rules
sudo udevadm trigger
- Start the
xow
service again.
sudo systemctl start xow
And that's it. After these changes, I repeated the pairing process, and it worked like a charm this time. Hope this helps you if you have the same issue.
I hope my article has helped you, or at least, that you have enjoyed reading it. I do this for fun and I don't need money to keep the blog running. However, if you'd like to show your gratitude, you can pay for my next coffee with a one-time donation of just $1.00. Thanks!
Pay my next coffee
