protonscr

All controllers non-functional in all Proton games — hidclass.sys crashes enumerating NZXT Kraken X (1e71:170e) HID device

protonclosed
ValveSoftware/Proton#10037 · opened 2026-08-03 by bdavj · updated 2026-08-03 · 1 comments · github
1 matching comments, n / p to jump
Bbdavj 2026-08-03 github

System Information

  • OS: CachyOS Handheld Edition (fresh install) — issue present in both gamescope session and KDE desktop
  • Hardware: B550, 3900x, RX 9060 XT, NZXT Kraken X AIO (USB 1e71:170e), ITE RGB LED controller (USB 048d:5702)
  • Controllers tested: Xbox One S (via Xbox Wireless Adapter, xpad), 8BitDo Ultimate 2 Wireless (2.4GHz dongle, tested in both XInput 2dc8:310b and DInput 2dc8:6012 modes)
  • Proton versions reproduced: Proton Experimental, Proton Hotfix, GE-Proton11-3, proton-cachyos (native and SLR variants)
  • Games tested: Cyberpunk 2077, Overcooked! 2

Symptoms

Controllers are fully functional everywhere except inside Proton games:

  • Kernel level (evtest on real pads): works
  • Native Linux games (Half-Life 2): works
  • Steam Big Picture UI navigation: works
  • Steam controller test / calibration: works
  • Steam Input virtual pad (28de:11ff) created and emits events in evtest: works
  • Any Proton game: zero input, keyboard prompts shown

Additional notes:

  • Affects all controllers and all Proton versions identically
  • Occurs with Steam Input enabled, disabled, and with PROTON_NO_STEAMINPUT=1
  • Persisted across a full OS reinstall

Diagnostics performed (all normal)

  • Virtual "Microsoft X-Box 360 pad" (28de:11ff) present in /proc/<gamepid>/root/dev/input/ inside the pressure-vessel container
  • /run/udev/data inside the container matches the host, including all c13:* input entries
  • udevadm info on the virtual pad: ID_INPUT_JOYSTICK=1, tags uaccess:seat, no ID_INPUT_IGNORE
  • SDL_GAMECONTROLLER_IGNORE_DEVICES in the game environment correctly masks the physical pads and does not include the virtual pad (28de:11ff)
  • User is in the input group; steam-devices package installed

Root cause (found via PROTON_LOG=1 WINEDEBUG=+plugplay)

During winebus/winehid device enumeration, Wine errors on the NZXT Kraken's HID interface:

00bc:err:hid:get_container_id_for_usb_udev_device Failed to get parent device.
00bc:trace:plugplay:get_device_instance_id Returning ID L"HID\\VID_1E71&PID_170E&MI_00\\512&57884173394&0&0&0"
00bc:trace:plugplay:enumerate_new_device Creating new device L"HID\\VID_1E71&PID_170E&MI_00\\512&57884173394&0&0&0"

Enumeration continues through the ITE RGB controller (048d:5702) and the Steam virtual pad (28de:11ff), after which hidclass.sys crashes:

=>0 0x006fffff323a28 in hidclass.sys (+0x3a28) (0x000000018dfe90)
0x006fffff323a28 hidclass.sys+0x3a28: movq 0x40(%rax), %rsi
PE-Wine     6fffff300000-    6fffff30d000       Deferred        winexinput.sys
PE-Wine     6fffff320000-    6fffff330000       COFF            hidclass.sys

With the HID stack dead, games enumerate zero gamepads — explaining why every controller and every Proton version fails while native titles and the Steam client itself (which do not use Wine's HID stack) work perfectly.

Confirmed workaround

Hiding the Kraken and ITE hidraw nodes from user access immediately restores controller input in all Proton games:

# /etc/udev/rules.d/99-hide-hw-from-wine.rules
KERNEL=="hidraw*", ATTRS{idVendor}=="1e71", MODE="0600", TAG-="uaccess"
KERNEL=="hidraw*", ATTRS{idVendor}=="048d", MODE="0600", TAG-="uaccess"

Expected behaviour

A HID device that fails enumeration (Failed to get parent device) should be skipped gracefully rather than crashing hidclass.sys and disabling all game controller support.

Full PROTON_LOG output available — happy to attach.

Kkisak-valve maintainer 2026-08-03 github

Hello @bdavj, this issue is already being tracked at #9468. Closing as a duplicate.

Proton versions

Launch options