- Saved searches
- Use saved searches to filter your results more quickly
- License
- medusalix/xow
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- About
- How to Install Driver for Xbox One Controller/Headset in Ubuntu 22.04
- Uninstall:
- Saved searches
- Use saved searches to filter your results more quickly
- paroj/xpad
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
Linux driver for the Xbox One wireless dongle
License
medusalix/xow
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
This project is in maintenance mode
Upgrading to xone is highly recommended!
xow is a Linux user mode driver for the Xbox One wireless dongle. It communicates with the dongle via libusb and provides joystick input through the uinput kernel module. The input mapping is based on existing kernel drivers like xpad.
xow supports both versions of the wireless dongle (slim and bulky one) and the Surface Book 2’s built-in adapter. The following Xbox One controllers are currently compatible with the driver:
Model number | Year | Additional information | Status |
---|---|---|---|
1537 | 2013 | Original controller | Working |
1697 | 2015 | Audio jack | Working |
1698 | 2015 | Elite controller | Working |
1708 | 2016 | Bluetooth connectivity | Working |
1797 | 2019 | Elite controller series 2 | Working |
1914 | 2020 | Share button and USB-C | Untested |
Feel free to package xow for any Linux distribution or hardware you like. Any issues regarding the packaging should be reported to the respective maintainers.
- Linux (kernel 4.5 or newer)
- curl (for proprietary driver download)
- cabextract (for firmware extraction)
- libusb (libusb-1.0-0-dev for Debian)
- systemd (version 232 or newer)
git clone https://github.com/medusalix/xow
cd xow make BUILD=RELEASE sudo make install
NOTE: Please use BUILD=DEBUG when asked for your debug logs.
NOTE: The —skip-disclaimer flag might be useful for scripting purposes.
sudo systemctl enable xow sudo systemctl start xow
NOTE: Running xow manually is strongly discouraged. A reboot might be required for xow to work correctly.
Make sure to completely uninstall xow before updating:
sudo systemctl stop xow sudo systemctl disable xow sudo make uninstall
You can enable the dongle’s pairing mode by sending the SIGUSR1 signal to xow:
sudo systemctl kill -s SIGUSR1 xow
NOTE: Signals are only handled after a dongle has been plugged in. The default behavior for SIGUSR1 is to terminate the process.
- InputException : No such file or directory
- The /dev/uinput device has to be available. The uinput kernel module needs to be loaded.
- The permissions for /dev/uinput have to allow read and write access. The udev rules need to be installed and any conflicts with existing rules have to be resolved.
- Another driver might have already loaded the dongle’s firmware. The dongle needs to be unplugged to reset its internal memory, followed by a restart of xow’s systemd service.
- See the USB incompatibilities section.
- Only a single program can communicate with the dongle at once. Any existing drivers that might interfere with xow need to be disabled. This includes running multiple instances of xow.
- The permissions for the dongle’s USB device have to be set correctly. This is also handled by the udev rules.
Using an outdated version of libusb can cause various issues. Make sure to update libusb to the latest version.
The controller only remembers the last device it was connected to. It will not automatically establish a connection to the dongle if it was previously plugged into a USB port or paired via bluetooth, even if the same computer was used.
- Certain games do not detect wireless controllers
- Enable the compatibility mode in the service configuration, reload the systemd daemon and restart the service. Controllers connected to the dongle will appear as Xbox 360 controllers.
- Try the options listed on this page to remap your inputs.
- Try the options listed on this page to set your deadzones.
Some USB controllers are known to cause issues with xow. Plugging your dongle into a USB port that uses an ASMedia controller will lead to problems. Most Intel USB controllers work well with xow. Power management issues can arise when using a USB 3 controller. These can lead to timeouts of the USB communication. The use of a USB hub can mitigate these problems.
In case of any other problems, please open an issue with all the relevant details (dongle version, controller version, logs, captures, etc.).
NOTE: Please refrain from creating issues concerning input remapping, deadzones or game compatibility as these topics are outside the scope of this project.
The dongle’s wireless chip (MT76xx) handles the WLAN connection with individual controllers. The packet format follows Microsoft’s undisclosed GIP (Game Input Protocol) specification. Most of the reverse engineering was done by capturing the communication between the dongle and a Windows PC using Wireshark . As no datasheets for this chip are publicly available, I have used datasheets of similar wireless radios for assistance. Special thanks to the authors of OpenWrt’s mt76 kernel driver. It would have been impossible for me to create this driver without mt76 ‘s source code. If anyone has a greater understanding of the GIP or the weird quirks I had to add to make the driver work, please contact me.
Copyright (C) 2019 Medusalix This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
About
Linux driver for the Xbox One wireless dongle
How to Install Driver for Xbox One Controller/Headset in Ubuntu 22.04
The popular Linux Distributions so far does not support Xbox One accessories out-of-the-box. But, there are free and open-source projects to implement the features. xone is one of them that makes following devices work in Linux machine.
- Xbox One Controllers
- Xbox Series X|S Controllers
- Xbox One Chat Headset
- Xbox One Stereo Headset
- Xbox One Chatpad
- Xbox Adaptive Controller
- Mad Catz Rock Band 4 Wireless Stratocaster
First, disconnect your Xbox devices. Then, follow the steps below one by one to install the driver.
- Search for and open a terminal window, either from start menu or ‘Activities’ overview depends on your desktop environment.
- When terminal opens, copy and paste the command below and hit Enter to install the dependency libraries:
sudo apt install linux-headers-$(uname -r) dkms curl cabextract git
Type user password (no asterisk feedback) when it asks for sudo prompt. And, hit y to continue.
Now, use git command to clone the source code of xone kernel driver:git clone https://github.com/medusalix/xone
When done successfully, there should be a xone folder created with the source code. Now, run command to navigate to that folder, build and install the driver module:
Also download the firmware for the wireless dongle:
Finally, plug in your Xbox devices and enjoy!
NOTE: Xbox devices have to be paired to the wireless dongle. They will not automatically connect to the dongle if they have been previously plugged into a USB port or used via Bluetooth. See how to pair you devices.
Uninstall:
As you see, the source folder also contains an uninstall script in case the driver does not function, or you have another good choice.
To remove it, simply navigate to that folder and run the uninstaller:
cd xone && sudo ./uninstall.sh
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
Linux Kernel Driver for the Xbox/ Xbox 360/ Xbox One Controllers
paroj/xpad
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Updated Xpad Linux Kernel Driver
Driver for the Xbox/ Xbox 360/ Xbox 360 Wireless/ Xbox One Controllers
This driver includes the latest changes in the upstream linux kernel and additionally carries the following staging changes:
- support for more compatible devices
- support for xbox360 class controllers, that need initialisation
- support for xbox one elite paddles
- xpad360w: power-off by long-pressing the power button
This driver is only used if you connect the controller via USB.
Connecting via Bluetooth
If you get past the pairing issues, the controller will operate in the generic-HID bluetooth profile.
The xpad driver will not be used.Connecting via XBox One Wireless Adapter (WiFi)
The adapter needs daemon in userspace, see: medusalix/xow
Opinion: rather get a controller that supports bluetooth.sudo git clone https://github.com/paroj/xpad.git /usr/src/xpad-0.4 sudo dkms install -m xpad -v 0.4
cd /usr/src/xpad-0.4 sudo git fetch sudo git checkout origin/master sudo dkms remove -m xpad -v 0.4 --all sudo dkms install -m xpad -v 0.4
sudo dkms remove -m xpad -v 0.4 --all sudo rm -rf /usr/src/xpad-0.4
This driver creates three devices for each attached gamepad
- /dev/input/jsN
- example jstest /dev/input/js0
- /sys/class/leds/xpadN/brightness
- example echo COMMAND > /sys/class/leds/xpad0/brightness where COMMAND is one of
- 0: off
- 1: all blink, then previous setting
- 2: 1/top-left blink, then on
- 3: 2/top-right blink, then on
- 4: 3/bottom-left blink, then on
- 5: 4/bottom-right blink, then on
- 6: 1/top-left on
- 7: 2/top-right on
- 8: 3/bottom-left on
- 9: 4/bottom-right on
- 10: rotate
- 11: blink, based on previous setting
- 12: slow blink, based on previous setting
- 13: rotate with two lights
- 14: persistent slow all blink
- 15: blink once, then previous setting
- example echo COMMAND > /sys/class/leds/xpad0/brightness where COMMAND is one of
- the generic event device
- example fftest /dev/input/by-id/usb-*360*event*
As a regular unpriveledged user
Setup console to display kernel log.
dmesg —level=debug —followOpen a new console and access the device with jstest.
jstest /dev/input/jsXInteract with the device and observe that data packets recieved from device are printed to kernel log.
[ 3968.772128] xpad-dbg: 00000000: 20 00 b5 0e 00 00 00 00 00 00 0c 03 04 fd 6c 01 40 fe 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 3968.772135] xpad-dbg: 00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 3968.804137] xpad-dbg: 00000000: 20 00 b6 0e 00 00 00 00 00 00 0c 03 04 fd 6c 01 fc fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 3968.804145] xpad-dbg: 00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 3969.152120] xpad-dbg: 00000000: 20 00 b7 0e 00 00 00 00 00 00 0c 03 04 fd 6c 01 b8 fd 00 00 00 00 00 00 00 00 00 00 00 00 00 00 [ 3969.152129] xpad-dbg: 00000020: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Save dmesg buffer and attach to bug report, don’t forget to describe button sequences in bug report.
dmesg —level=debug > dmesg.txtCtrl+C to close interactive console sessions when finished.