Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Can UMU-Proton handle Steam Input? #117

Open
Faugus opened this issue Jun 16, 2024 · 16 comments
Open

Can UMU-Proton handle Steam Input? #117

Faugus opened this issue Jun 16, 2024 · 16 comments
Labels
bug Something isn't working

Comments

@Faugus
Copy link

Faugus commented Jun 16, 2024

For example:
I have a PS4 controller.

On Steam, if the game natively supports the controller and I disable Steam Input, the buttons in the game appear as Playstation buttons. If I enable Steam Input, the buttons in the game appear as Xbox buttons.

Outside of Steam, using UMU-Proton, the buttons always appear as Xbox buttons, as if Steam Input is always enabled.

Is there any way to enable/disable Steam Input using UMU-Proton outside of Steam?

Edit:
The Xbox buttons are only being shown on Fedora.
On Arch they are being shown as Playstation buttons.

@Faugus
Copy link
Author

Faugus commented Jun 16, 2024

Nevermind. The problem is not related to UMU-Proton. It's related to Fedora.

@Faugus Faugus closed this as completed Jun 16, 2024
@Faugus Faugus reopened this Jun 20, 2024
@Faugus
Copy link
Author

Faugus commented Jun 20, 2024

Playstation Controllers don't work on Elden Ring. On Steam, if I enable Steam Input, the controller works.
Is there a way to do something similar with UMU-Proton?

@alterNERDtive
Copy link

I have a different controller issue that might or might not also be related to Steam input:

When I run Horizon Forbidden West through Lutris and umu, the game seems to see my Dualsense controller as a DS and an Xbox controller at the same time; the glyphs keep alternating between the two several times per second. At the same time the axes and buttons are all messed up. For example the triggers control the “right stick” movement aka looking around.

Adding the game as a non-Steam game to Steam, with Steam Input disabled, makes the controller work properly.

@R1kaB3rN R1kaB3rN added the bug Something isn't working label Jul 4, 2024
@R1kaB3rN
Copy link
Member

R1kaB3rN commented Jul 4, 2024

In the future, the team will explore how to best handle this case whether that is patching wine or a custom solution, and it should be high in priority next release.

@Faugus
Copy link
Author

Faugus commented Jul 4, 2024

Nice! For now I'm using SC Controller to emulate a Xbox controller.

@layercak3
Copy link

Steam Input is non-free software part of Steam (goddammit valve). Goldberg (free software Steam library implementation which has experimental steam input support) might help here if the game truly requires it or has special/exclusive features with it? (thankfully xboxdrv/sc-controller should work decently for most games which have xbox support)

@xibau
Copy link

xibau commented Aug 5, 2024

Hey, I have similar issues on some games. I recently found this repo : https://github.com/ShadowBlip/InputPlumber
I'm dropping that here in case it could help replace steam input for proton outside of steam.

@cinnamonmatexfce
Copy link

Playstation Controllers don't work on Elden Ring. On Steam, if I enable Steam Input, the controller works. Is there a way to do something similar with UMU-Proton?

There should be two more possible workarounds...

SDL_JOYSTICK_DEVICE=/dev/input/js0 %command%

or

  1. (temporarily) disable the Steam {/etc,/usr/lib}/udev/rules.d/

@cinnamonmatexfce
Copy link

I have a different controller issue that might or might not also be related to Steam input:

When I run Horizon Forbidden West through Lutris and umu, the game seems to see my Dualsense controller as a DS and an Xbox controller at the same time; the glyphs keep alternating between the two several times per second. At the same time the axes and buttons are all messed up. For example the triggers control the “right stick” movement aka looking around.

Adding the game as a non-Steam game to Steam, with Steam Input disabled, makes the controller work properly.

What if you completely disable any Steam Input?

Steam - Controller - NO
Steam - Controller ingame - NO

@Faugus
Copy link
Author

Faugus commented Sep 15, 2024

@cinnamonmatexfce on Steam, the only way to make the Playstation controller on Elden Ring is by enabling Steam Input.
Outside Steam I'm sc-controller to emulate a Xbox controller.

@cinnamonmatexfce
Copy link

@cinnamonmatexfce on Steam, the only way to make the Playstation controller on Elden Ring is by enabling Steam Input.
Outside Steam I'm sc-controller to emulate a Xbox controller.

Strange... afaik Wine (and thus Proton) should handle presenting Xbox Controller (via its internal XInput wrapper) by itself, so - in your case - no external programs should be needed at all. 🧐

@R1kaB3rN
Copy link
Member

I'm considering InputPlumber as a solution for this problem. It'll require systems that implement the DBus API and depend on systemd, libevdev, and libiio. Additionally due to the nature of this application, it cannot be used in a Flatpak, and for technical reasons, root privileges will also be required to use it unless we do what Steam does which is imperfect.

For those interested, see ShadowBlip/InputPlumber#202 for more details.

@R1kaB3rN
Copy link
Member

R1kaB3rN commented Sep 17, 2024

Since the daemon must already be enabled by the user beforehand to use, I'm not too sure if it makes sense for it to be a umu property as it can't simply just start the daemon if we care about users' security. But we could support this usage.

For instance what we could do is try to connect to it and warn the user that the InputPlumber daemon isn't enabled. At minimum, umu-launcher can do this. But additionally, we could provide tools for clients to standardize the way clients connect to the service. This would also prevent them having to write DBus code and may also support systems that do not implement the DBus API as the tools will use zbus. Though, I think systemd will still be a requirement. As a result, clients will have less work and just need to provide a suitable UI for their users.

@GloriousEggroll
Copy link
Member

GloriousEggroll commented Oct 9, 2024

I'm considering InputPlumber as a solution for this problem. It'll require systems that implement the DBus API and depend on systemd, libevdev, and libiio. Additionally due to the nature of this application, it cannot be used in a Flatpak, and for technical reasons, root privileges will also be required to use it unless we do what Steam does which is imperfect.

For those interested, see ShadowBlip/InputPlumber#202 for more details.

It may not need all that. In the end InputPlumber simply creates a fake input device that the real one pipes input into. As long as that fake device shows up to flatpak then flatpak should be able to use it. No need for inputplumber to run inside flatpak, but inputplumber would need to be running on the system.

@Faugus
Copy link
Author

Faugus commented Oct 16, 2024

Another approach could be changing the registry of the prefix, like this:

Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\winebus]
"Description"="Wine HID bus driver"
"DisableHidraw"=dword:00000001
"Enable SDL"=dword:00000001

I tested with a couple of games using a PS4 controller and it works fine.

@sjp761
Copy link

sjp761 commented Oct 27, 2024

Maybe there can be an environmental variable where we can disable HIDRaw like PROTON_FORCE_SDL. Just makes it easier to switch between the 2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

8 participants