Skip to content

Instantly share code, notes, and snippets.

@ammuench
Last active November 22, 2025 04:51
Show Gist options
  • Select an option

  • Save ammuench/0dcf14faf4e3b000020992612a2711e2 to your computer and use it in GitHub Desktop.

Select an option

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

@vanfanel
Copy link

vanfanel commented Nov 8, 2025

This is how I manager to avoid continuous disconnection of the 8BitDo Pro 3 connected via 2.4G on Debian 13 "Trixie":

Clone this repo:
git clone --depth 1 https://github.com/pastaq/evdev-keepalive.git

CD into the repo, build the executable and install it by copying it to the right place on your system:

cd evdev-keepalive
gcc evdev_keepalive.c -o evdev_keepalive
sudo cp evdev_keepalive /usr/local/bin

Create /etc/udev/rules.d/10-evdev-keepalive.rules with this content (NOTE that the ProductID changes while the pad is actually connected! If you run lsusb, you will see the ProductID of the 2.4G dongle instead, which 3109 instead of 310b! Took me a while to notice this absurdity...):

# --- Block "Nintendo Pro Controller" ---
SUBSYSTEM=="usb", ATTR{idVendor}=="057e", ATTR{idProduct}=="2009", OPTIONS+="ignore_device"

# --- Avoid probing MTP ---
SUBSYSTEM=="usb", ATTR{idVendor}=="2dc8", ATTR{idProduct}=="310b", ENV{MTP_NO_PROBE}="1"

# --- Ignore keyboard and mouse interfaces ---
SUBSYSTEM=="input", ATTRS{name}=="8BitDo 8BitDo Pro 3 Receiver Keyboard", OPTIONS+="ignore_device"
SUBSYSTEM=="input", ATTRS{name}=="8BitDo 8BitDo Pro 3 Receiver Mouse", OPTIONS+="ignore_device"

# --- Activate service for real gamepad only (main event node)---
KERNEL=="event*", SUBSYSTEM=="input", ATTRS{name}=="8BitDo Ultimate 2 Wireless Controller", \
  TAG+="systemd", ENV{SYSTEMD_WANTS}="evdev-keepalive@%k.service"

Now create /etc/systemd/system/[email protected] with this content (as a curiosity, the @ means this is a templated service: it will be created as [email protected] if your pad appears as /dev/event16, etc.. you get the idea):

[Unit]
Description=Keep 8BitDo controller alive on %I
StopWhenUnneeded=true

[Service]
# Keep the event device open, so that the controller firmware does not
# reset the USB device.
ExecStart=/usr/local/bin/evdev_keepalive %i

Reload udev rules:
sudo udevadm control --reload-rules && sudo udevadm trigger

..and presto, the Pro 3 shouldn't self-disconnect constantly, and in fact, it's automatically connected on boot (=no stalls when powering on the pad during gameplay).
But having to go though all this is SO stupid. 8BitDo firmware sucks big time. The pad is great, but oh man is the firmware broken for proper operation...

@HaydenS3
Copy link

@phamaralbr I'm having the same issue with the Ultimate 2C Wireless controller on kernel 6.17. In a Windows VM with USB passthrough I'm able to switch between xinput and dinput, however I can only get dinput on Pop! OS. The results are the same despite if I use wired or 2.4Ghz.

Please let me know if you find a fix. I'll post to this thread as well if I figure it out.

@robotasun
Copy link

On ArchLinux, kernel 6.17.7 - Ultimate 2C has no problems connecting or operating whatsoever out of the box. Though @vanfanel 's solution to keep the device alive seems to be necessary, as I have to tap the guide button once every 30 minutes or so. The device identifier switches to "2dc8:301c 8BitDo IDLE" from "2dc8:310a 8BitDo 8BitDo Ultimate 2C Wireless Controller" and back. Tinkered around with the udev scripts (only took the MTP avoidance and event node sections), no idling just yet, though this may require some manual shutdowns on the controller to preserve battery life

@cr0t0
Copy link

cr0t0 commented Nov 22, 2025

Other 8bitdo pad works out the box? I had a xbox 360 Wireless pad more than a decade no problem but need replacement. Any recommendations?

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