Skip to content

Instantly share code, notes, and snippets.

@ammuench
Last active July 12, 2025 08:43
Show Gist options
  • Save ammuench/0dcf14faf4e3b000020992612a2711e2 to your computer and use it in GitHub Desktop.
Save ammuench/0dcf14faf4e3b000020992612a2711e2 to your computer and use it in GitHub Desktop.
8BitDo Ultimate 2.4GHz wifi working in linux

FROM https://www.reddit.com/r/Fedora/comments/zmvkdj/8bitdo_ultimate_bluetooth_controller_working_in/


I've bought this new controller from 8BitDo and wished to use on linux, to my sadness the controller didn't work out of the box, neither by cable, the 2.4G dongle or bluetooth.

So I've tried a number of solutions and this one from u/GodOfEmus over in the 8bitdo community was the one to work for me:

  1. Create a new file /etc/udev/rules.d/99-8bitdo-xinput.rules
  2. Paste this udev rule in there, then save and exit the file:
  ACTION=="add", ATTRS{idVendor}=="2dc8", ATTRS{idProduct}=="3106", RUN+="/sbin/modprobe xpad", RUN+="/bin/sh -c 'echo 2dc8 3106 > /sys/bus/usb/drivers/xpad/new_id'"
  1. Run the following command in a terminal: sudo udevadm control --reload
  2. Unplug and replug the controller if it was already plugged in, it might take a second if you have the bluetooth version

It will basically "cheat" the OS to see the controller as an generic xbox device, so sadly no bluetooth nor gyro control if you care about that, but the rumbling is working for me.

Link to the original post: https://www.reddit.com/r/8bitdo/comments/ykdsmv/ultimate_24_ghz_model_right_analog_not_working_in/

And link to the comment of u/GodOfEmus with the solution: https://www.reddit.com/r/8bitdo/comments/ykdsmv/comment/iv48s4k/?utm_source=share&utm_medium=web2x&context=3

Sharing this solution here to spread the word in our community

@BeardSpike
Copy link

I just wanted to share.

I bought a second 8BitDo controller 2,4Ghz which is 2C like a two weeks ago.

This one always connects regardless of open apps and games through 2,4Ghz dongle.

I guess 3-Mode is just that weird, at least for me.

I might sell 2C in a while since 8BitDo just released Ultimate 2 controller with 1000Hz TMR joysticks and gyro - and I don't quite like vibrations on 2c plus feel of the grip/shell.

If I buy this new controller I will gladly share how it behaves under Linux for me.

@YogSottot
Copy link

YogSottot commented Mar 13, 2025

You can also try using this drivers instead of xpad
https://github.com/atar-axis/xpadneo or
https://github.com/medusalix/xone/

@Axlefublr
Copy link

@ammuench, thank you so much for making this guide! I just bought 8bitdo ultimate 2c, and was kinda hoping it'd just work out of the box, so I got scared when it didn't :c found this gist and got hope!... but it didn't work anyway... \ but that's where @gemantzu came in! I just blindly copy pasted the udev rule, but didn't think to check my model number! mine was 81HD (it's on the back of the controller). changed 3106 in both places in the udev rule to that, reloaded, and the controller worked!! :D thank you both!!

@asoltesz
Copy link

On OpenSUSE Tumbleweed, KDE Plasma, Wayland (2025-MAR-26 update level), the 8bitdo Ultimate (2.4 Ghz+BT) worked out of the box with the 2.4 Ghz USB dongle in Steam, no extra configuration was needed.

When switching the Controller to Bluetooth mode and paired, it is recognized as a keyboard and it doesn't work at all in Steam or elsewhere.

@barraIhsan
Copy link

Is there someone who use the new 8Bitdo Ultimate 2 Wireless? Does the rumble/vibration work on linux? What about the extra button?

@asoltesz
Copy link

Is there someone who use the new 8Bitdo Ultimate 2 Wireless? Does the rumble/vibration work on linux? What about the extra button?

I believe my Ultimate 2.4 Ghz+BT is practically the same as the Ultimate Wireless (just has an extra Bluetooth mode).

@themoses
Copy link

Is there someone who use the new 8Bitdo Ultimate 2 Wireless? Does the rumble/vibration work on linux? What about the extra button?

Yes it does work with the following udev rule:

ACTION=="add", ATTRS{idVendor}=="2dc8", ATTRS{idProduct}=="310a", MODE="0666", RUN+="/sbin/modprobe xpad", RUN+="/bin/sh -c 'echo 2dc8 310a > /sys/bus/usb/drivers/xpad/new_id'"

Rumble works ootb but the additional buttons will not be recognized as it maps to a default xbox controller.

@robtor-de
Copy link

Currently I don't get the Ultimate Bluetooth Cotnroller to work with the 2.4G wireless dongle, with any of the above udev rules.
I noticed that it enumerates as 2dc8:3109 and if the controller connects as 2dc8:3106, then the xpad driver automatically binds but after a few seconds usbcore logs a disconnect and 2dc8:3109 reappears.

I already thought about usb timing problems etc. and tried out different usbcore.quirks on the device bit they all did not succeed. When debug logging usb core messages one could see that it tempporarily also appears as a nintendo controller after xpad fails and then the dongel goes back to it's 2dc8:3109 mode. This weird behaviour started only from newer kernel versions on my archlinux hosts or on debian devices. On an older kernel on my libreelec raspi (also uses other usb host controllers) the controller works very well with the wireless 2.4G dongle.

I didn't found any solution yet, maybe sb. here has the same issue ar runs into it in the future.

Connecting the controller via cable works like a charm btw.

Here are some logs in Pastebin

@Khyretos
Copy link

themoses

this worked but i had to make 310b since it was listed differently in my system

@CaptainCoward
Copy link

This one always connects regardless of open apps and games through 2,4Ghz dongle.

Hey I'm interested in that controller. Does Bluetooth also work for you? I don't actually want to use that Dongle since it is huge and i hardly have space for it on my front.

@MichaelAldrich
Copy link

I almost started down the path of custom udev rules, but updating my kernel to 6.12 gave me plug and play working for my ultimate 2 wireless without any extra steps.

@mercster
Copy link

mercster commented Jun 22, 2025

Strangely, I had a bit of trouble... 6.14.11 on Fedora 42:

Jun 17 17:42:18 fedora kernel: usb 1-2.3.4: New USB device found, idVendor=2dc8, idProduct=310b, bcdDevice= 1.14
Jun 17 17:42:18 fedora kernel: usb 1-2.3.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Jun 17 17:42:18 fedora kernel: usb 1-2.3.4: Product: 8BitDo Ultimate 2 Wireless Controller for PC
Jun 17 17:42:18 fedora kernel: usb 1-2.3.4: Manufacturer: 8BitDo
Jun 17 17:42:18 fedora kernel: usb 1-2.3.4: SerialNumber: 99FB9EA46A
Jun 17 17:42:18 fedora kernel: input: 8BitDo Ultimate 2 Wireless Controller as /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.3/1-2.3.4/1-2.3.4:1.0/input/input34
Jun 17 17:42:18 fedora kernel: input: 8BitDo 8BitDo Ultimate 2 Wireless Controller for PC Keyboard as /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.3/1-2.3.4/1-2.3.4:1.1/0003:2DC8:310B.0007/input/input35
Jun 17 17:42:18 fedora kernel: input: 8BitDo 8BitDo Ultimate 2 Wireless Controller for PC Mouse as /devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.3/1-2.3.4/1-2.3.4:1.1/0003:2DC8:310B.0007/input/input36
Jun 17 17:42:18 fedora kernel: hid-generic 0003:2DC8:310B.0007: input,hidraw4: USB HID v1.11 Keyboard [8BitDo 8BitDo Ultimate 2 Wireless Controller for PC] on usb-0000:00:14.0-2.3.4/input1
Jun 17 17:42:18 fedora kernel: hid-generic 0003:2DC8:310B.0008: hiddev98,hidraw5: USB HID v1.11 Device [8BitDo 8BitDo Ultimate 2 Wireless Controller for PC] on usb-0000:00:14.0-2.3.4/input2
Jun 17 17:42:18 fedora mtp-probe[9687]: checking bus 1, device 12: "/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.3/1-2.3.4"
Jun 17 17:42:18 fedora mtp-probe[9687]: bus: 1, device: 12 was not an MTP device
Jun 17 17:42:18 fedora systemd-logind[987]: Watching system buttons on /dev/input/event12 (8BitDo 8BitDo Ultimate 2 Wireless Controller for PC Keyboard)
Jun 17 17:42:18 fedora mtp-probe[9713]: checking bus 1, device 12: "/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2/1-2.3/1-2.3.4"
Jun 17 17:42:18 fedora mtp-probe[9713]: bus: 1, device: 12 was not an MTP device
Jun 17 17:42:19 fedora kernel: usb 1-2.3.4: USB disconnect, device number 12
Jun 17 17:42:19 fedora kernel: xpad 1-2.3.4:1.0: xpad_try_sending_next_out_packet - usb_submit_urb failed with result -19

Would just cycle over and over... I added:

ACTION=="add", ATTRS{idVendor}=="2dc8", ATTRS{idProduct}=="3106", RUN+="/sbin/modprobe xpad", RUN+="/bin/sh -c 'echo 2dc8 3106 > /sys/bus/usb/drivers/xpad/new_id'"

as a udev rule, works fine now. I do keep Steam open in the background, which has always kept these 8BitDo devices alive for me, can't speak to what would happen if I killed Steam.

EDIT: Credit to @themoses for the udev rule, I see this thread is where I got it from. :-P
EDIT2: Wrong log.

@njanirudh
Copy link

njanirudh commented Jun 23, 2025

For future reference


📎 Gist: 8BitDo Ultimate 2C Wireless Controller on Linux (Steam + XInput Rule)

# USB Device Info
# Controller is detected via lsusb in both 2.4GHz wireless and wired USB modes.

Bus 001 Device 040: ID 2dc8:301c 8BitDo 8BitDo Ultimate 2C Wireless Controller
# Udev Rule for XInput Compatibility
# This rule sets proper permissions and ensures the xpad driver is loaded.

# File: /etc/udev/rules.d/99-8bitdo.rules

ACTION=="add", ATTRS{idVendor}=="2dc8", ATTRS{idProduct}=="301c", MODE="0666", \
  RUN+="/sbin/modprobe xpad", \
  RUN+="/bin/sh -c 'echo 2dc8 301c > /sys/bus/usb/drivers/xpad/new_id'"
# Notes:
- ✅ The controller is detected in both **2.4GHz mode** (via dongle) and **wired USB**.
-**Steam** correctly identifies the controller and maps inputs using Steam Input.
- ❌ GeForce NOW does **not natively detect DInput** devices (like 301c) unless launched via Steam.

Further Debugging

# Run this in a cmd line and plug in the 2.4ghz reciever 
sudo dmesg -w

@robtor-de
Copy link

So finally I came to the conclusion that the controller worked from the beginnging with the 2.4G dongle out of the box. The only problem was that it disconnects if nothing grabbed the input.
Having steam open resolves the problem.

As I also have non-steam use-cases for the controller I used the AUR package evedev-keepalive and patched the contained udev rules to match my controller and everthing works just fine.

Hopefully the xpad driver will integrate a fix.

The issue from xpad is referenced in the original repo from the evdev-keepalive project

Hope this helps as well with other 8bitdo controllers! (mine is the Ultimate Bluetooth variant)

@mercster
Copy link

So finally I came to the conclusion that the controller worked from the beginnging with the 2.4G dongle out of the box. The only problem was that it disconnects if nothing grabbed the input. Having steam open resolves the problem.

Yep, said this way back when https://gist.github.com/ammuench/0dcf14faf4e3b000020992612a2711e2?permalink_comment_id=4756745#gistcomment-4756745 two years ago. :-)

@barraIhsan
Copy link

barraIhsan commented Jun 27, 2025

Is there someone who use the new 8Bitdo Ultimate 2 Wireless? Does the rumble/vibration work on linux? What about the extra button?

Yes it does work with the following udev rule:

ACTION=="add", ATTRS{idVendor}=="2dc8", ATTRS{idProduct}=="310a", MODE="0666", RUN+="/sbin/modprobe xpad", RUN+="/bin/sh -c 'echo 2dc8 310a > /sys/bus/usb/drivers/xpad/new_id'"

Rumble works ootb but the additional buttons will not be recognized as it maps to a default xbox controller.

update: https://gist.github.com/barraIhsan/783a82bcf32bed896c85d27dbb8018a5

I thought it would be appropriate to create a new gist for Ultimate 2 Wireless, since this is about Ultimate 2.4GHz

Oh, I also heard that Ultimate 2c after firmware update, also possible to switch to DInput and Switch mode. And thus, with DInput the additional 2 button is exposed.
But I don't have 2c, so I can't test it

@teklynk
Copy link

teklynk commented Jun 28, 2025

It still doesn't work for me. I give up messing with this controller. It's been a waste of time. How difficult is it to make a controller that uses xinput and that shows up as a xbox 360 controller? I went back to using my $12.00 2.4ghz wireless controller since it works on everything. It's not great, but it works ootb and it shows up as a xbox 360 controller device.

@BeardSpike
Copy link

BeardSpike commented Jun 28, 2025

It still doesn't work for me. I give up messing with this controller. It's been a waste of time. How difficult is it to make a controller that uses xinput and that shows up as a xbox 360 controller? I went back to using my $12.00 2.4ghz wireless controller since it works on everything. It's not great, but it works ootb and it shows up as a xbox 360 controller device.

I already ditched 8BitDo controllers for GameSir.

No additional tinkering, they can switch from Xinput to Dinput to Switch input with a simple combo of buttons.

No need to add that they hold 1000Hz polling rate almost spot on, while Ultimate 2 goes up to like 600Hz range.

They also have Hall Effect joysticks and TMR Joysticks in their controllers. And are testing something potentially even better.

Plus their CEO is very active on socials.

So you can actually ask a lot of things.

@barraIhsan
Copy link

It still doesn't work for me. I give up messing with this controller. It's been a waste of time. How difficult is it to make a controller that uses xinput and that shows up as a xbox 360 controller? I went back to using my $12.00 2.4ghz wireless controller since it works on everything. It's not great, but it works ootb and it shows up as a xbox 360 controller device.

It is XInput on dongle and wired mode. Or am I missing something here?

@Khyretos
Copy link

KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idProduct}=="6012", ATTRS{idVendor}=="2dc8", MODE="0660", TAG+="uaccess", TAG+="udev-acl"

Hey i have a wireless ultimate 2 and i would like to try the DInput, do i just need to add this line to my rules?
for example this is my current rule for the controller:

ACTION=="add", ATTRS{idVendor}=="2dc8", ATTRS{idProduct}=="310b", MODE="0666", RUN+="/sbin/modprobe xpad", RUN+="/bin/sh -c 'echo 2dc8 310b > /sys/bus/usb/drivers/xpad/new_id'"

do i just need to add that line below it?

@barraIhsan
Copy link

yes, you can add multiple rules into one file.

For example, 1st party and some of the 3rd party controller are also included in steam input. You can find it on /usr/lib/udev/rules.d/60-steam-input.rules

Huh, your udev rule is for the XInput right? I don't think it's needed anymore, but it doesn't hurt to just include that anyway.

@Khyretos
Copy link

yes, you can add multiple rules into one file.

For example, 1st party and some of the 3rd party controller are also included in steam input. You can find it on /usr/lib/udev/rules.d/60-steam-input.rules

Huh, your udev rule is for the XInput right? I don't think it's needed anymore, but it doesn't hurt to just include that anyway.

i had the controller before steam supported it and i had to add the rule.
i updated the controllers firmware and the nintendo switch mode works perfectly with Gyro but i cant make it detect gyro with the direct input mode (Power on + B). steam does detect and the additional buttons options appear but for some reason its very buggy, i turn it on and it inmeadeatly untoggles when i close it.

image

@barraIhsan
Copy link

i had the controller before steam supported it and i had to add the rule.

it was actually the linux kernel that updated to support the XInput on this controller.

steam does detect and the additional buttons options appear but for some reason its very buggy, i turn it on and it inmeadeatly untoggles when i close it.

huh, did you try clicking the edit layout instead? and assign the button manually?
Oh, for now, to correctly display 8bitdo's additional button, you have to use steam beta
image

@Khyretos
Copy link

i had the controller before steam supported it and i had to add the rule.

it was actually the linux kernel that updated to support the XInput on this controller.

steam does detect and the additional buttons options appear but for some reason its very buggy, i turn it on and it inmeadeatly untoggles when i close it.

huh, did you try clicking the edit layout instead? and assign the button manually? Oh, for now, to correctly display 8bitdo's additional button, you have to use steam beta image

Yes, i did that and unfortunatly the settings just keep resetting ill just wait until they iron out the bugs.

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