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"
@rempas
Copy link

rempas commented Oct 13, 2025

Thank you for this thread! This controller was recommended by the gyro community, as one of the best ones. I'm surprised and happy to see that gyro works on Dinput mode, as it has better latency than the switch mode and much much better than the one in my current controller. I hope they enable it on wired mode as well as, I'd like to not have it to wait to charge if I want to play.

One question. I see screenshots of the Ultimate 2 software been used. Is that on Linux??? I see no official support on it so, if it's on Linux, I suppose it's through wine. Also, if it doesn't work on Linux, if we use it on another OS (like Windows) and do changes, do the changes get saved in the controller's firmware, meaning that I can use another OS to make the changes and use it normally in my Linux PC?

Also, another question. Have you compared its gyro with Dualsense or any other controller that is know for having a great gyro like DS4 or Gamesir Tarantula? I maintain a gyro tier list and would like to add that controller there, if you (or anyone else) can make a comparison with it. Thanks!

@bcomnes
Copy link

bcomnes commented Oct 13, 2025

I play exclusively on Linux but the firmware tools for most controllers are really bad outside of windows. 8bd has macOS support but it lags behind in releases.

I ended up buying one of those inexpensive windows pcs and use it to update controller firmware with

https://amzn.to/42AJn4i Is the one I bought.

@Dark-Thoughts
Copy link

One question. I see screenshots of the Ultimate 2 software been used. Is that on Linux??? I see no official support on it so, if it's on Linux, I suppose it's through wine. Also, if it doesn't work on Linux, if we use it on another OS (like Windows) and do changes, do the changes get saved in the controller's firmware, meaning that I can use another OS to make the changes and use it normally in my Linux PC?

As stated before, you can run the software either in dual boot or in a virtual machine that runs Windows, where you funnel the USB connection through to the VM. Settings are saved on the controller itself, so they will be working within Linux.

@rempas
Copy link

rempas commented Oct 13, 2025

I play exclusively on Linux but the firmware tools for most controllers are really bad outside of windows. 8bd has macOS support but it lags behind in releases.

I ended up buying one of those inexpensive windows pcs and use it to update controller firmware with

https://amzn.to/42AJn4i Is the one I bought.

I see, thank you! Thankfully, my mother has a windows laptop so, I could use that.

@rempas
Copy link

rempas commented Oct 13, 2025

One question. I see screenshots of the Ultimate 2 software been used. Is that on Linux??? I see no official support on it so, if it's on Linux, I suppose it's through wine. Also, if it doesn't work on Linux, if we use it on another OS (like Windows) and do changes, do the changes get saved in the controller's firmware, meaning that I can use another OS to make the changes and use it normally in my Linux PC?

As stated before, you can run the software either in dual boot or in a virtual machine that runs Windows, where you funnel the USB connection through to the VM. Settings are saved on the controller itself, so they will be working within Linux.

That's awesome, thank you!!! I don't know if I'll buy the controller but, this is very positive news!

@rempas
Copy link

rempas commented Oct 14, 2025

It seems like they fixed whatever was causing the controller to not work in XInput mode on Proton-GE versions after 10-10. It now works on the most recent version (10-16).
I notice I still don't have rumble functionality in DInput mode, though. I'm not sure if this is due to the issue of it being disabled in SDL due to the earlier disconnect issue, or if there's something else going on.

At least for me, 10-17 did not work. But I am glad I found this thread because I have been trying for hours and hours to get my Ultimate 2c working on Bazzite. At least with Proton GE 10-10 my games are playable. Hopefully this is fixed in a meaningful manner soon!

You use the wireless 2.4Ghz or Bluetooth version of Ultimate 2C?

@meristo
Copy link

meristo commented Oct 15, 2025

One question. I see screenshots of the Ultimate 2 software been used. Is that on Linux??? I see no official support on it so, if it's on Linux, I suppose it's through wine.

The Ultimate 2 software actually does work perfectly via Proton (GE10-10). However, I still probably wouldn't risk updating firmware via Wine/Proton. It's potentially possible to brick your hardware by doing this. You can configure controller profiles without issue though.

I have an old SSD that I keep a windows install on, so I reboot to that when I need to update firmware.

Also, if it doesn't work on Linux, if we use it on another OS (like Windows) and do changes, do the changes get saved in the controller's firmware, meaning that I can use another OS to make the changes and use it normally in my Linux PC?

Yes.

@rempas
Copy link

rempas commented Oct 15, 2025

The Ultimate 2 software actually does work perfectly via Proton (GE10-10). However, I still probably wouldn't risk updating firmware via Wine/Proton. It's potentially possible to brick your hardware by doing this. You can configure controller profiles without issue though.

I have an old SSD that I keep a windows install on, so I reboot to that when I need to update firmware.

Yes.

Thanks for everything!

@churuz-fyi
Copy link

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

So will the controller reset to XInput each time that it gets placed on the dock or does it "remember" that it should be in DInput?

@bcomnes
Copy link

bcomnes commented Oct 22, 2025

It does not remember its mode unfortunately. That would be nice if it did but somehow with 8bd it’s never quite right.

@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