Skip to content

Steam Input duplicates controllers, but doesn't filter out the original controller's usages from the games. #10175

Description

@JacobBrownAustin

Your system information

  • Steam client version (build number or date):
  • Distribution (e.g. Ubuntu): Debian 12
  • Opted into Steam client beta?: [Yes/No] No
  • Have you checked for system updates?: [Yes/No] Yes
  • Steam Logs: [generate by running this command in a terminal tar -zcvf ~/Desktop/steam-logs.tar.gz ~/.steam/steam/logs]
  • GPU: Nvidia/Intel/AMD nvidia

Please describe your issue in as much detail as possible:

Describe what you expected should happen and what did happen. Please link any large code pastes as a Github Gist
When playing a game that can use multiple gamepads, such as multiplayer games, and whilst also using Steam Input for those gamepad(s), then each of the gamepads used will be duplicated by Steam Input. This has the affect as each controller is controlling two players in the game, instead of the intended one.
I have had this problem in multiplayer games such as Trine, Lego Marvel Superheroes (and other Lego games), and Teenage Mutant Ninja Turtles: The Cowabunga Collection.
In some single player games, I've also noticed weird activity, but I cannot describe as well. It might be because the game is combining multiple virtual controller inputs into a single playable character. For example, a single button press would act like a double button press.

Workaround for SDL

I have confirmed a workaround for this issue using the SDL_GAMECONTROLLER_IGNORE_DEVICES environment variable for the games having the problem.
Here is an example workaround added to one of the games.

SDL_GAMECONTROLLER_IGNORE_DEVICES="0x054c/0x0268,0x2dc8/0x3106" %command%

The device IDs correspond to my PS3 Sixaxis gamepad, and my 8Bitdo Ultimate gamepad. I have found them by using the lsusb command.

From what I can tell, SDL is used by most native games, and also emulation layers like wine, proton, and dosbox.
SDL_GAMECONTROLLER_IGNORE_DEVICES would probably have no affect in games that are not going through SDL.

Guessing at root cause

I believe that the problem is caused by a bug in Steam where it is not correctly telling the games to ignore the original controllers that it is creating virtual copies of. I don't know if Steam is supposed to be using SDL_GAMECONTROLLER_IGNORE_DEVICES, or some other more sophisticated mechanism. Whatever it is trying to use is broken, at least for me on Debian 12.

Steps for reproducing this issue:

  1. Use Steam Input on 1 or more gamepad.
  2. Play a game that can use multiple gamepads. Mostly multi-player games.
  3. Each gamepad will be controlling 2 players instead of the expected 1 player per gamepad.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions