-
Notifications
You must be signed in to change notification settings - Fork 45
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add Xbox One Elite 2 Controller #59
base: master
Are you sure you want to change the base?
Conversation
I can confirm that this rule resolves detection of "Xbox Elite Series 2 Controller" (on latest "BLE" firmware). |
If useful, there is the output of
|
Can confirm this fixes the issues I currently have using my Elite 2 controller under Debian 12 w/Plasma. |
Another note, 60-steam-input.rules seems to be missing on my Steam Deck and I have had no issues there so that makes sense. I wonder how it is implemented on the deck and why that is not rolled into the regular Steam install. |
I think I'm the opener of the original issue (ValveSoftware/steam-for-linux#7852). After I added the line in the file and restarted udev it was recognized correctly. Now it has the wrong name under USB (Elite instead of Elite 2). Maybe it would be fruitful to add the fix to this PR to create full cover of both cases, Bluetooth and USB, but I don't know if this is possible. |
The Xbox Elite Controller Series 2 has a feature where you can map the gamepad buttons into keyboard keys, and then save those mappings onto the device's on-board memory [1]. To implement this, the controller's HID report descriptor has two separate collections: one is a gamepad, and the other is a full PC keyboard. This way, the gamepad can press keyboard buttons if configured to do so. As far as `builtin-input_id` can tell, this device is a keyboard. So, it's not tagged with uaccess, and so Steam cannot use the device. The solution is to special-case this device in hwdb Note that this issue is likely affecting the Xbox Adaptive Controller as well. I don't have one that I can test with to verify. Fixes: ValveSoftware/steam-for-linux#7852 Alternative: ValveSoftware/steam-devices#59 [1]: https://news.xbox.com/en-us/2023/08/03/keyboard-button-mapping-for-xbox-controllers/
Here's an alternative approach that doesn't require punching additional holes via steam-input: systemd/systemd#35023 The problem is that the Elite 2 is simultaneously a gamepad and a keyboard. The operating system (specifically: udev) generally doesn't let apps (in this case: Steam) have unrestricted access to keyboards. For reasons, udev prevents itself from marking a device as both a keyboard and a gamepad; such a device is always marked as just a keyboard. So the fix is to mark the device as a gamepad too, which makes it available to Steam |
Whoops, scratch my previous comment. This is the right approach. There's a subtle difference between the two: this PR gives Steam direct raw HID access to the controller, whereas my PR gives Steam access to the evdev event stream for the controller. Raw HID supports Elite-specific buttons like the back paddles, but evdev does not. So, with this PR the controller shows up with all of its features, and with my PR the controller shows up in Steam like a basic Xbox controller. |
Hello @Plagman, when you have a moment, could you please take a look at this PR? Thank you! |
No description provided.