ValveSoftware / Proton

Compatibility tool for Steam Play based on Wine and additional components
Other
23.9k stars 1.04k forks source link

Controller hot-reconnection broken #7952

Open alecfriedman3 opened 1 month ago

alecfriedman3 commented 1 month ago

Sometime in the last month is when I first started observing this issue. A controller re-connection mid-game will not reconnect to the game until the game itself is restarted. The controller is still able to access and navigate steam Big Picture overlay upon re-connection, so it is definitely connected and inputs are being read/received. This is happening on both steam flatpak and natively on openSUSE Tumbleweed, playing over a streaming client (Moonlight) or with a controller connected directly to the host makes no difference. I first noticed this issue while using Proton experimental a few weeks ago. I believe the issue to be within Proton, as reverting from proton experimental back to 9.0-2 fixes the behavior. This happens on all games from what I can tell.

MurdoMaclachlan commented 1 month ago

Can confirm this. I first started experiencing this a few days ago with Elden Ring. I've tested it with both Elden Ring and Dark Souls III, and both games the controller does not reconenct to the game if I'm using Proton Experimental, but does if I'm on 9.0-2.

Another thing to note is that the controller touchpad continues to work like a mouse in-game, but all other controls stop working until the game is restarted.

abc-mikey commented 1 month ago

I can also confirm this in multiple games. Did this ever work? I don't recall if it ever did.

(edit) I just ran a test on some random games to see if my controller (DS4) reconnected on any of them; all negative.

jSQrD-dev commented 1 month ago

I can also collaborate with my findings. This is a very recent regression in Experimental as a few weeks ago this was a non-issue.

No games are able to reconnect gamepads and controllers on my end as well.

I'm planning on looking through commits to see if I can spot the breaking change.

alecfriedman3 commented 1 month ago

Did this ever work? I don't recall if it ever did.

@abc-mikey Yes this worked fine just last month. See my original comment, reverting from proton experimental back to 9.0-2 fixes the behavior

bronco-henry commented 4 weeks ago

This is an issue for me now on as well. I’m on a fresh install of Linux Mint 22 xfce edition.

This was not an issue in the past for me when running the same version of proton-GE-11 and Steam beta client on Linux Mint 21.3 xfce. Tested multiple usb ports and multiple games.

sour-source commented 4 weeks ago

yep. issue on my end too, both experemental and GE versions of proton affected to this, switching back to stable 9.0.2 fixes this

jSQrD-dev commented 4 weeks ago

yep. issue on my end too, both experemental and GE versions of proton affected to this, switching back to stable 9.0.2 fixes this

If it's also affecting GE versions, can someone see when's the last GE 9 version that it worked for?

Since GE is built off of experimental, this can help narrow down the commit as well

alecfriedman3 commented 3 weeks ago

Latest working GE version is 9-10. 9-11 pulled in latest upstream proton according to the release notes and does not work. The last upstream proton merge in GE before that was 9-6, so it would have been introduced sometime between those two release dates. GE 9-10 worked and 9-11 did not when I tried it

alecfriedman3 commented 3 weeks ago

Maybe helpful bit of an update, running a game with PROTON_LOG=1, proton experimental gives an error when the controller is re-connected

0088:err:plugplay:IoRegisterDeviceInterface Device interface L"\\??\\HID#VID_28DE&PID_11FF&XI_00#0&0000&0&0&1#{6c53d5fd-6480-440f-b618-476750c5e1a6}" is still enabled.

and seems to think the device is already enabled. This error is absent from the logs with Proton 9.0-2. Maybe proton/wine is not properly destroying the input device in memory when the controller disconnects??

This may be entirely baseless, but something's pulling me to this commit from wine, made on July 3rd and pulled into experimental on July 18th (687a81ed). From my error log message, my device matches VID and PID hex codes of a conditional that was moved around VID_28DE&PID_11FF and corresponding instances of checking if (desc.vid == 0x28de && desc.pid == 0x11ff) ...

Maybe that's irrelevant, but could be a good place to start for someone more familiar with the codebase :shrug:

guoyunhe commented 1 week ago

I have same issue with Super Bit Blaster XL, which is a native Linux game, not using any version of Proton. Strange.

Jaskowicz1 commented 1 week ago

not using any version of Proton.

Then your issue isn't related to Proton @guoyunhe as your issue persists outside of an application running Proton. Your issue looks like a hardware/software issue for your controller. Try xone or try a different controller.

guoyunhe commented 1 week ago

Then your issue isn't related to Proton @guoyunhe as your issue persists outside of an application running Proton. Your issue looks like a hardware/software issue for your controller. Try xone or try a different controller.

The controller works fine with some non-Steam games and emulators. I am still investigating...

Kirschi94 commented 6 days ago

I've had this issue for a while now when playing BeamNG.drive via Proton with my Xbox 360 controller: If it disconnects (idle, low battery, whatever), the game doesn't recognize it anymore once it's connected again. Have to restart the whole game so it works again.

Weird thing is: I've already had this problem in the past (end of 2023 I think), then it disappeared, then it reappeared again a while ago.

alecfriedman3 commented 1 day ago

@Kirschi94 There was a very similar bug in steam for linux back in 2023, could have been that