Hi, thanks for a great guide & kudos to all contributors too!
I've been trying to run a low latency Rocksmith setup on Steam Deck using my audio interface. However, I run into problems when running the game. Basically, it was only possible to run one of the following scenarios exclusively:
- start Rocksmith from Steam, having no audio, but with working Steam auth (visible profile & (C)DLC)
- start Rocksmith from terminal, with working audio, but no Steam auth (missing profile & (C)DLC)
(Feel free to skip to the summary at the bottom for a solution if you are not interested in debugging.)
Setup
- everything running in Steam Deck desktop mode
- standard Rocksmith 2014 install on Steam, using default Proton 7.0-6 picked by Valve
- audio interface as reported by
lsusb
: ID 1235:8210 Focusrite-Novation Scarlett 2i2 Camera
Relevant bits from RS_ASIO.ini
[Asio]
BufferSizeMode=custom
CustomBufferSize=256
[Asio.Output]
Driver=WineASIO
[Asio.Input.0]
Driver=WineASIO
Relevant bits from Rocksmith.ini
[Audio]
LatencyBuffer=4
ExclusiveMode=1
Win32UltraLowLatencyMode=1
Debugging wineasio errors
Running Rocksmith from Steam, the following error was produced in RS_ASIO-log.txt
.
0.348 [INFO] RSAggregatorDeviceEnum::UpdateAvailableDevices
0.348 [INFO] AsioHelpers::FindDrivers
0.357 [INFO] WineASIO
0.357 [INFO] RSAsioDeviceEnum::UpdateAvailableDevices - output requesting ASIO driver: WineASIO
0.357 [INFO] Creating AsioSharedHost - dll: wineasio.dll
6.392 [ERROR] ASIO Error: WineASIO does not return error messages
6.392 [INFO] Destroying AsioSharedHost - dll: wineasio.dll
6.393 [ERROR] RSAsioDeviceEnum::UpdateAvailableDevices - failed.
6.393 [INFO] RSAsioDeviceEnum::UpdateAvailableDevices - input[0] requesting ASIO driver: WineASIO
6.393 [INFO] Creating AsioSharedHost - dll: wineasio.dll
6.401 [ERROR] ASIO Error: WineASIO does not return error messages
6.401 [INFO] Destroying AsioSharedHost - dll: wineasio.dll
6.401 [ERROR] RSAsioDeviceEnum::UpdateAvailableDevices - failed.
6.401 [INFO] DebugDeviceEnum::UpdateAvailableDevices - 0 render devices, 0 capture devices
Having no more debugging info, I tried running Rocksmith again with more verbose launch options.
Then, when inspecting Proton log file at ~/steam-221680.log
, an interesting bit showed up.
======================
Proton: 1675326504 proton-7.0-6e
SteamGameId: 221680
Command: ['/run/media/mmcblk0p1/SteamLibrary/steamapps/common/Rocksmith2014/Rocksmith2014.exe', '-uplay_steam_mode']
Options: {'forcelgadd'}
depot: 0.20230222.42118
pressure-vessel: 0.20230220.0 scout
scripts: 0.20230220.0
soldier: 0.20230222.42118 soldier 0.20230222.42118
Kernel: Linux 5.13.0-valve36-1-neptune #1 SMP PREEMPT Mon, 19 Dec 2022 23:39:41 +0000 x86_64
======================
...
7414.932:0118:011c:trace:loaddll:build_module Loaded L"E:\\SteamLibrary\\steamapps\\common\\Rocksmith2014\\RS_ASIO.dll" at 0FF40000: native
7415.291:0118:011c:trace:loaddll:build_module Loaded L"C:\\windows\\system32\\wineasio.dll" at E1AA0000: builtin
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
exec of JACK server (command = "/usr/bin/jackd") failed: No such file or directory
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
Unable to open a JACK client as: Rocksmith2014
7421.319:0118:011c:trace:loaddll:free_modref Unloaded module L"C:\\windows\\system32\\wineasio.dll" : builtin
7421.328:0118:011c:trace:loaddll:build_module Loaded L"C:\\windows\\system32\\wineasio.dll" at E1AA0000: builtin
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
Unable to open a JACK client as: Rocksmith2014
7421.329:0118:011c:trace:loaddll:free_modref Unloaded module L"C:\\windows\\system32\\wineasio.dll" : builtin
This log file confirmed that both wineasio & rs_asio DLLs loaded successfully.
Additionally, it seems like running Rocksmith directly from Steam results in some missing audio related socket file. This explains why wineasio complains about no devices available - since it is not able to connect to pipewire.
However, there is an interesting solution available which I found by complete coincidence.
Running the Game
After some tinkering, I found a way to make both audio & Steam auth work (without cracking anything).
First, start Rocksmith from Steam with the following launch options.
PROTON_LOG=1 PROTON_DUMP_DEBUG_COMMANDS=1 %command%
This instructs Proton to dump a game launch script at /tmp/proton_deck/run
.
#!/bin/bash
#Run game or given command in environment
cd "/run/media/mmcblk0p1/SteamLibrary/steamapps/common/Rocksmith2014"
DEF_CMD=("/run/media/mmcblk0p1/SteamLibrary/steamapps/common/Rocksmith2014/Rocksmith2014.exe" "-uplay_steam_mode")
PATH="/home/deck/.local/share/Steam/steamapps/common/Proton 7.0/dist/bin/:/usr/bin:/bin" \
TERM="xterm" \
WINEDEBUG="-all" \
WINEDLLPATH="/home/deck/.local/share/Steam/steamapps/common/Proton 7.0/dist/lib64//wine:/home/deck/.local/share/Steam/steamapps/common/Proton 7.0/dist/lib//wine" \
LD_LIBRARY_PATH="/home/deck/.local/share/Steam/ubuntu12_64/video/:/home/deck/.local/share/Steam/ubuntu12_32/video/:/home/deck/.local/share/Steam/steamapps/common/Proton 7.0/dist/lib64/:/home/deck/.local/share/Steam/steamapps/common/Proton 7.0/dist/lib/:/usr/lib/pressure-vessel/overrides/lib/x86_64-linux-gnu/aliases:/usr/lib/pressure-vessel/overrides/lib/i386-linux-gnu/aliases" \
WINEPREFIX="/home/deck/.local/share/Steam/steamapps/compatdata/221680/pfx/" \
WINEESYNC="1" \
WINEFSYNC="1" \
SteamGameId="221680" \
SteamAppId="221680" \
WINEDLLOVERRIDES="steam.exe=b;dotnetfx35.exe=b;dotnetfx35setup.exe=b;beclient.dll=b,n;beclient_x64.dll=b,n;d3d11=n;d3d10core=n;d3d9=n;dxgi=n;d3d12=n" \
STEAM_COMPAT_CLIENT_INSTALL_PATH="/home/deck/.local/share/Steam" \
WINE_LARGE_ADDRESS_AWARE="1" \
GST_PLUGIN_SYSTEM_PATH_1_0="/home/deck/.local/share/Steam/steamapps/common/Proton 7.0/dist/lib64/gstreamer-1.0:/home/deck/.local/share/Steam/steamapps/common/Proton 7.0/dist/lib/gstreamer-1.0" \
WINE_GST_REGISTRY_DIR="/home/deck/.local/share/Steam/steamapps/compatdata/221680/gstreamer-1.0/" \
MEDIACONV_AUDIO_DUMP_FILE="/home/deck/.local/share/Steam/steamapps/shadercache/221680/fozmediav1/audiov2.foz" \
MEDIACONV_AUDIO_TRANSCODED_FILE="/home/deck/.local/share/Steam/steamapps/shadercache/221680/transcoded_audio.foz" \
MEDIACONV_VIDEO_DUMP_FILE="/home/deck/.local/share/Steam/steamapps/shadercache/221680/fozmediav1/video.foz" \
MEDIACONV_VIDEO_TRANSCODED_FILE="/home/deck/.local/share/Steam/steamapps/shadercache/221680/transcoded_video.foz" \
"/home/deck/.local/share/Steam/steamapps/common/Proton 7.0/dist/bin/wine64" c:\\windows\\system32\\steam.exe "${@:-${DEF_CMD[@]}}"
Running /tmp/proton_deck/run
script from terminal makes both audio & Steam activation work reliably!
At this point, I had crackling sound from my Scarlett Focusrite 2i2 audio interface which was fixed by amending the script to include PIPEWIRE_LATENCY
env variable.
...
PIPEWIRE_LATENCY="256/48000" \
"/home/deck/.local/share/Steam/steamapps/common/Proton 7.0/dist/bin/wine64" c:\\windows\\system32\\steam.exe "${@:-${DEF_CMD[@]}}"
I think I found the proper buffer size of 256 by inspecting pw-top
entries when the game was running. The standard recommendation to try 48/96/192 as buffer size for Focusrite 2i2 didn't work correctly.
As a side note, it might be a good idea to save /tmp/proton_deck/run
under a different path. Otherwise it will be overwritten the next time Rocksmith is run from Steam. Also, the generated script doesn't contain any env vars defined in game launch options by default.
Summary
The way of launching Rocksmith on Steam Deck as described in the guide, when using Steam installation defaults and custom terminal script, results for me in either Steam auth/profile/(C)DLC working or wineasio working with the audio interface at all.
By running Rocksmith from Steam with PROTON_DUMP_DEBUG_COMMANDS=1 %command%
launch option, it is possible to generate a Proton script that works flawlessly. It is unknown, why the very same Proton works from terminal script, and doesn't work from Steam directly. (pipewire/jack socket connection problem might be a good lead.)
Debug output can be produced with PROTON_LOG=1 %command%
launch option, to verify wineasio & rs_asio are registered and running. Solving the pipewire/jack socket issue would allow it to run without resorting to customized Proton scripts. (Maybe Steam runtime misses/doesn't see pipewire-jack client libs? or it is some container isolation problem?)
Gaming mode might be a bit more tricky to figure out, as the default Deck audio devices need to be disabled from Desktop mode anyway. But solving the socket issue would also possibly enable Gaming mode setup. (I can smell HDMI related issues already.)
What Next
@theNizo Should we extend the Steam Deck guide? I could try integrating relevant info as a PR.
Someone more knowledgeable might be able to tinker with custom Proton version and patch audio socket issue.
Anyway, back to my bass. Thanks! ❤️