Skip to content

Instantly share code, notes, and snippets.

@barraIhsan
Last active November 1, 2025 18:00
Show Gist options
  • Save barraIhsan/783a82bcf32bed896c85d27dbb8018a5 to your computer and use it in GitHub Desktop.
Save barraIhsan/783a82bcf32bed896c85d27dbb8018a5 to your computer and use it in GitHub Desktop.
8BitDo Ultimate 2 Wireless on GNU/Linux, SteamOS, and Windows

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.

Switching Mode

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.

On windows, all three modes is supported ootb. Games could properly detect XInput and Switch mode. However, you should use Steam Input for translating DInput mode into XInput

XInput Mode

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.

Nintendo Switch (Pro Controller) Mode

Hold Y while turning on your controller

Switch mode works ootb since kernel 5.16 by hid_nintendo driver. 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.

Do note that your XYAB will be swapped (so the bottom button is now B not A, just like a Switch/Pro Controller).

image

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

Battery Reporting

Oh, for battery reporting on Switch mode, yeah it doesn't work and it's always at 55% image

If you want an actual battery percentage, you have to use bluetooth. image

Direct Input (DInput) Mode

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 and be translated into XInput for games.

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

Additional button

image

Gyro

image

udev rule for DInput

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 (# udevadm control --reload)

udev rule for other 8bitdo controllers

Simply change idProduct to the controller's idProduct. You can check them using $ lsusb

OR

You can omit idProduct to make it work for all 8bitdo controller. So it'll become:

# 2.4GHz/Dongle
KERNEL=="hidraw*", ATTRS{idVendor}=="2dc8", MODE="0660", TAG+="uaccess"
# Bluetooth
KERNEL=="hidraw*", KERNELS=="*2DC8:*", MODE="0660", TAG+="uaccess"
@churuz-fyi
Copy link

churuz-fyi commented Oct 23, 2025

So, I think I still should do some testing, but I think my controller is remembering that it's set to DInput because picking it up from the dock it's already on DInput and will only reset back to XInput if I power cycle it again without holding Y or B. Again, I'll do a bit of testing.

Gamepad: FW v1.06
Dongle: FW v1.06

Edit: I am verifying this through Death Stranding on Steam on Bazzite. For some reason Death Stranding uses Japanese mappings (Nintendo) for DInput which is how I'm checking which mode it's on when I pick up the controller. Doing the power cycle how I mentioned sets it back to XInput because it's instead using Western button mappings. This is just on DS because Hollow Knight is working with Western mappings so I think it's just that DS thinks I'm a JP player because it's not an XInput device(?) I haven't verified how the power cycle affects motion controls, though they should stop working in XInput, but they're definitely working in DInput.

All tested with dongle. My PC doesn't have Bluetooth, that I know off, so I haven't tested that.

@barraIhsan
Copy link
Author

On the steam forum, some people reported that when using DInput on a Steam Input supported game
https://www.pcgamingwiki.com/wiki/List_of_games_that_support_Steam_Input_API
It will show Nintendo glyphs (possibly because the Start and Select are + and - ?)

So, I think I still should do some testing, but I think my controller is remembering that it's set to DInput because picking it up from the dock it's already on DInput and will only reset back to XInput if I power cycle it again without holding Y or B. Again, I'll do a bit of testing.

Regarding that, it will reset when there's a power loss (laptop shutdown, usb unplugged, etc.). Do note that when you hold B or Y when picking the controller from the dock, it wont change the mode.
You have to manually turn off (Hold Home) and do the mode switching after picking the controller up from the dock

@churuz-fyi
Copy link

List_of_games_that_support_Steam_Input_API It will show Nintendo glyphs (possibly because the Start and Select are + and - ?)

It's not showing the wrong glyphs. Its working as intended. Death Stranding doesn't use Steam Input it uses its own native format. The issue with Death Stranding is have (which is unrelated to the DInput) is just key maps being different which is a game issue not controller or Steam issue.

Regarding that, it will reset when there's a power loss (laptop shutdown, usb unplugged, etc.).

After shutting down my desktop and turning it back on it stayed in DInput and I didnt have to reenable DInput at any point.

Is it likely that the 1.06 firmware already handles that? Or that at the very least Bazzite might be forcing the controller to remain on DInput mode is my other guess.

I'll check tomorrow if it remains in DInput after a day long shut down and when switching from Bazzite to Windows and vice versa on a dual boot.

@barraIhsan
Copy link
Author

Is it likely that the 1.06 firmware already handles that? Or that at the very least Bazzite might be forcing the controller to remain on DInput mode is my other guess.

Just tested it, and nope, it's the same as before. (Tested on Arch)

@churuz-fyi
Copy link

Really odd then, I guess mine's just a really convenient exception. I'll see if any other users on the Bazzite Discord have the controller and could test it.

@falk4243
Copy link

falk4243 commented Oct 31, 2025

Really odd then, I guess mine's just a really convenient exception. I'll see if any other users on the Bazzite Discord have the controller and could test it.

Not an exception, mine does the same as long as it is just placed on the stand without manually turning it off, though it bugs out in Dinput mode quite a lot with huge input latency and often needs to be restarted after waking it up because of that. Would be great if these issues will eventually get ironed out and there's an option for the controller to remember the last setting - I don't really have any need for Xinput apart from updating the firmware, which does not work otherwise, but probably also could?

@barraIhsan
Copy link
Author

barraIhsan commented Oct 31, 2025

Not an exception, mine does the same as long as it is just placed on the stand without manually turning it off, though it bugs out in Dinput mode quite a lot (huge delay) and needs to be restarted often

Does it only affect Bazzite? Must be some udev thing or something else. For me, as long as you reconnect when the home button still blinking, you can retain the mode. Otherwise, it'll be on XInput again. Which is kinda annoying, but manageable since I often switch between DInput and Switch mode.

I don't really have any need for Xinput apart from updating the firmware, which does not work otherwise, but also probably could?

Yeah you need to be on XInput when updating the firmware.
There is one other use case for XInput on my end. When I play a game outside steam (e.g. heroic) and the game can only read XInput (which is somewhat rare ig? cuz I think even in DInput mode, some game can recognize the standard xbox layout)

That said, I don't think 8bitdo will ever do that, cuz they said it's not "officially supported". It's already great that they added DInput in the first place.

@falk4243
Copy link

Does it only affect Bazzite?

Still using Windows because of GFN Ultimate, but I have another machine with Bazzite installed. Will perhaps give it a shot this weekend.

That said, I don't think 8bitdo will ever do that, cuz they said it's not "officially supported". It's already great that they added DInput in the first place.

I also have my doubts, but one can wish :)

@barraIhsan
Copy link
Author

I also have my doubts, but one can wish :)

Yeah. I also wish that they would add mode switching to Wired and Bluetooth too
But considering the fact that they have Bluetooth model to specifically connect to Switch using bluetooth, I doubt it will have mode switching on Bluetooth since we can switch to Switch mode that way with the Wireless model

Either way, if both of them are granted, it would be perfect.

@meristo
Copy link

meristo commented Oct 31, 2025

it bugs out in Dinput mode quite a lot with huge input latency and often needs to be restarted after waking it up because of that.

This used to happen to me, but I haven't experienced it anytime lately. It's possible it was fixed in the update from the 1.06beta controller firmware to 1.06 stable, so you might try updating if you're still on the beta firmware.

@churuz-fyi
Copy link

Yes I've also not experienced bugs in DInput mode in 1.06 stable.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment