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
xonemodules 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.