Skip to content

Instantly share code, notes, and snippets.

@darthcircuit
Forked from archeYR/8bitdofirmwarelinux.md
Last active December 21, 2024 06:04
Show Gist options
  • Save darthcircuit/b7243e1d0a71089c236172fe7cc6ac61 to your computer and use it in GitHub Desktop.
Save darthcircuit/b7243e1d0a71089c236172fe7cc6ac61 to your computer and use it in GitHub Desktop.
8BitDo Firmware Updater in Wine

This is about running 8BitDo's Firmware Update tool for Windows in Wine. It can be used for updating newer 8BitDo devices that may not be supported by fwupd on Linux.

Original steps credit: archeYR/8bitdofirmwarelinux.md

I built a wineprefix with a portable appimage of wine from here.

This tool needs Segoe UI Symbol font. You can install via this script on most setups: Segoe-UI Font on Linux (Ubuntu).

You will have to let Wine access device's HID interface for updating firmware, something like this should work for 8BitDo Ultimate Bluetooth Controller

nano /usr/lib/udev/rules.d/71-8bitdo-boot.rules

# 8BitDo Ultimate Bluetooth Controller's boot HID interface
SUBSYSTEM=="hidraw", ATTRS{idProduct}=="3208", ATTRS{idVendor}=="2dc8", TAG+="uaccess"

# 8BitDo Ultimate BT receiver's HID interface
SUBSYSTEM=="hidraw", ATTRS{idProduct}=="3109", ATTRS{idVendor}=="2dc8", TAG+="uaccess"

You might need to change product IDs depending on your device (lsusb prints vendor and product IDs)

udevadm control --reload-rules && sudo udevadm trigger

Disable SDL mode in winebus because it prevents firmware updater from accessing the device, can be done through Wine registry.

wine regedit

add DWORD value of 0 named "Enable SDL" at HKLM\CurrentControlSet\Services\winebus

Can be re-enabled after updating firmware (set the "Enable SDL" value to 1 or just remove it).

Restart wine server to save and apply registry changes: wineserver -k

Updating the controller works only in manual mode (press LB+RB and connect the controller through USB cable, then select appropriate device)

USB wireless dongle should be detected by the tool when controller is not connected.

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