protonscr

SDL3 GameCube Adapter (via libusb) Compatibility Issue Under Proton

protonclosed
ValveSoftware/Proton#9153 · opened 2025-10-27 by ReRezd · updated 2026-01-24 · 10 comments · github
RReRezd 2025-10-27 github

I’m creating an Unreal Engine plugin that replaces the default input device plugins with SDL3. My SDL3 build has been compiled with libusb to enable native support for the Nintendo GameCube controller adapter (Wii U/Switch).
On Windows, native GC adapter support works as expected but on a Steam Deck running via Proton, the adapter is not detected or usable across all the Proton versions I tested.

I've spoken with some SDL contributors and they believe it to be that Wine/Proton's USB communication not being fully compatible with libusb.

Is there anything I can do to get Proton to work out of the box with GameCube adapters?

Sslouken 2025-11-12 github

@ivyl, you might have some insight here?

Iivyl 2025-11-12 github

Hi. I assume this is a USB driver that would run on the Windows side and use WinUSB via libusb?

Wine's (and Proton's) WinUSB is just a stub. Currently we don't have a way to allow raw access to USB devices. We would need to layer it on top of libusb on Linux. I have no idea how big of an effort that would be.

HID is as low as we currently go but that requires udev rules and that make the hidraw node accessible. Do those adapters expose HID or do you have to use raw USB communication?

Sslouken 2025-11-12 github

The GC adapters require raw USB communication. So it sounds like this doesn't currently work and is not currently planned.

Iivyl 2025-11-12 github

Correct

FFIXMESTEVE 2025-11-13 github

WinUSB

Yes, we use WinUSB for GC adapter on Windows, but we don't expect that to work on Proton.
We thought using SDL3 with SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE might work on Proton.

The GC adapters require raw USB communication.

Are you sure? The documentation for that hint says it's a HIDAPI driver, not a RAWINPUT driver.

Sslouken 2025-11-13 github

Yes, we use WinUSB for GC adapter on Windows, but we don't expect that to work on Proton. We thought using SDL3 with SDL_HINT_JOYSTICK_HIDAPI_GAMECUBE might work on Proton.

Yes, it will if the adapter is already set up to send input reports, but it takes raw USB commands to start sending those reports:
https://github.com/libsdl-org/SDL/blob/54f129f765e8418ad47178f24fef5935c9d18947/src/hidapi/SDL_hidapi.c#L1624-L1627

FFIXMESTEVE 2025-11-13 github

Ah, I see. I thought there was no raw USB commands at all because I was remembering @flibitijibibo 's wake up via magic packet from a few years ago which used hid_write ( https://github.com/libsdl-org/SDL/commit/c528615626d9f7789a5681a946cb3d5bd5d68c2c#diff-6e082c414e1934a32307c32e46ef12b628e37bf0e084f33d6f69d28035606f47R87 ).

But the wakeup method in the latest SDL looks very different indeed.

Do you think we can come up with any workaround solutions?

I have been thinking about writing a standalone Linux helper program that wakes the adapter, and calling that program from the game at runtime via /usr/bin/env. Do you think that could work?

Sslouken 2025-12-16 github

The Steam beta client now has libusb support, and will automatically configure the adapter if it has access to the USB device. Here is a post with some details on how to grant Steam access:
https://unix.stackexchange.com/questions/44308/understanding-udev-rules-and-permissions-in-libusb

Fflibitijibibo 2025-12-16 github

Submitted a PR for the udev rules:

https://github.com/ValveSoftware/steam-devices/pull/69

Kkisak-valve maintainer 2026-01-24 github

Closing per the last couple comments.

Launch options