xone is a Linux kernel driver for Xbox One and Xbox Series X|S accessories.

xone Build Badge Release Badge Discord Badge Donate Button

xone is a Linux kernel driver for Xbox One and Xbox Series X|S accessories. It serves as a modern replacement for xpad, aiming to be compatible with Microsoft's Game Input Protocol (GIP). If you are looking for a way to use your controller via Bluetooth, check out xpadneo.

Important notes

This driver is still in active development. Use at your own risk! Any feedback including bug reports, suggestions or ideas is greatly appreciated.

Features

  • Input and force feedback (rumble)
  • Battery reporting (UPower integration)
  • LED brightness control (using /sys/class/leds)
  • Audio capture/playback (through ALSA)
  • Power management (suspend/resume)
  • Wireless connectivity (via dongle)

Supported devices

  • Gamepads
    • Xbox One Controllers
    • Xbox Series X|S Controllers
    • Third party controllers (PowerA, PDP, etc.)
  • Headsets
    • Xbox One Chat Headset
    • Xbox One Stereo Headset (adapter or jack)
    • Xbox Wireless Headset
    • Third party wireless headsets (SteelSeries, Razer, etc.)
  • Racing wheels
  • Xbox One Chatpad
  • Xbox Adaptive Controller
  • Mad Catz Rock Band 4 Wireless Stratocaster
  • Mad Catz Rock Band 4 Wireless Drum Kit

Releases

Packaging status

Feel free to package xone for any Linux distribution or hardware you like. Any issues regarding the packaging should be reported to the respective maintainers.

Installation

Prerequisites

  • Linux (kernel 4.15+ and headers)
  • DKMS

Clone the repository:

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

Install xone using the following command:

sudo ./install.sh --release

NOTE: Please omit the --release flag when asked for your debug logs.

Updating

Make sure to completely uninstall xone before updating:

sudo ./uninstall.sh

License

xone is released under the GNU General Public License, Version 2.

Copyright (C) 2021 Severin von Wnuck

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.
Owner
Severin
Electronic engineering student at RWTH Aachen
Severin
Comments
  • Add share button support for 1914 controllers

    Add share button support for 1914 controllers

    Add share button support like it was done in chromium (https://github.com/chromium/chromium/commit/5bdda9019e93c954881d204c1b39886a1bf09be4) and xpad (https://github.com/torvalds/linux/commit/0b1d6c8c00157cbfcf343925c4de81af0187a7b7)

    I bound it to KEY_RECORD as that's what xpad and xpadneo did, though I'm not sure that's the best solution.

  • Feature Request: Xbox 360 Support

    Feature Request: Xbox 360 Support

    There is no issue or discussion tab on this github project and I do not have discord and will not use discord due to their privacy policy. Sorry for opening a pull request but this is the only way I can make a feature request.

    Please add support for Xbox 360 controllers and headsets to replace xpad completely.

  • Add SCUF vendor ID

    Add SCUF vendor ID

    Tested with SCUF Instinct Pro.

    [  530.947911] usb 5-3.2: new full-speed USB device number 12 using xhci_hcd
    [  531.027928] usb 5-3.2: device descriptor read/64, error -32
    [  531.215941] usb 5-3.2: device descriptor read/64, error -32
    [  531.403922] usb 5-3.2: new full-speed USB device number 13 using xhci_hcd
    [  531.526704] usb 5-3.2: New USB device found, idVendor=2e95, idProduct=0504, bcdDevice= 5.09
    [  531.526708] usb 5-3.2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
    [  531.526711] usb 5-3.2: Product: Controller
    [  531.526712] usb 5-3.2: Manufacturer: Microsoft
    [  531.526714] usb 5-3.2: SerialNumber: xxxxxxxxxxxxxxxxxxxxxxxxxxxx
    [  531.729794] usb 5-3.2: reset full-speed USB device number 13 using xhci_hcd
    [  531.860758] usbcore: registered new interface driver xone-wired
    [  532.179192] input: Microsoft X-Box One pad as /devices/pci0000:40/0000:40:01.1/0000:41:00.0/0000:42:08.0/0000:48:00.1/usb5/5-3/5-3.2/5-3.2:1.0/gip0/gip0.0/input/input40
    
  • Add step-by-step guide to the README

    Add step-by-step guide to the README

    Firstly, I want to say thank you for all of the work you've put into this amazing driver! Your generosity and ingenuity is greatly appreciated!!!

    Purpose

    While trying to figure out how to use my wireless headset and Xbox Dongle, I found it was pretty difficult to not only figure out which one of the three drivers to use, but also to figure out what steps to actually go through to verify it was working after running the install script. (I'm a full-time developer and long-time linux user)

    Changes

    This PR reformats the README to hopefully be a bit more clear regarding how to use this amazing driver, targeted at people not super well versed in how to install/test custom drivers. It's mostly just breaking things into a step by step guide and separating out key sections so they are harder to miss.

    Follow-ups

    • [X] I'd like to also create a similar PR to the master branch to improve discoverability of the headset/wireless dongle support - #5
    • [X] I'd like to create a PR to add an updated warning message to xow to make it more clear that people should use xone instead - https://github.com/medusalix/xow/pull/198
  • Issue: Xbox Wireless Headset immediately disconnects

    Issue: Xbox Wireless Headset immediately disconnects

    First of all, I apologize for creating a PR but I can't see any other option for reporting an issue, since the Issues tab in not available for this project. I'm aware that there's a Discord server, but I don't use Discord because it requires to disclose my phone number to a party I don't trust. As a side note, I want to mention that locking all discussion of the project behind proprietary platform which doesn't respect user's privacy is not is spirit of FOSS and Linux in my opinion. I don't want to sound entitled, I really thank you for your effort.

    NOW TO ACTUAL ISSUE:

    I'm using "experimental" branch. I'm trying to use my Xbox Wireless Headset using Xbox Wireless Adapter (Bus 005 Device 007: ID 045e:02fe Microsoft Corp. XBOX ACC). The headset is paired. I did it on Windows machine, but I also tried paring using this driver. When I turn on the device, for a brief moment I can see new input and output device in Gnome settings: Analog Output/Input - XBOX ACC, but then the headset turns off.

    sudo dmesg | grep xone:

    [    8.922748] xone-dongle 5-1:1.0: xone_mt76_load_firmware: resetting firmware...
    [    8.925622] xone-dongle 5-1:1.0: xone_mt76_init_chip: id=0x7613
    [    8.954873] xone-dongle 5-1:1.0: xone_mt76_init_address: address=6c:5d:3a:13:0d:76
    [    8.959412] xone-dongle 5-1:1.0: xone_mt76_evaluate_channels: channel=1, power=30
    [    8.961287] xone-dongle 5-1:1.0: xone_mt76_evaluate_channels: channel=6, power=31
    [    8.963161] xone-dongle 5-1:1.0: xone_mt76_evaluate_channels: channel=11, power=32
    [    8.965036] xone-dongle 5-1:1.0: xone_mt76_evaluate_channels: channel=36, power=42
    [    8.966912] xone-dongle 5-1:1.0: xone_mt76_evaluate_channels: channel=40, power=42
    [    8.968787] xone-dongle 5-1:1.0: xone_mt76_evaluate_channels: channel=44, power=42
    [    8.970662] xone-dongle 5-1:1.0: xone_mt76_evaluate_channels: channel=48, power=42
    [    8.972536] xone-dongle 5-1:1.0: xone_mt76_evaluate_channels: channel=149, power=39
    [    8.974411] xone-dongle 5-1:1.0: xone_mt76_evaluate_channels: channel=153, power=39
    [    8.976287] xone-dongle 5-1:1.0: xone_mt76_evaluate_channels: channel=157, power=39
    [    8.978164] xone-dongle 5-1:1.0: xone_mt76_evaluate_channels: channel=161, power=39
    [    8.980036] xone-dongle 5-1:1.0: xone_mt76_evaluate_channels: channel=165, power=39
    [    8.980371] xone-dongle 5-1:1.0: xone_mt76_init_channels: channel=165
    [   10.050653] usbcore: registered new interface driver xone-dongle
    [   27.193810] xone-dongle 5-1:1.0: xone_mt76_send_firmware: build=201703281033____
    [   27.342131] xone-dongle 5-1:1.0: xone_mt76_init_chip: id=0x7613
    [   27.371380] xone-dongle 5-1:1.0: xone_mt76_init_address: address=6c:5d:3a:13:0d:76
    [   27.375920] xone-dongle 5-1:1.0: xone_mt76_evaluate_channels: channel=1, power=30
    [   27.377794] xone-dongle 5-1:1.0: xone_mt76_evaluate_channels: channel=6, power=31
    [   27.379669] xone-dongle 5-1:1.0: xone_mt76_evaluate_channels: channel=11, power=32
    [   27.381544] xone-dongle 5-1:1.0: xone_mt76_evaluate_channels: channel=36, power=42
    [   27.383419] xone-dongle 5-1:1.0: xone_mt76_evaluate_channels: channel=40, power=42
    [   27.385294] xone-dongle 5-1:1.0: xone_mt76_evaluate_channels: channel=44, power=42
    [   27.387169] xone-dongle 5-1:1.0: xone_mt76_evaluate_channels: channel=48, power=42
    [   27.389044] xone-dongle 5-1:1.0: xone_mt76_evaluate_channels: channel=149, power=39
    [   27.390919] xone-dongle 5-1:1.0: xone_mt76_evaluate_channels: channel=153, power=39
    [   27.392794] xone-dongle 5-1:1.0: xone_mt76_evaluate_channels: channel=157, power=39
    [   27.394669] xone-dongle 5-1:1.0: xone_mt76_evaluate_channels: channel=161, power=39
    [   27.396544] xone-dongle 5-1:1.0: xone_mt76_evaluate_channels: channel=165, power=39
    [   27.396879] xone-dongle 5-1:1.0: xone_mt76_init_channels: channel=165
    [   80.090303] xone-gip gip0: gip_create_adapter: registered
    [   80.090444] xone-dongle 5-1:1.0: xone_dongle_handle_association: wcid=1, address=7e:ed:8b:00:02:b2
    [   80.178418] xone-gip gip0.0: gip_init_client: initialized
    [   80.178421] xone-gip gip0.0: gip_handle_pkt_announce: address=7e:ed:8b:00:02:b2, vendor=0x045e, product=0x0b17
    [   80.178423] xone-gip gip0.0: gip_handle_pkt_announce: firmware=0.0.9.0, hardware=1.1.1.1
    [   80.194413] xone-gip gip0.0: gip_parse_chunk: offset=0xe4, length=0x3a
    [   80.194415] xone-gip gip0.0: gip_init_chunk_buffer: length=0xe4
    [   80.210731] xone-gip gip0.0: gip_parse_chunk: offset=0x3a, length=0x3a
    [   80.219045] xone-gip gip0.0: gip_parse_chunk: offset=0x74, length=0x3a
    [   80.227326] xone-gip gip0.0: gip_parse_chunk: offset=0xae, length=0x36
    [   80.243641] xone-gip gip0.0: gip_parse_chunk: offset=0xe4, length=0x00
    [   80.243644] xone-gip gip0.0: gip_copy_chunk_data: buffer complete
    [   80.243645] xone-gip gip0.0: gip_parse_external_commands: command=0x43, length=0x0c, options=0x10
    [   80.243646] xone-gip gip0.0: gip_parse_external_commands: command=0x42, length=0x0c, options=0x08
    [   80.243647] xone-gip gip0.0: gip_parse_audio_formats: formats=09-10
    [   80.243649] xone-gip gip0.0: gip_parse_capabilities: out=01-02-03-04-06-08-0c-1e-1f-60
    [   80.243650] xone-gip gip0.0: gip_parse_capabilities: in=01-04-05-06-08-0c-1e-1f-60
    [   80.243651] xone-gip gip0.0: gip_parse_classes: class=Windows.Xbox.Input.Headset
    [   80.243652] xone-gip gip0.0: gip_parse_interfaces: guid=1291dedb-5cfb-764e-b2cc-c2881d30ceb5
    [   80.243653] xone-gip gip0.0: gip_parse_interfaces: guid=e61e1a33-863b-5743-a7a5-c34e2c295dba
    [   80.243654] xone-gip gip0.0: gip_parse_interfaces: guid=56ff7697-fd9b-8145-ad45-b645bba526d6
    [   80.243654] xone-gip gip0.0: gip_parse_interfaces: guid=a3d125bc-4ec2-9249-9dda-ef4f123ef5dc
    [   80.243655] xone-gip gip0.0: gip_parse_interfaces: guid=abf406a0-146f-aa49-805f-82698f814bbf
    [   80.243688] xone-gip gip0.0: gip_add_client: added
    [   81.264208] xone-gip-headset gip0.0: gip_headset_config: format=0x09/0x10
    [   81.277548] xone-gip-headset gip0.0: gip_make_audio_config: rate=24000/1, buffer=384
    [   81.277552] xone-gip-headset gip0.0: gip_make_audio_config: rate=48000/2, buffer=1536
    [   82.887935] xone-gip-headset gip0.0: gip_send_audio_samples: get buffer failed: -28
    [   82.895933] xone-gip-headset gip0.0: gip_send_audio_samples: get buffer failed: -28
    [   82.903933] xone-gip-headset gip0.0: gip_send_audio_samples: get buffer failed: -28
    [   82.911932] xone-gip-headset gip0.0: gip_send_audio_samples: get buffer failed: -28
    [   82.919931] xone-gip-headset gip0.0: gip_send_audio_samples: get buffer failed: -28
    [   82.927931] xone-gip-headset gip0.0: gip_send_audio_samples: get buffer failed: -28
    [   82.935930] xone-gip-headset gip0.0: gip_send_audio_samples: get buffer failed: -28
    [   82.943929] xone-gip-headset gip0.0: gip_send_audio_samples: get buffer failed: -28
    [   82.951928] xone-gip-headset gip0.0: gip_send_audio_samples: get buffer failed: -28
    [   82.959929] xone-gip-headset gip0.0: gip_send_audio_samples: get buffer failed: -28
    [   82.967928] xone-gip-headset gip0.0: gip_send_audio_samples: get buffer failed: -28
    [   82.975927] xone-gip-headset gip0.0: gip_send_audio_samples: get buffer failed: -28
    [   82.983926] xone-gip-headset gip0.0: gip_send_audio_samples: get buffer failed: -28
    [   82.991927] xone-gip-headset gip0.0: gip_send_audio_samples: get buffer failed: -28
    [   82.999925] xone-gip-headset gip0.0: gip_send_audio_samples: get buffer failed: -28
    [   83.007925] xone-gip-headset gip0.0: gip_send_audio_samples: get buffer failed: -28
    [   83.015923] xone-gip-headset gip0.0: gip_send_audio_samples: get buffer failed: -28
    [   83.023923] xone-gip-headset gip0.0: gip_send_audio_samples: get buffer failed: -28
    [   83.031922] xone-gip-headset gip0.0: gip_send_audio_samples: get buffer failed: -28
    [   83.039923] xone-gip-headset gip0.0: gip_send_audio_samples: get buffer failed: -28
    [   83.047921] xone-gip-headset gip0.0: gip_send_audio_samples: get buffer failed: -28
    [   83.055921] xone-gip-headset gip0.0: gip_send_audio_samples: get buffer failed: -28
    [   83.063920] xone-gip-headset gip0.0: gip_send_audio_samples: get buffer failed: -28
    [   83.071920] xone-gip-headset gip0.0: gip_send_audio_samples: get buffer failed: -28
    [   83.079919] xone-gip-headset gip0.0: gip_send_audio_samples: get buffer failed: -28
    [   83.087919] xone-gip-headset gip0.0: gip_send_audio_samples: get buffer failed: -28
    [   83.095917] xone-gip-headset gip0.0: gip_send_audio_samples: get buffer failed: -28
    [   83.103918] xone-gip-headset gip0.0: gip_send_audio_samples: get buffer failed: -28
    [   83.111916] xone-gip-headset gip0.0: gip_send_audio_samples: get buffer failed: -28
    [   83.119916] xone-gip-headset gip0.0: gip_send_audio_samples: get buffer failed: -28
    [   83.127915] xone-gip-headset gip0.0: gip_send_audio_samples: get buffer failed: -28
    [   83.135915] xone-gip-headset gip0.0: gip_send_audio_samples: get buffer failed: -28
    [   83.575092] xone-dongle 5-1:1.0: xone_dongle_handle_loss: wcid=1
    [   83.575096] xone-dongle 5-1:1.0: xone_dongle_handle_disassociation: wcid=1, address=7e:ed:8b:00:02:b2
    [   83.575098] xone-gip-headset gip0.0: gip_remove_client: removed
    [   83.575524] xone-gip gip0: gip_destroy_adapter: unregistered
    

    Distro: Arch Kernel: 5.15.13.arch1-1 Gnome: 1:41.3-1 Pulseaudio: 15.0-1

  • Add step-by-step guide and reformat README

    Add step-by-step guide and reformat README

    Mostly a cut-paste from #4 (minus unmerged features) to help people understand how to use this driver more easily. See PR description for #4 for more details

  • Add BDA vendor ID

    Add BDA vendor ID

    This adds support for the BDA Xbox ONE Core controller, I'm not entirely sure as what this controller is sold online. The user said it would be a PowerA, but it has a different vendor id and identifies itself as BDA. The device connects and uses xone-wired, headset works as well.

    bda

Multi Theft Auto (MTA) is a software project that adds network play functionality to Rockstar North's Grand Theft Auto game series,

Multi Theft Auto: San Andreas Multi Theft Auto (MTA) is a software project that adds network play functionality to Rockstar North's Grand Theft Auto g

Oct 22, 2021
To recreate the board game Scotland yard and enable a single player to play the game by letting one of the roles being played by the computer based on written algorithm
To recreate the board game Scotland yard and  enable a single player to play the game by letting one of the roles being played by the computer based on written algorithm

Scotland Yard GAME OF SCOTLAND YARD This is a custom version of the classic board game, Scotland Yard .The game uses the London map used in the origin

Nov 11, 2021
After a few loose attempts at porting Source-games; here comes my first real one!

StanleyParable-Vita After a few loose attempts at porting Source-games; here comes my first real one! (For anyone who wonders what happened to the HL2

Sep 21, 2021
A video game I created for one of my CS classes.

Eclipse This is a video game I created for one of my CS classes. It game will run on Mac or Linux. Requirements This game requires that Mednafen be in

Dec 21, 2021
One framework for creating powerful cross-platform games.

MonoGame One framework for creating powerful cross-platform games. The spiritual successor to XNA with thousands of titles shipped across desktop, mob

Jun 14, 2022
CSGO ESP, Web Radar and Grenade helper using kernel hook for km-um communication
CSGO ESP, Web Radar and Grenade helper using kernel hook for km-um communication

kernel-csgo-esp-webradar Csgo ESP and Web Radar using kernel hook for km-um communication. Manual map your driver using kdmapper uses Nvidia overlay h

Jun 17, 2022
GB Studio is a quick and easy to use retro adventure game creator for Game Boy available for Mac, Linux and Windows
GB Studio is a quick and easy to use retro adventure game creator for Game Boy available for Mac, Linux and Windows

GB Studio is a quick and easy to use retro adventure game creator for Game Boy available for Mac, Linux and Windows

Jun 21, 2022
A Binary Clock. Written 3 different ways. C and SDL, Python and PyGame, Python and PyGame Zero.

Super Clock A Binary Clock. Written 3 different ways. Python with PyGame Zero, Python with PyGame and C with SDL2. Time is displayed in 3 groups of 8

Dec 8, 2021
Gaming meets modern C++ - a fast and reliable entity component system (ECS) and much more
Gaming meets modern C++ - a fast and reliable entity component system (ECS) and much more

EnTT is a header-only, tiny and easy to use library for game programming and much more written in modern C++. Among others, it's used in Minecraft by

Jun 22, 2022
Powerful, mature open-source cross-platform game engine for Python and C++, developed by Disney and CMU
Powerful, mature open-source cross-platform game engine for Python and C++, developed by Disney and CMU

Panda3D Panda3D is a game engine, a framework for 3D rendering and game development for Python and C++ programs. Panda3D is open-source and free for a

Jun 21, 2022
OGRE is a scene-oriented, flexible 3D engine written in C++ designed to make it easier and more intuitive for developers to produce games and demos utilising 3D hardware.
OGRE  is a scene-oriented, flexible 3D engine written in C++ designed to make it easier and more intuitive for developers to produce games and demos utilising 3D hardware.

OGRE (Object-Oriented Graphics Rendering Engine) is a scene-oriented, flexible 3D engine written in C++ designed to make it easier and more intuitive for developers to produce games and demos utilising 3D hardware. The class library abstracts all the details of using the underlying system libraries like Direct3D and OpenGL and provides an interface based on world objects and other intuitive classes.

Jun 20, 2022
Minecraft 4k: decompiled, translated to C using SDL for graphics and input, and improved upon
Minecraft 4k: decompiled, translated to C using SDL for graphics and input, and improved upon

M4KC Minecraft 4K - C Rewrite For those who don't know, Minecraft 4K was a stripped down version of Minecraft submitted by Notch to the Java 4K Game P

Jun 15, 2022
an AI and gameplay editor for game development, written by c++ , suppport lua and python

an AI and gameplay editor for game development, written by c++ , suppport lua and python

Dec 31, 2021
A multi core friendly rigid body physics and collision detection library suitable for games and VR applications.
A multi core friendly rigid body physics and collision detection library suitable for games and VR applications.

Jolt Physics Library A multi core friendly rigid body physics and collision detection library suitable for games and VR applications. A YouTube video

Jun 17, 2022
Source and data to build Sonic 3 A.I.R. (Angel Island Revisited) and the Oxygen Engine

Sonic 3 A.I.R. Source code incl. dependencies for "Sonic 3 - Angel Island Revisited", a fan-made remaster of Sonic 3 & Knuckles. Project homepage: htt

Jun 5, 2022
Freelancer: HD Edition is a mod that aims to improve every visual, aural, and gameplay aspect of the game Freelancer (2003) while keeping the look and feel as close to vanilla as possible.

Freelancer: HD Edition Freelancer: HD Edition is a mod that aims to improve every visual, aural, and gameplay aspect of the game Freelancer (2003) whi

Jun 15, 2022
The Atomic Game Engine is a multi-platform 2D and 3D engine with a consistent API in C++, C#, JavaScript, and TypeScript
The Atomic Game Engine is a multi-platform 2D and 3D engine with a consistent API in C++, C#, JavaScript, and TypeScript

The Atomic Game Engine is a multi-platform 2D and 3D engine with a consistent API in C++, C#, JavaScript, and TypeScript

Jun 19, 2022
Gaming meets modern C++ - a fast and reliable entity-component system (ECS) and much more
Gaming meets modern C++ - a fast and reliable entity-component system (ECS) and much more

EnTT is a header-only, tiny and easy to use entity-component system (and much more) written in modern C++. Among others, it's also used in Minecraft by Mojang and The Forge by Confetti.

Feb 16, 2021
Distributed server for social and realtime games and apps.
Distributed server for social and realtime games and apps.

Distributed server for social and realtime games and apps. Features Users - Register/login new users via social networks, email, or device ID. Storage

Jun 22, 2022