Xbox one receiver linux driver
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
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:
- enable debug outputs to ease resolving issues
- some minor code refactoring improving readability
This driver does not support the XBox One Wireless Adapter (WiFi)
To get that running, see: medusalix/xow
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 —follow
Open a new console and access the device with jstest.
jstest /dev/input/jsX
Interact with the device and observe that data packets recieved from device are printed to kernel log.
Save dmesg buffer and attach to bug report, don’t forget to describe button sequences in bug report.
dmesg —level=debug > dmesg.txt
Ctrl+C to close interactive console sessions when finished.
Xbox one receiver linux driver
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
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
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.
The Xbox One wireless dongle requires a proprietary firmware to operate. The firmware is included with the Xbox — Net — 7/11/2017 12:00:00 AM — 1.0.46.1 driver available from Microsoft Update Catalog. The package is automatically downloaded and extracted during the build process due to Microsoft’s Terms of Use, which strictly disallow the distribution of the firmware. By using xow, you accept Microsoft’s license terms for their driver package.
xow supports both versions of the wireless dongle (slim and bulky one). 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 |
- EmuELEC (starting with version 3.3)
- GamerOS (starting with version 13)
- Steam Link (starting with build 747)
Feel free to package xow for any Linux distribution or hardware you like, as long as you do not publish any prebuilt executables. The build process embeds a copy of Microsoft’s proprietary firmware into the binary, prohibiting any type of distribution. 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)
Clone the repository (necessary for version tagging to work):
Build xow using the following command:
NOTE: Please use BUILD=DEBUG when asked for your debug logs.
Install xow as a systemd unit (runs xow at boot time) and start the service:
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:
You can enable the dongle’s pairing mode by sending the SIGUSR1 signal to 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.
- InputException : Permission denied
- 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.
- Mt76Exception : Failed to load firmware
- 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.
- LIBUSB_ERROR_TIMEOUT
- See the USB incompatibilities section.
- LIBUSB_ERROR_BUSY or LIBUSB_ERROR_NO_DEVICE
- 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.
- LIBUSB_ERROR_ACCESS
- 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.
- Buttons/triggers/sticks are mapped incorrectly
- Try the options listed on this page to remap your inputs.
- Input from the sticks is jumping around
- 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.
Xbox one receiver linux driver
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
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
If you want to support me or accelerate the development of a special feature, consider a small donation ❤️ Just leave a message if your donation is for a specific use (like a new hardware or a specific function).
Advanced Linux Driver for Xbox One Wireless Gamepad
This is the first driver for the Xbox One Wireless Gamepad (which is shipped with the Xbox One S). I wrote it for a student project at fortiss GmbH and it is fully functional but does only support the connection via Bluetooth as yet — more will follow.
Many thanks to Kai Krakow who sponsored me a Xbox One Wireless Controller 🎮 (including Wireless Adapter) and a pack of mouthwatering guarana cacao ☕
- xow is a driver for the Xbox One S controllers, too, and supports the native dongles packaged with the controller. Kudos to @meduslaix for working together on finding some work aorunds for controller firmware bugs.
- xpad supports this and many other controllers in USB mode.
These other projects may not support some of the advanced features of xpadneo.
SDL2 Breaking Changes
As of SDL 2.0.12, SDL introduced a new HIDAPI which can read HID devices in raw mode, bypassing the drivers. Due to the way SDL works, and because xpadneo exposes hidraw devices as user-readable, SDL may see wrong button mappings because it may make wrong assumptions about the protocol mode of Xbox and compatible controllers. If you see wrong button mappings / missing buttons in SDL applications, you may need to turn off this behavior by setting an environment variable in your profile: SDL_JOYSTICK_HIDAPI=0
Advantages of this driver
- Supports Bluetooth
- Supports all Force Feedback/Rumble effects through Linux ff-memless effect emulation
- Supports Trigger Force Feedback in every game by applying a pressure-dependent effect intensity to the current rumble effect (not even supported in Windows)
- Supports disabling FF
- Supports multiple Gamepads at the same time (not even supported in Windows)
- Offers a consistent mapping, even if the Gamepad was paired to Windows/Xbox before, and independent of software layers (SDL2, Stadia via Chrome Gamepad API, etc)
- Working Select, Start, Mode buttons
- Correct Axis Range (signed, important for e.g. RPCS3)
- Supports Battery Level Indication (including the Play `n Charge Kit)
- Easy Installation
- Agile Support and Development
- Supports customization through profiles
- Optional high-precision mode for Wine/Proton users
Xbox One S Wireless controller
The driver emulates profile switching for this controller by pressing buttons A, B, X, or Y while holding down the Xbox logo button. However, the following caveats apply:
- Profiles currently behave all the same, and there is no support for configuring them.
- Full support will be available once the Xbox Elite Series 2 controller is fully supported.
Xbox Elite Series 2 Wireless controller
While basic support for the Xbox Elite Series 2 Wireless controller is present, the following features are missing:
- Profile support. All four profiles behave the same way currently, and there is no support for configuring them.
- The four paddles at the bottom are currently not supported.
This driver respects the Nintendo layout of those controllers and exposes them correctly as button A, B, X, and Y as labelled on the device. This is swapped compared to the original Xbox controller layout. You can override that behavior with a quirk flag (by removing the Nintendo layout bit).
Breaking change: Users of previous versions of the driver may want to remove their custom SDL mappings. Full support has been added for these controllers and broken mapping of previously versions no longer needs to be applied. See also: SDL.
Make sure you have installed dkms, linux headers and a bluetooth implementation (e.g. bluez) and their dependencies.
- On Arch and Arch-based distros (like Antergos), try sudo pacman -S dkms linux-headers bluez bluez-utils
- On Debian based systems (like Ubuntu) you can install those packages by running sudo apt-get install dkms linux-headers-`uname -r`
- On Fedora, it is sudo dnf install dkms make bluez bluez-tools kernel-devel-`uname -r` kernel-headers-`uname -r`
- On Manjaro try sudo pacman -S dkms linux-latest-headers bluez bluez-utils
- On OSMC you will have to run the following commands sudo apt-get install dkms rbp2-headers-`uname -r` sudo ln -s «/usr/src/rbp2-headers-`uname -r`» «/lib/modules/`uname -r`/build» (as a workaround)
- On Raspbian, it is sudo apt-get install dkms raspberrypi-kernel-headers If you recently updated your firmware using rpi-update the above package may not yet include the header files for your kernel. Please follow the steps described here in this case.
- On generic distributions, it doesn’t need DKMS but requires a configured kernel source tree, then: cd hid-xpadneo && make modules && sudo make modules_install
Please feel free to add other Distributions as well!
- Download the Repository to your local machine git clone https://github.com/atar-axis/xpadneo.git
- cd xpadneo
- If using DKMS, run sudo ./install.sh
- If not using DKMS, follow steps above (generic distribution)
- Done!
- sudo bluetoothctl
- [bluetooth]# scan on
- wait until all available devices are listed (otherwise it may be hard to identify which one is the gamepad)
- push the connect button on upper side of the gamepad, and hold it down until the light starts flashing fast
- wait for the gamepad to show up in bluetoothctl, remember the address (e.g. C8:3F:26:XX:XX:XX )
- [bluetooth]# pair
- [bluetooth]# trust
- [bluetooth]# connect
- The parameter is optional if the command line already shows the controller name
You know that everything works fine when you feel the gamepad rumble 😉
- If using DKMS: Use sudo ./configure.sh to configure the driver as you wish. The script will guide you through the available options.
The driver supports switching between different profiles on the Xbox One S controller by holding down the Xbox logo button while pressing button A, B, X, or Y to select one of four profiles. This switching can be done at any time even while in a game. The API for customizing each profile does not exist yet.
In order to update xpadneo, do the following
- Update your cloned repo: git pull
- If using DKMS: Run sudo ./update.sh
- otherwise follow the steps above (generic distribution)
- If using DKSM: Run sudo ./uninstall.sh to remove all installed versions of hid-xpadneo
- otherwise follow the steps above (generic distribution)
For further information please visit the GitHub Page https://atar-axis.github.io/xpadneo/ which is generated automatically from the content of the /docs folder.
You will find there e.g. the following sections
About
Advanced Linux Driver for Xbox One Wireless Controller (shipped with Xbox One S)