xone Driver#
The xone driver is a Linux kernel module that provides support for Xbox One, Xbox Series X/S, and compatible third-party game controllers through USB wired and RF wireless (Xbox Wireless Adapter) connections. Originally developed as an out-of-tree kernel module, xone was integrated into Universal Blue's akmods infrastructure to provide pre-compiled, signed kernel modules for immutable Linux distributions.
As of February 2026, xone driver support was removed from Bluefin, with users directed to Bazzite GNOME as an alternative for Xbox controller support. The driver continues to be actively maintained in the ublue-os/akmods repository for other Universal Blue variants.
The xone driver is designed to work alongside the upstream xpad kernel driver, providing enhanced wireless adapter support that complements the standard USB controller functionality already available in the Linux kernel.
Architecture and Integration#
Relationship to xpad#
The Linux kernel includes the xpad driver, which provides native support for Xbox controllers via USB. The xone driver extends this support by adding compatibility with the Xbox Wireless Adapter, enabling 2.4 GHz RF wireless connectivity. Originally, xone conflicted with xpad, but Universal Blue switched to a modified xone driver from BoukeHaarsma23's fork specifically to enable coexistence.
Delivery Through akmods#
The xone driver is delivered through Universal Blue's akmods system, which pre-compiles out-of-tree kernel modules for specific kernel versions. This approach addresses the immutable filesystem architecture of Universal Blue distributions:
- Modules are compiled, signed with dual signatures for Secure Boot, and packaged as RPMs
- Built daily at 00:01 UTC for each supported kernel flavor
- Published to
ghcr.io/ublue-os/akmodscontainer registry with tags likecoreos-stable-42 - Version-locked alongside kernel packages to prevent ABI mismatches
Module Components#
The xone driver consists of eight kernel module files:
| Module File | Purpose |
|---|---|
xone_dongle.ko.xz | USB wireless adapter support |
xone_gip.ko.xz | Generic Input Protocol (GIP) implementation |
xone_gip_gamepad.ko.xz | Standard gamepad support |
xone_gip_headset.ko.xz | Xbox headset audio support |
xone_gip_chatpad.ko.xz | Xbox chatpad keyboard support |
xone_gip_madcatz_strat.ko.xz | MadCatz controller variant |
xone_gip_madcatz_glam.ko.xz | MadCatz controller variant |
xone_gip_pdp_jaguar.ko.xz | PDP Jaguar controller variant |
Build Process#
Source Repository#
The xone driver source is maintained in the ublue-os/akmods COPR repository, which provides akmod-xone packages for Fedora releases. The COPR repository is configured with priority 85 to ensure packages are preferentially pulled from this source.
Build Script#
The build-kmod-xone.sh script orchestrates compilation through four steps:
- Install akmod source:
dnf install -y akmod-xone-*.fc"${RELEASE}"."${ARCH}" - Compile for target kernel:
akmods --force --kernels "${KERNEL}" --kmod xone - Verify module files: Checks all 8 module files with
modinfo - Cache common package:
dnf download --destdir /var/cache/rpms/common xone-kmod-common
Caching was introduced in February 2026 to reduce build times and network load by downloading common files only once across builds.
Version Management#
No explicit version pinning exists for xone. The build script uses a glob pattern (akmod-xone-*.fc"${RELEASE}"."${ARCH}") to install the latest available version from COPR for the target Fedora release. Driver versions are managed upstream in the COPR repository, and builds automatically pick up new versions when available.
Kernel Compatibility#
Xone modules are built for specific kernel flavors defined in images.yaml:
- Fedora 42: main, coreos-stable (x86_64 + aarch64 for coreos)
- Fedora 43: main, coreos-stable, coreos-testing
- NOT included: CentOS 10 kernels, longterm kernels (server-focused builds)
The xone driver is only built for desktop-oriented kernel flavors, not for server kernels.
Bluefin Integration History#
Bluefin LTS HWE Implementation#
In Bluefin LTS, xone was included as part of the Hardware Enablement (HWE) variant. The kernel-swap.sh script installed common akmods including xone when ENABLE_HWE=1 or ENABLE_GDX=1:
# Lines 84-91: Install xone and other common akmods
dnf -y install \
"$COMMON_AKMODS_DIR"/rpms/*xone*.rpm \
"$COMMON_AKMODS_DIR"/rpms/*openrazer*.rpm \
"$COMMON_AKMODS_DIR"/rpms/*framework-laptop*.rpm \
"$COMMON_AKMODS_DIR"/rpms/*v4l2loopback*.rpm \
"$COMMON_AKMODS_DIR"/rpms/kmods/*xone*.rpm
The script performed the following operations:
- Downloaded akmods container from
ghcr.io/ublue-os/akmods:coreos-stable-42-${KERNEL_VERSION} - Extracted RPMs from the container's
/rpmsand/rpms/kmodsdirectories - Installed both
xone-kmod-common(support files) andkmod-xone(kernel modules) - Version-locked kernel packages to prevent ABI mismatches
Removal from Bluefin (February 2026)#
Xone driver support was removed from Bluefin on February 17, 2026 as part of a strategic shift to consolidate gaming-focused hardware support. The maintainers noted "Time to move on from these, if people need it bazzite-gnome exists." Users requiring Xbox controller support are now directed to Bazzite GNOME, which continues to include xone driver support.
Known Issues#
Outdated Driver Version#
As of September 2025, the xone driver version in ublue-os/akmods is outdated. Users reported the driver needs updating from version 0.3.3 to 0.4.3 from dlundqvist's fork, which fixes compatibility issues with:
Nobara Linux has already adopted the 0.4.3 update, and pre-packaged versions are available at negativo17.org.
Wireless Dongle Firmware Loading Failure#
A firmware filename mismatch affects Xbox One wireless dongles (USB ID: 045e:02e6). The xone_dongle driver attempts to load firmware named xone_dongle_02e6.bin, but the actual firmware file is named xow_dongle_045e_02e6.bin.
Workaround: Users can create an overlayfs mount to rename the firmware file:
sudo mount -t overlay overlay -o lowerdir=/usr/lib/firmware:/var/tmp/firmware-overlay /usr/lib/firmware
This workaround does not persist across reboots.
Wireless Dongle Lockup Issues#
Wireless Xbox 2.4GHz dongles have experienced recurring lockup issues. A fix was merged in February 2024 referencing an upstream commit, but users reported the problem resurfaced in Bazzite 42 in mid-2025, suggesting the fix may have regressed.
Recent Improvements#
Module Filename Corrections (August 2025)#
A critical fix in August 2025 corrected module filename references. The build script was updated to replace hyphens with underscores in modinfo commands, aligning with actual module naming conventions (xone-dongle → xone_dongle, gip-gamepad → gip_gamepad, etc.). This prevented build failures and improved module verification reliability.
Build Optimization (February 2026)#
A caching strategy was implemented in February 2026 to improve build efficiency. The xone build script now caches the xone-kmod-common RPM package in /var/cache/rpms/common, allowing subsequent builds to reuse cached files and reducing build times.
Related Topics#
- Xbox Wireless Protocol (GIP) - The proprietary protocol used by Xbox controllers
- akmods - Universal Blue's kernel module compilation and distribution system
- xpad - The upstream Linux kernel driver for Xbox controllers via USB
- Bazzite - Gaming-focused Universal Blue variant that continues to include xone support
- Secure Boot - Kernel module signing required for bootloader security
Relevant Code Files#
| File | Repository | Purpose | URL |
|---|---|---|---|
| build-kmod-xone.sh | ublue-os/akmods | Xone build script | View |
| kernel-swap.sh | ublue-os/bluefin-lts | Bluefin LTS HWE kernel installation | View |
| Containerfile.in | ublue-os/akmods | Akmods build pipeline | View |
| images.yaml | ublue-os/akmods | Kernel flavor configuration | View |
| README.md | ublue-os/akmods | Akmods documentation | View |
| CHANGELOG.md | ublue-os/akmods | Xone driver history | View |