protonscr

DirectInput hid_joystick_enum_device fails to enumerate gamepad, breaking XInput entirely — reproducible standalone with joy.cpl, no Steam involved

protonopen
ValveSoftware/Proton#10160 · opened 2026-09-19 by citrussilver · updated 2026-10-04 · 1 comments · github
Ccitrussilver 2026-09-19 github

System: CachyOS (Arch-based), kernel 7.2.6-1-cachyos, Hyprland (Wayland).
Controller: Generic gamepad presenting as 054c:05c5 (Sony DualShock 4 spoof) in one mode, 4131:3519 in another (force-bound to the xpad kernel driver, since it's not in xpad's default ID table).
Proton version: Proton 11.0-2, Proton - Experimental
Minimal reproduction - no Steam client, no specific game required:

  1. Quit Steam completely (verified via pgrep, zero Steam processes).
  2. Create a fresh Wine prefix using Proton's own bundled wine directly: WINEPREFIX=/path/to/fresh/prefix "/files/bin/wine" wineboot -i
  3. Launch Proton's own controller diagnostic tool: WINEDEBUG=+xinput,+dinput,+joystick WINEPREFIX=/path/to/fresh/prefix "/files/bin/wine" control joy.cpl
  4. Joysticks tab correctly lists the controller under "Connected (XInput devices)". "Enable SDL" is checked by default.
  5. XInput tab's live test panel shows: "No user detected on slot #1... make sure your gamepad is plugged in, and not overridden for DInput in the Joysticks tab."
  6. The WINEDEBUG log shows: warn:dinput:hid_joystick_enum_device index 0 not found, the trigger for the failed detection.

This reproduces with zero Steam involvement — no client running, no game, no Steamworks — ruling out Steam-side interference as the cause (see ValveSoftware/steam-for-linux#12231, closed by its author after concluding an identically-shaped symptom was actually this exact Proton-side bug).

Also reproduced in-game across three separate titles (Steamworks and non-Steamworks) and three different Proton builds (Proton - Experimental, Proton 11.0-2, GE-Proton11-7), so it isn't tied to one specific build either.

Intermittency note: oddly, the same setup can work correctly for weeks, then fail like this across every configuration for days, then recover with no changes — happy to provide more detail if useful for narrowing this down.

Ddankrr 2026-10-04 github

I can reproduce a similar intermittent controller-enumeration problem with controllers supplied by Steam Remote Play.

Host is Arch Linux, kernel 7.2.3, KDE Plasma 6.7.4 on X11. The client is a Steam Deck. Steam forwards both the Deck controller and a DualSense, then creates:

Microsoft X-Box 360 pad 0  (28de:11ff)
Microsoft X-Box 360 pad 1  (28de:11ff)

Both devices are opened by winedevice.exe. I polled their evdev state directly with EVIOCGABS/EVIOCGKEY; the virtual pad produced hundreds of state changes while moving the controller, so input was reaching the host virtual device even when Fallout 76 did not respond to it.

This happened with GE-Proton11-7. A three-second launch delay did not fix it. Connecting Remote Play after the game was already running worked at times, while launching through Remote Play often produced working video/audio but no gamepad input.

On a subsequent launch I changed to official Proton 10.0-4, moved the Steam Deck controller to the first position in the Deck's controller-order menu, and kept pressing controls during startup. Input then worked. The host controller log initially showed the DualSense using XInput while the Deck mapping did not:

16:31:29 Controller 0 uses xinput : true
16:31:29 Controller 15 mapping uses xinput : false

Two seconds later it activated both for app 1151340:

16:31:31 Controller 0 uses xinput : true
16:31:31 Controller 15 uses xinput : true

That points toward an order/activation timing race when multiple Remote Play controllers arrive during launch. I have not yet isolated whether Proton 10, putting the Deck controller first, or keeping it active during startup was the deciding factor.

Correction to an earlier version of this comment: I had included a result from a standalone XInputGetState() probe, but later found that its output was not returned correctly while it shared the active prefix. That result was invalid, so I have removed it.

Proton versions

Launch options