protonscr

VKB Gladiator NXT, STECS Mini+ - Virtual Controller input not recognized within Proton.

protonopen
ValveSoftware/Proton#8589 · opened 2025-04-04 by innersp4ce · updated 2025-08-27 · 6 comments · github
Iinnersp4ce 2025-04-04 github

Compatibility Report

  • Name of the game with compatibility issues: Elite Dangerous, No Man's Sky
  • Steam AppID of the game: 359320, 275850

System Information

  • GPU: AMD Radeon RX 7800 XT
    OS: Arch Linux
    KERNEL: 6.13.8-arch1-1
    CPU: AMD Ryzen 5 5600X 6-Core
    GPU: AMD Radeon RX 7800 XT (radeonsi, navi32, LLVM 19.1.7, DRM 3.61, 6.13.8-arch1-1)
    GPU DRIVER: 4.6 Mesa 25.0.2-arch1.2
    RAM: 32 GB
  • Link to full system information report as Gist:
  • Proton version: Experimental, 9.0.4

I confirm:

  • [x] that I haven't found an existing compatibility report for this game.
  • [x] that I have checked whether there are updates for my system available.

Symptoms

VKB controllers are generally recognized within proton.
However controllers like the STECS, STECS Mini+ exceed the 32 button limit of games like Elite Dangerous, No Man's Sky.

VKB has a solution by using their configuration utility to attach buttons 33 through 64 to a virtual controller in the controllers firmware.

Linux can handle this. I've tested War Thunder with the STECS having 1 extra virtual controller. Inputs are detected and can be bound in game.

This does not happen when I use a proton game Like Elite Dangerous, No Man's Sky or when I launch War Thunder with proton forced on.

Reproduction

Using systemd-boot add this to options at the end of your Arch entry
options usbhid.quirks=0x231d:0x0200:0x040,0x231d:0x0201:0x040,0x231d:0x012c:0x040
Read as VendorID:DeviceID:QuirkID a comma separated list

  1. Install Elite dangerous
  2. Connect VKB Gladiator NXT L+R and a STECS Mini+ via USB.
  3. Configure STECS to have button 33 through 51 on a virtual controller via their guide
  4. Launch Elite Dangerous/No Man's Sky.
  5. Go to their remap controller menu's and try to bind any of the buttons bound to the Second Virtual Controller to any option in the game.
Iinnersp4ce 2025-04-04 github

Log file attached, messed up the initial post by it. Hence the Edits.
steam-359320.log

Iinnersp4ce 2025-04-23 github

Attempt disabling steam input, does not work in game.

Disabling steam input does not work as a workaround. Tested this in Elite Dangerous.

evtest was used to make sure that inputs are detected. Below the events printed when evtest is ran without any arguments/options. Both event29 and event30 do register inputs within evtest.

event30 is the virtual controller. Buttons do not register to keybinds in Elite Dangerous in proton.

No device specified, trying to scan all of /dev/input/event*
Not running as root, no devices may be available.
Available devices:
/dev/input/event10:     Keychron Keychron Q0 Max System Control
/dev/input/event27:     VKB-Sim (C) Alex Oz 2023  VKBsim Gladiator NXT R
/dev/input/event28:     VKB-Sim (C) Alex Oz 2023  VKBsim Gladiator NXT L
/dev/input/event29:     VKB-Sim (C) Alex Oz 2023 S-TECS MODERN THROTTLE MINI PLUS
/dev/input/event30:     VKB-Sim (C) Alex Oz 2023 S-TECS MODERN THROTTLE MINI PLUS
/dev/input/event4:      Keychron Keychron K1 Max System Control

Below source leads me to believe that the game is either speaking with controllers via winebus and hidraw path and not the winebus input event path (either directly or through SDL).

source: Proton/docs/CONTROLLERS.md

Steam input, picks up the VC, but does not work in game.

What is deviating from this, is Steam in its options does show the second virtual controller. So they can be mapped to a generic gamepad. However this is unwanted because of the amount of buttons on a Xbox/PS/Generic gamepad. But even with steam input on it doesn't pick up the joystick event inputs.

Screenshot: Steam -> Settings -> Controllers

Attempt at enforcing SDL, does not work in game.

Found an article stating you can disable hidraw and enable SDL through the prefix winreg. This would be the logical step to force the winebus to talk to the SDL layer, but I either didn't set it properly or SDL will still pick up hidraw in favor of input event. The REG_DWORD DisableHidraw already existed, but I am not sure if the value of that key was 1 or 0 to begin with.

$ wine reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\winebus" /v "DisableHidraw" /t REG_DWORD /d 1
$ wine reg add "HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\winebus" /v "Enable SDL" /t REG_DWORD /d 1

source: Blog Self made penguin: how i solved my gamecontroller problems

KKawazu0 2025-06-05 github

Still not recognized on latest patch

I'm using protontricks and proton's explorer on a game defaulting to experimental to check as I can easily see if it works (it's ok on forced games to proton 9.0)

KKawazu0 2025-06-10 github

I may have found something useful :

I read this reddit thread and this one on unixstackexchange

Here is what I did :

$  ls /dev/hidraw* -al
crw------- 1 root root 243, 0   7:03:13 10/06/25 /dev/hidraw0
crw------- 1 root root 243, 1   7:03:13 10/06/25 /dev/hidraw1
crw------- 1 root root 243, 2   7:03:13 10/06/25 /dev/hidraw2
crw------- 1 root root 243, 3   7:03:13 10/06/25 /dev/hidraw3
crw------- 1 root root 243, 4   7:03:13 10/06/25 /dev/hidraw4
crw------- 1 root root 243, 5   7:03:13 10/06/25 /dev/hidraw5
crw------- 1 root root 243, 6   8:47:57 10/06/25 /dev/hidraw6

I thought this is not right so I added a file called 99-hidraw-permissions.rules located under /etc/udev/rules.d c and containing KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0660", GROUP="plugdev" . Then sudo udevadm control --reload-rules && sudo udevadm trigger. A quite crude method but hidraw is now readable by me as I put myself in plugdev group.

$  ls -l /dev/hidraw6 
crw-rw---- 1 root plugdev 243, 6   9:02:42 10/06/25 /dev/hidraw6

Using protontricks I started explorer and control panel opening, my joysticks (VKB and Thrustmaster FFB Wheel) are visibles. American Truck Simulator (proton forced) and Elite Dangerous recognize them too.

Regards

LLangolyers 2025-08-27 github

The solution above didn't work for me. Elite detected STECS and my MFG Crosswind pedals, but not the Gladiator NXT.

But following your link to Stack Exchange, there is a new answer posted after the posted here, which argues going the plugdev group route is not recommended. So instead use:

KERNEL=="hidraw*", SUBSYSTEM=="hidraw", MODE="0660", TAG+="uaccess"

in a rules file with a lower number: /etc/udev/rules.d/72-hidraw-access.rules

This has worked for me and the Gladiator is now detected by Elite.

Proton versions