protonscr

Steam Input remains in desktop mode instead of switching to gamepad mode

steamopen General controller / Steam Inputnon-Steam application
ValveSoftware/steam-for-linux#13314 · opened 2026-06-13 by Jawzper · updated 2026-08-18 · 8 comments · github
1 matching comments, n / p to jump
JJawzper 2026-06-13 github

This has been an issue in the past and was marked as resolved, but it is very much not resolved. Please refer here and/or reopen the issue: https://github.com/ValveSoftware/steam-for-linux/issues/10551#issuecomment-4643726918

JJulienKaspar 2026-06-13 github

I was just going to report the same issue.
I'm on Fedora 44 (wayland) and tried installing Steam both via Discover as a flatpak and from the terminal. Both lead to the same result.

When I launch games or other non-steam software from Steam the controller works out of the box.
When launching software or games outside of steam (heroic launcher or from the Godot Game Engine) the desktop layout also works but not the Gamepad action set. Switching to it works but the inputs don't get used at all. Only the mouse trackpad works on the gamepad action set.

I'm happy to trouble shoot and test this with some guidance. I'm out of ideas at this point.
I tested the issue on the Steam Deck and a Gentoo work desktop and there the controller works as expected.

WWitherredAway 2026-06-14 github

Reposting my comment from the other issue:

This was happening to me with FC25 and FC26. What fixed it for me is turning on EA's Ingame Overlay (thru the EA app). It also fixed steam input not working, steam overlay not working, steam desktop controller layout not disabling, steam recordings not working, etc.

Ccomicsads 2026-06-16 github

Adding on that I'm also suffering from this while trying to connect my new steam controller and heroes of the storm (added as a non-steam game through lutris).
Removing all binds from the desktop mode had no effect, neither disabling the toggle in the properties section of the game "Use Desktop Configuration in Launcher" which I thought might help out.
I wish there was a way to make the game configuration always take precedence over the desktop mode while the game was running. It wouldn't be ideal but it would be a nice workaround

Aanishgoyal1108 2026-06-17 github

I am running into this issue on my Steam Controller on Flatpak Wayland KDE.

The configuration mismatch occurs only when I click the dialog to allow Steam Flatpak to control input devices. It seems like the --device=input permission is what Valve uses to make Steam control the desktop. But if you never grant it permission to do so, then it will only use the controller when the game launches (the expected behavior!). I don't know if there are any negative side effects of not granting it permission, but from what I can see, the Steam Input permission dialog only appears when I press an input on my controller outside a running game.

It's a bit annoying, but as long as you don't press accept/decline for that dialog on KDE, you won't have any problems. Can't say the same for non-Flatpak/non-KDE users, though.

Bbarndawe 2026-06-19 github

There's an update on the original thread that worked for me: Open settings -> Game Controller and turn off 'Allow using pointer as a keyboard'

Image
Aanishgoyal1108 2026-08-07 github

For anyone having this problem, I found out the common denominator.

First off, yes, if you're using KDE Plasma, you should double-check that "Allow using as pointer and keyboard" is disabled in your controller settings. However, 9/10 times, that will not fix the problem, especially if you are running the game under a native Wayland window or compositor.

The root cause stems from the fact that Steam can't track window focus for Wayland clients. When a game runs under winewayland.drv via PROTON_ENABLE_WAYLAND=1, Steam never sees the game window take focus, so Steam Input falls back to the global Desktop Layout. This layout maps your controller to mouse/keyboard, which is why the touchpads either do nothing useful in game or start moving your cursor around. Another common symptom is rapid flickering between mouse/keyboard and gamepad glyphs for games that support switching between controller and mouse/keyboard dynamically (i.e., ELDEN RING, Lies of P).

GloriousEggroll fixed this upstream in proton-ge-custom by calling steam://forceinputappid/<appid> right before the game starts and resetting it to 0 on exit, which pins Steam to that game's controller configuration instead of letting it fall through to the Desktop Layout. The commit also changes self.env.setdefault("PROTON_NO_STEAMINPUT", "1") to a plain self.env["PROTON_NO_STEAMINPUT"] = "1" on winewayland, and adds a Wine patch that hides Steam virtual controller records from SetupAPI and Configuration Manager enumeration so DirectInput/XInput can't open a second, dead controller path.

However, this is not a true fix, since it sets Steam Input to disabled from within the Proton layer itself. So, if you did try to set PROTON_USE_SDL=0 PROTON_NO_STEAMINPUT=0 along with -steamos3 in the command-line arguments (which is what people did before SDL 3.0 came out last month), it wouldn't do anything, since PROTON_NO_STEAMINPUT would just become enabled again.

If you're fine with using SDL as the backend, this should be an okay change for you, and it will hopefully become the standard on subsequent releases of proton-ge. However, for those using the Steam Controller 2, which defaults to using Steam Input as the backend for controls in all games, this is not a good workaround. Or even if you're using proton-cachyos (not sure how they plan on approaching this issue, since it's pretty niche to begin with). Or even worse, if you're like me and running into both problems (I use a Steam Controller 2 and I prefer using proton-cachyos). Ordinarily, this leaves you with a couple of options, which aren't true "solutions" in my mind:

  1. Running the game in an XWayland window. Solves the problem with Steam Input compatibility but unfortunately ruins HDR compatibility.
  2. Using SDL as the backend. Technically works, but for newer hardware that doesn't have SDL compatibility, like the Steam Controller 2, this will not work. Also, you lose access to controller reconfigurator input remappings.
  3. Continuing to use Steam Input, but not granting Steam Flatpak access over input devices. Technically still works, but I don't think input remappings from controller reconfigurator will work (at least, it didn't for me), and Gyro doesn't work either (at least, I don't remember it working for me). Also, you get bombarded by "grant Steam access to input devices" occasionally, which is a pretty annoying dialog box to close mid-session. It kinda kills the immersion. I don't know how this would be accomplished on non-Flatpak Steam. But I know that I kept getting prompted for Steam to control my input devices, and I just never granted Steam that access.

Luckily, I found a solution to this issue a couple of minutes ago on the latest Steam Flatpak on proton-cachyos on KDE Plasma 6 Wayland! In theory, this should work on other desktop environments and on non-Flatpak Steam, too. My approach uses two things:

  1. Setting PROTON_USE_SDL=0 PROTON_NO_STEAMINPUT=0. This only works on forks that still use setdefault for that variable on winewayland, which proton-cachyos still does. Since proton-ge-custom changed it to a plain assignment, it's not recommended that you use it as a compatibility layer (though I don't think it's in the official proton-ge releases yet).
  2. A wrapper script (proton-game-wrap.sh) that fires steam://forceinputappid/<appid> before the game starts and sets it back to 0 when the game exits. This was inspired by GloriousEggroll's commit, and it is what stops Steam from falling back to Desktop Layout. The only difference in my approach is that I'm doing it from a launch wrapper rather than from inside Proton itself. This effectively keeps Steam Input enabled and Steam finally recognizes the game window, so it won't try to turn on Desktop Layout over and over!

Put together, my launch options look like this:
PROTON_USE_SDL=0 PROTON_NO_STEAMINPUT=0 /path/to/proton-game-wrap.sh gamemoderun %command%

Some caveats about the script:

  • The wrapper script also flips HDR on/off for my ASUS monitor when the game starts/ends, respectively. This doesn't have anything to do with the Steam Input fix. If you don't want that, you could set WRAP_NO_HDR=1 in your launch options to skip it entirely, change WRAP_HDR_OUTPUT if your HDR display isn't called DP-2, or just delete the hdr() function and its two call sites.
  • On Flatpak Steam, the steam binary is not on PATH at the moment your game launches, because the script technically runs inside the Steam Linux Runtime container (pressure-vessel). A bare steam steam://... call just returns 127, while from the outside the game launches perfectly normally and looks like everything worked. The invocation that actually lands is flatpak-spawn --host flatpak run com.valvesoftware.Steam <url>, which requires org.freedesktop.Flatpak=talk permissions from Steam Flatpak.
  • This method does not survive a controller reconnect. If your controller turns off, or you start the game with the controller off and turn it on afterward, Steam re-registers the controller from scratch and quietly drops the forced appid. I couldn't figure out how to solve this, so any advice (or even a better version of the existing script) would be greatly appreciated!
CCodeKonga 2026-08-12 github

There's an update on the original thread that worked for me: Open settings -> Game Controller and turn off 'Allow using pointer as a keyboard'

Image

In Desktop Mode, I went to System Setting -> Game Controller, but there was no option for "Allow using pointer as a keyboard." I'm on the most up to date build of the SteamOS on the Sttable build. I went to the Discover Store, and everything is up to date there as well. I'm using a LCD steam deck. Also, even though I have a Steam Controller connected via puck, it's not showing up in the list of controllers in System Setting -> Game Controller, but other connected controllers via bluetooth are as is the Steam Deck itself, but again the option to "Allow using pointer as a keyboard" is not listed for any of them.

FFullbrightultra 2026-08-18 github

Adding a case where this breaks a Steam-launched, native Steam Input API title, not a non-Steam game.

Setup: CachyOS, KDE Plasma on Wayland, original Steam Controller (2015). Reproduced over BLE and wired USB, and on both stable 1785799196 and beta 1786661881. The game is DEATH STRANDING 2 (appid 3280350), which ships its own gordon config in steaminput/steam_input_manifest.vdf. I had PROTON_ENABLE_WAYLAND=1 in the launch options.

In game the desktop layout stayed active, so the left stick and right trackpad both drove the mouse pointer. controller.txt only ever queued activations for 413080/443510/769 - never for the game. Explicitly selecting the official layout registers fine:

SetSelectedConfigForApp - idx 0 app: 3280350, 0 CLOUD_.../config/3280350/FC5492211C.vdf 1 1
SetSelectedConfigForApp - new entry for 3280350

but activation still never fires, and the game's Steam Input API call falls through with No cached sticky mapping in ActivateActionSet.

The KDE controller setting mentioned above ("allow using as pointer and keyboard", turned off) changed things but didn't fix it. It got me exactly one game activation, which held for 78 seconds:

[11:39:36] Queueing activation for controller: 0 app: 3280350
[11:40:54] Queueing activation for controller: 0 app: 413080

After that reversion the game falls back to Steam's emulated pad (a virtual "Microsoft X-Box 360 pad 0" device shows up, and the real controller is correctly on the game's SDL ignore list, so it isn't reading the hardware directly). On that fallback path the trackpad-as-mouse bindings are unrepresentable - an XInput pad has no mouse - so editing the layout in Steam appears to do nothing in game, which is pretty confusing until you know why.

Removing PROTON_ENABLE_WAYLAND=1 from the launch options fixes all of it. The game config activates and holds, and layout edits apply again. An Xbox Series X pad was unaffected the whole time, which fits the picture: it rides the XInput fallback and never needs the focus association that native Wayland windows break.

Happy to attach fuller logs if that helps.