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

Sunshine virtual Dualsense controller registers with new ids every new session #3404

Open
2 tasks done
amlib opened this issue Nov 16, 2024 · 3 comments
Open
2 tasks done
Labels
input:controller Gamepad issue

Comments

@amlib
Copy link

amlib commented Nov 16, 2024

Is there an existing issue for this?

  • I have searched the existing issues

Is your issue described in the documentation?

  • I have read the documentation

Is your issue present in the latest beta/pre-release?

This issue is present in the latest pre-release

Describe the Bug

When using steam with a dualsense gamepad I've noticed that the controller settings such as adjusting the deadzone or enabling rumble weren't "saving" after exiting and re-entering a sunshine session. Upon further investigation I noticed that the steam controller configuration utility was creating new profiles for each session, as if I was using a differen't controller each time, each marked with a unique id.

Here is a listing of some of the files in ~/.steam/steam/steamapps/common/Steam Controller Configs/<user id>/config/ that were created in a short time while debugging this issue:

nov 16 17:23 preferences_DSef07194a5c1d.vdf
nov 16 17:21 configset_controller_ps5.vdf
nov 16 17:21 configset_DSef07194a5c1d.vdf
nov 16 17:13 preferences_DS2c96dc8a35d4.vdf
nov 16 17:13 configset_DS2c96dc8a35d4.vdf
nov 16 17:12 preferences_DS2ab093035886.vdf
nov 16 17:10 configset_DS2ab093035886.vdf
nov 16 17:08 steam_autocloud.vdf
nov 16 17:03 preferences_DS1772a2de5625.vdf
nov 16 17:01 configset_DS1772a2de5625.vdf
nov 16 16:53 preferences_DSa5324fc07c7c.vdf
nov 16 16:51 configset_DSa5324fc07c7c.vdf

Each set of files is clearly marked with a unique id that ideally should not change across session since it is the same controller.

By looking at the kernel logs you can cross-reference the ids present in those config file names with ones registered by hidraw/uhid (?):

[nov16 16:51] input: Touch passthrough as /devices/virtual/input/input84
[  +0,000115] input: Pen passthrough as /devices/virtual/input/input85
[  +0,116280] playstation 0003:054C:0CE6.000B: hidraw6: USB HID v81.11 Gamepad [Sunshine DualSense (virtual) pad] on a5:32:4f:c0:7c:7c
[  +0,000044] input: Sunshine DualSense (virtual) pad as /devices/virtual/misc/uhid/0003:054C:0CE6.000B/input/input86
[  +0,000044] input: Sunshine DualSense (virtual) pad Motion Sensors as /devices/virtual/misc/uhid/0003:054C:0CE6.000B/input/input87
[  +0,000027] input: Sunshine DualSense (virtual) pad Touchpad as /devices/virtual/misc/uhid/0003:054C:0CE6.000B/input/input88
[  +0,000098] playstation 0003:054C:0CE6.000B: Registered DualSense controller hw_version=0x01000208 fw_version=0x01000036
[nov16 17:01] input: Touch passthrough as /devices/virtual/input/input89
[  +0,000120] input: Pen passthrough as /devices/virtual/input/input90
[  +0,120389] playstation 0003:054C:0CE6.000C: hidraw6: USB HID v81.11 Gamepad [Sunshine DualSense (virtual) pad] on 17:72:a2:de:56:25
[  +0,000043] input: Sunshine DualSense (virtual) pad as /devices/virtual/misc/uhid/0003:054C:0CE6.000C/input/input91
[  +0,000040] input: Sunshine DualSense (virtual) pad Motion Sensors as /devices/virtual/misc/uhid/0003:054C:0CE6.000C/input/input92
[  +0,000031] input: Sunshine DualSense (virtual) pad Touchpad as /devices/virtual/misc/uhid/0003:054C:0CE6.000C/input/input93
[  +0,000092] playstation 0003:054C:0CE6.000C: Registered DualSense controller hw_version=0x01000208 fw_version=0x01000036
[nov16 17:10] input: Touch passthrough as /devices/virtual/input/input94
[  +0,000104] input: Pen passthrough as /devices/virtual/input/input95
[  +0,107964] playstation 0003:054C:0CE6.000D: hidraw6: USB HID v81.11 Gamepad [Sunshine DualSense (virtual) pad] on 2a:b0:93:3:58:86
[  +0,000053] input: Sunshine DualSense (virtual) pad as /devices/virtual/misc/uhid/0003:054C:0CE6.000D/input/input96
[  +0,000047] input: Sunshine DualSense (virtual) pad Motion Sensors as /devices/virtual/misc/uhid/0003:054C:0CE6.000D/input/input97
[  +0,000034] input: Sunshine DualSense (virtual) pad Touchpad as /devices/virtual/misc/uhid/0003:054C:0CE6.000D/input/input98
[  +0,000107] playstation 0003:054C:0CE6.000D: Registered DualSense controller hw_version=0x01000208 fw_version=0x01000036
[nov16 17:13] input: Touch passthrough as /devices/virtual/input/input99
[  +0,000132] input: Pen passthrough as /devices/virtual/input/input100
[  +0,105293] playstation 0003:054C:0CE6.000E: hidraw6: USB HID v81.11 Gamepad [Sunshine DualSense (virtual) pad] on 2c:96:dc:8a:35:d4
[  +0,000051] input: Sunshine DualSense (virtual) pad as /devices/virtual/misc/uhid/0003:054C:0CE6.000E/input/input101
[  +0,000058] input: Sunshine DualSense (virtual) pad Motion Sensors as /devices/virtual/misc/uhid/0003:054C:0CE6.000E/input/input102
[  +0,000047] input: Sunshine DualSense (virtual) pad Touchpad as /devices/virtual/misc/uhid/0003:054C:0CE6.000E/input/input103
[  +0,000095] playstation 0003:054C:0CE6.000E: Registered DualSense controller hw_version=0x01000208 fw_version=0x01000036
[nov16 17:21] input: Touch passthrough as /devices/virtual/input/input104
[  +0,000138] input: Pen passthrough as /devices/virtual/input/input105
[  +0,124731] playstation 0003:054C:0CE6.000F: hidraw6: USB HID v81.11 Gamepad [Sunshine DualSense (virtual) pad] on ef:7:19:4a:5c:1d
[  +0,000042] input: Sunshine DualSense (virtual) pad as /devices/virtual/misc/uhid/0003:054C:0CE6.000F/input/input106
[  +0,000039] input: Sunshine DualSense (virtual) pad Motion Sensors as /devices/virtual/misc/uhid/0003:054C:0CE6.000F/input/input107
[  +0,000029] input: Sunshine DualSense (virtual) pad Touchpad as /devices/virtual/misc/uhid/0003:054C:0CE6.000F/input/input108
[  +0,000088] playstation 0003:054C:0CE6.000F: Registered DualSense controller hw_version=0x01000208 fw_version=0x01000036

I've looked around in the bugtracker expecting this issue to already be reported but couldn't find any. Could this be an issue unique to my setup? Can anyone else reproduce this behavior?

Expected Behavior

Virtual controller ids of the same real controller should remain the same across sessions.

Additional Context

No response

Host Operating System

Linux

Operating System Version

Fedora Workstation 41

Architecture

amd64/x86_64

Sunshine commit or version

2024.1115.40818

Package

Linux - Fedora Copr

GPU Type

AMD

GPU Model

Radeon RX 6700 XT

GPU Driver/Mesa Version

24.2.6

Capture Method

KMX (Linux)

Config

No response

Apps

No response

Relevant log output

relevant logs in the description of the bug
@ReenigneArcher ReenigneArcher added the input:controller Gamepad issue label Nov 16, 2024
@alecfriedman3
Copy link

When using steam with a dualsense gamepad I've noticed that the controller settings such as adjusting the deadzone or enabling rumble weren't "saving" after exiting and re-entering a sunshine session. Upon further investigation I noticed that the steam controller configuration utility was creating new profiles for each session, as if I was using a different controller each time, each marked with a unique id.

I haven't investigated this, but I may be able to corroborate. I've noticed these symptoms since moving from a version 0.23.1 install to an install built from source. I assumed the issue was due to me missing something in the build, but perhaps it's not. I've worked around it by saving controller schemes in steam so I can just re-assign the full correct mapping. I can try to check for these changing ID's sometime this week.

@ReenigneArcher
Copy link
Member

@ABeltramo can we persist the controller IDs?

@ABeltramo
Copy link
Collaborator

TL:DR: To do it properly, we would need to extend the Moonlight protocol to get more info about the plugged controller from the client.

I assume this is tied to the fact that we generate a random MAC address every time we create a new joypad. There are a few options here, like generating the same address based on the "controller number" or maybe based on the client ID?
All these options will not really work if you swap joypads around. Ex: you adjust the deadzone in Steam for pad "1" and then on the next session you plug a different controller; in this case you don't want it to be persistent.

I'll take a look back at the code and see what we can realistically do. Ideally, it should be Moonlight to give us a unique identifier for the pad..

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
input:controller Gamepad issue
Projects
None yet
Development

No branches or pull requests

4 participants