Most of the source comes from: Steam Beta Forum
Thank you so much to everyone in the forum for contributing, for reaching out to 8BitDo to request switching between XInput/DInput/Switch mode on the dongle, to Valve for adding support on DInput mode, to the SDL developers (and 8bitdo) for adding support on DInput mode, and finally, to the Linux kernel developers for adding support on XInput mode.
This gist summarizes everything from that forum.
So after the latest firmware update (as the time of writing: Controller 1.06, Adapter 1.04), its now possible to switch to DInput and Switch mode by holding B
(DInput) or Y
(Switch) while turning on the controller.
Note: If you try holding B
or Y
while in the dock and pick that up, it will not change the mode. You have to manually turn off the controller undocked (hold the home/guide button for 3 second) and turn it back (press home/guide button) while holding either B
or Y
Wired - XInput only
Dongle/2.4Ghz - XInput, DInput (B), Switch (Y)
Bluetooth - DInput only
Hopefully, a future firmware update will allow switching between modes when using wired or Bluetooth.
8bitdo Ultimate 2 Wireless on XInput mode work ootb now on kernel 6.15+ (using built-in xpad
driver)
https://github.com/torvalds/linux/commit/22cd66a5db56a07d9e621367cb4d16ff0f6baf56
In this mode, just like with other XInput controller, will not register gyro and additional button.
Hold Y
while turning on your controller
Switch mode supports native gyro but no additional button and no capture button. Thus, you can use it with a Switch emulator or the actual device. For the Switch mode, it's supported ootb by hid_nintendo
driver.
Do note that your XYAB will be swapped (so the bottom button is now B
not A
, just like a Switch/Pro Controller).
Works great if you use Switch emulator, rumble and gyro works ootb and you don't need to configure it manually. Except if you want to swap the XYAB
Oh, for battery reporting on Switch mode, yeah it doesn't work and it's always at 55%
If you want an actual battery percentage, you have to use bluetooth.
Hold B
while turning on your controller
The DInput mode will register the 4 additional button (R4, L4, PL, PR) and native gyro after using udev, see below. Thus, you can map those with steam input.
Note: If you map any of the additional buttons using the Ultimate Software or the square button, it will register the mapped button instead of the original one. For example, if you map PL to LB, pressing PL will register as LB, not PL.
It will shows the correct icon for the controller and with the additional button, as well the gyro on Steam
If you use SteamOS/Bazzite, it seems that it's already configured by default.
To get the additional button, gyro, and rumble working on DInput. You need to specify a udev rule.
# 2.4GHz/Dongle
KERNEL=="hidraw*", ATTRS{idProduct}=="6012", ATTRS{idVendor}=="2dc8", MODE="0660", TAG+="uaccess"
# Bluetooth
KERNEL=="hidraw*", KERNELS=="*2DC8:6012*", MODE="0660", TAG+="uaccess"
Save it in /etc/udev/rules.d/71-8bitdo-u2w.rules
, then reload udev (sudo udevadm control --reload
)
Worth noting that it you ever turn the controller back on with the power button (instead of lifting it off the dock) without holding B or Y it will revert to XInput again. I'd rather they had bound xinput to another button instead. Not holding my breath, but I sent them an email about it.