Fedora KDE: Installing the xone Driver for the Xbox Wireless Adapter

Fedora KDE: Installing the xone Driver for the Xbox Wireless Adapter

These are the steps that worked for getting the Microsoft Xbox Wireless Adapter running on Fedora KDE using the xone driver.

Use case

This is for:

Xbox One / Xbox Series controller
→ Microsoft Xbox Wireless Adapter USB dongle
→ Fedora KDE
→ xone driver

This is not the Bluetooth setup. For Bluetooth, xpadneo is usually the better driver.


1. Enable the xone COPR repository

sudo dnf copr enable sentry/xone
sudo dnf install -y xone akmod-xone

The packages installed were:

xone-1:0.5.8-1.fc44.x86_64
akmod-xone-1:0.5.8-1.fc44.x86_64

One thing to note: on Fedora, the xone package did not include the firmware helper script.

Checking the installed files showed:

rpm -ql xone
/usr/lib/modprobe.d/60-xone.conf
/usr/lib/modules-load.d/xone.conf
/usr/share/licenses/xone
/usr/share/licenses/xone/LICENSE

And:

rpm -ql akmod-xone
/usr/src/akmods/xone-kmod-0.5.8-1.fc44.src.rpm
/usr/src/akmods/xone-kmod.latest

So the COPR package installed the akmod source and config, but not the firmware download helper.


2. Build the xone kernel modules

sudo akmods --force
sudo dracut --force

Verify the modules were built:

find /usr/lib/modules/$(uname -r) -iname '*xone*'

Working output looked like this:

/usr/lib/modules/7.0.14-201.fc44.x86_64/extra/xone
/usr/lib/modules/7.0.14-201.fc44.x86_64/extra/xone/xone_dongle.ko.xz
/usr/lib/modules/7.0.14-201.fc44.x86_64/extra/xone/xone_gip.ko.xz
/usr/lib/modules/7.0.14-201.fc44.x86_64/extra/xone/xone_gip_chatpad.ko.xz
/usr/lib/modules/7.0.14-201.fc44.x86_64/extra/xone/xone_gip_gamepad.ko.xz
/usr/lib/modules/7.0.14-201.fc44.x86_64/extra/xone/xone_gip_headset.ko.xz
/usr/lib/modules/7.0.14-201.fc44.x86_64/extra/xone/xone_gip_madcatz_glam.ko.xz
/usr/lib/modules/7.0.14-201.fc44.x86_64/extra/xone/xone_gip_madcatz_strat.ko.xz
/usr/lib/modules/7.0.14-201.fc44.x86_64/extra/xone/xone_gip_pdp_jaguar.ko.xz
/usr/lib/modules/7.0.14-201.fc44.x86_64/extra/xone/xone_wired.ko.xz

3. Install the wireless dongle firmware

The driver loaded, but the Xbox wireless adapter needed firmware. Since the Fedora package did not include the helper script, the firmware was installed using the upstream xone repository.

Install the requirements:

sudo dnf install -y git cabextract

Clone the upstream repo:

cd /tmp
git clone https://github.com/medusalix/xone.git

The firmware installer was present in the cloned repo, but it needed executable permissions:

chmod +x /tmp/xone/install/firmware.sh

Then run it:

/tmp/xone/install/firmware.sh

Successful output looked like:

The firmware for the wireless dongle is subject to Microsoft's Terms of Use:
https://www.microsoft.com/en-us/legal/terms-of-use

Press enter to continue!

driver.cab: WARNING; possible 16256 extra bytes at end of file.
Extracting cabinet: driver.cab
  extracting FW_ACC_00U.bin

All done, no errors.
FW_ACC_00U.bin: OK

4. Fix the firmware filename expected by the driver

After installing the firmware, the module still logged this error:

xone-dongle 3-5:1.0: Direct firmware load for xone_dongle_02e6.bin failed with error -2

The -2 means “file not found.” The firmware installer downloaded:

FW_ACC_00U.bin

But the driver expected:

xone_dongle_02e6.bin

Check the firmware files:

sudo find /lib/firmware /usr/lib/firmware -iname '*xone*' -o -iname 'FW_ACC_00U.bin'

The working system had:

/lib/firmware/FW_ACC_00U.bin
/lib/firmware/xone_dongle_02e6.bin
/usr/lib/firmware/FW_ACC_00U.bin
/usr/lib/firmware/xone_dongle_02e6.bin

If xone_dongle_02e6.bin is missing, copy the downloaded firmware to the name the driver expects:

sudo install -D -m 0644 /lib/firmware/FW_ACC_00U.bin /lib/firmware/xone_dongle_02e6.bin
sudo install -D -m 0644 /usr/lib/firmware/FW_ACC_00U.bin /usr/lib/firmware/xone_dongle_02e6.bin

Then relabel for SELinux:

sudo restorecon -v /lib/firmware/xone_dongle_02e6.bin /usr/lib/firmware/xone_dongle_02e6.bin

5. Reload the xone modules

Unplug the Xbox wireless adapter first.

Then unload the modules:

sudo modprobe -r \
  xone_dongle \
  xone_gip_headset \
  xone_gip_gamepad \
  xone_gip_madcatz_strat \
  xone_gip_chatpad \
  xone_wired \
  xone_gip

Reload the dongle module:

sudo modprobe xone_dongle

Plug the dongle back in.


6. Verify the driver

Check loaded modules:

lsmod | grep xone

Working output looked like:

xone_gip_headset       28672  0
xone_dongle            69632  0
cfg80211             1609728  1 xone_dongle
xone_wired             24576  0
xone_gip_gamepad       20480  0
xone_gip_madcatz_strat 12288  0
xone_gip_chatpad       12288  0
xone_gip               81920  6 xone_dongle,xone_gip_gamepad,xone_gip_madcatz_strat,xone_wired,xone_gip_chatpad,xone_gip_headset
ff_memless             24576  1 xone_gip_gamepad

Check the kernel log:

dmesg | grep -iE 'xone|xbox|gip|firmware' | tail -50

Before the firmware fix, the log showed:

Direct firmware load for xone_dongle_02e6.bin failed with error -2

After installing the firmware under the expected name and reloading the module, the new firmware-missing error should no longer appear.


7. Optional controller test

Install joystick tools:

sudo dnf install -y joystick

Check joystick devices:

ls -l /dev/input/js*

Test the controller:

jstest --event /dev/input/js0

If /dev/input/js0 is not the controller, check the other /dev/input/js* devices.


Notes

  • The xone modules are out-of-tree modules, so Fedora may log a kernel taint message. That is expected.
  • If Secure Boot is enabled, unsigned akmod modules may fail to load unless signed/enrolled.
  • The Fedora COPR package handled the kernel modules, but the firmware helper had to be run from the upstream repo.
  • The important firmware filename for this adapter was xone_dongle_02e6.bin.