Running Arch Linux with Steam/Proton. Nintendo Switch Pro Controller is not detected in-game — the Controller field in Player.log is consistently blank on every launch.
System:
OS: Arch Linux (kernel 6.18.13)
Steam Input: Enabled
Controller: Nintendo Switch Pro Controller (tested both Bluetooth and USB-C wired)
Controller shows up and works correctly in Steam’s controller settings (ping, input test both work)
Steam controller log shows Controller 0 mapping uses xinput : false for app on every launch
Same controller works fine in other games (Elden Ring was my control) on the same system
Elden Ring uses the Steam Input API directly; No Rest for the Wicked appears to rely on the legacy XInput/SDL path which isn’t receiving the virtual device
Request: The game needs to either use the Steam Input API directly, or ensure Proton’s XInput virtualization layer is properly accepted. Other Unity games handle this correctly on Linux.
Update: Fixed. Posting the cause in case it helps others.
On some Linux distros, the Steam package doesn’t automatically grant access to /dev/uinput, which is the kernel device Steam uses to create a virtual XInput controller for Proton games. Without it, Steam can still detect your controller for its own UI but can’t virtualize it, so the game sees nothing.
Most games aren’t affected because they use the Steam Input API directly, hence Elden Ring working. This game’s reliance on the XInput/SDL path made it more sensitive to the missing permission.
To respond to @askan94 , probably? But I am not a game dev, so I don’t know the intricacies/pros/cons of doing that. There is probably a reason they chose to do it this way or maybe it’s just because the game’s still in Early Release.
As a counterpoint, adding the current user to input is a small security concern. It would allow bypassing some compositor protections against input logging.
Aren’t those two different paths? It’s just a matter of how to grant access to /dev/input/event*. Steam handles permissions through udev rules and some people don’t use systemd. Is that the case for you?
Since Unity doesn’t normally do SDL2 I checked my logs too: Steam, through Proton, does seem to provide both an XInput slot and SDL access, the game accepts one of the two. Can’t find which one, could dig deeper.
(For context, I’m on Arch with the same controller. Works on my machine. I’ve disabled Steam input for the game since I had some issues with it, notably map zoom, but otherwise a stellar experience. Really minor bugs with locale information not being read correctly so I can’t see realm creation dates, but on a platform that’s unsupported my experience has been extraordinarily smooth.)
Oh, and you’re now aware the four-sided rune readiness display inside of the stamina circle does not correspond to Nintendo button positions. And breathing manually