Got the exact same problem on Asahi Fedora Remix. I tried to manually patch ~/.local/share/Steam/steamui/chunk~2dcc5aaf7.js, but the problem persists.
I reproduced this issue and confirmed that the “Waiting for network” screen was not caused by a virtio-GPU fence hang.
7.1.6-400.asahi.fc44.aarch64+16k1785799196muvm-0.6.0-3.fc44.aarch64libkrun-1.19.0-1.fc44.aarch64fex-emu-2604-1.fc44.aarch64This happens when Steam needs to display its login form, for example on a clean installation, after signing out, or after the saved login token expires.
Start Steam normally:
steam
The “Sign in to Steam” window remains indefinitely on:
Waiting for network...
Steam's own logs show that networking is actually functional:
Connectivity test: result=Connected
IPv6 HTTP connectivity test ... SUCCESS
IPv6 UDP connectivity test ... SUCCESS
ConnectionCompleted(... WebSocket)
steamui_login.txt shows that the backend is waiting for credentials:
SetLoginState: WaitingForCredentials - OK
The actual UI failure appears in webhelper_js.txt:
SteamApp Init - Before Login - SystemNetworkStore - ERROR
TypeError: SteamClient.System.Network.RegisterForDeviceChanges is not a function
The Steam UI bundle calls several SteamClient.System.Network methods that are unavailable in this environment. SystemNetworkStore therefore fails to initialize, and the login UI never replaces the “Waiting for network” screen.
Exit Steam completely, locate the affected UI bundle, and patch the missing-function checks:
grep -l 'System.Network.RegisterForDeviceChanges' \
~/.local/share/Steam/steamui/chunk~*.js
Save the following as fix-steam-network.py:
#!/usr/bin/python3
from datetime import datetime
from pathlib import Path
import shutil
import sys
steam_ui = Path.home() / ".local/share/Steam/steamui"
replacements = {
b'const t=(0,B.Dp)("System.Network.RegisterForDeviceChanges");':
b'const t="function"==typeof SteamClient?.System?.Network?.RegisterForDeviceChanges;',
b'(0,B.Dp)("System.Network.GetProxyInfo")&&SteamClient.System.Network.GetProxyInfo().then':
b'"function"==typeof SteamClient?.System?.Network?.GetProxyInfo&&SteamClient.System.Network.GetProxyInfo().then',
b'(0,B.Dp)("System.Network.RegisterForConnectivityTestChanges")&&SteamClient.System.Network.RegisterForConnectivityTestChanges(this.OnConnectivityTestStateChanged)':
b'"function"==typeof SteamClient?.System?.Network?.RegisterForConnectivityTestChanges&&SteamClient.System.Network.RegisterForConnectivityTestChanges(this.OnConnectivityTestStateChanged)',
b't||(this.m_bIsAwaitingInitialNetworkState=!1)':
b't||(this.m_bIsAwaitingInitialNetworkState=!1,this.m_bIsConnectedToANetwork=!0)',
}
candidates = [
path for path in steam_ui.glob("chunk~*.js")
if b"System.Network.RegisterForDeviceChanges" in path.read_bytes()
]
if len(candidates) != 1:
sys.exit(f"Expected one matching Steam UI chunk, found {len(candidates)}")
target = candidates[0]
content = target.read_bytes()
if all(content.count(new) == 1 for new in replacements.values()):
print(f"Already patched: {target}")
raise SystemExit(0)
for old, new in replacements.items():
count = content.count(old)
if count != 1:
sys.exit(f"Refusing to patch: expected one match, found {count}: {old!r}")
content = content.replace(old, new, 1)
timestamp = datetime.now().strftime("%Y%m%d-%H%M%S")
backup = target.with_name(f"{target.name}.before-network-fix-{timestamp}")
shutil.copy2(target, backup)
target.write_bytes(content)
print(f"Patched: {target}")
print(f"Backup: {backup}")
Run it:
python3 fix-steam-network.py
Then start Steam once without allowing it to verify and restore the modified bundle:
steam \
-noverifyfiles \
-nobootstrapupdate \
-skipinitialbootstrap \
-norepairfiles
After applying the patch, the Steam username/password and QR-code login form appeared immediately. I signed in successfully.
After the initial successful login, Steam could be launched normally again.
Steam updates may replace the patched JavaScript bundle. If the saved login expires and the problem returns, the patch may need to be reapplied to the new chunk~*.js file.
The large fence output produced by RUST_LOG=debug was misleading. libkrun scans a shared pending-descriptor collection, while the debug messages print only the fence ID and omit its context and ring. Entries belonging to other rings can therefore look like stale completed fences.
The installed libkrun 1.19.0 code removes completed descriptors for the matching (context, ring) and already contains the out-of-order completion fix. The fence diagnostics could still be improved, but they were not responsible for this Steam login failure.
Confirmed on M1 Pro, same client build. Also worth noting: steam -login bypasses the login form entirely and authenticates successfully without patching — though per your point about token expiry, that’s likely only a temporary workaround. steamcmd also logs in cleanly on the same machine.
Replying to https://github.com/ValveSoftware/steam-for-linux/issues/13493#issuecomment-5285196297
Confirmed patching works on Gentoo amd64 using https://github.com/anyc/steam-overlay
It was a new Steam account having only logged in on the web, on a fresh Gentoo install with a fresh user profile. So after logging in for the first time, I checked "remember me" and then confirmed that 'steam -login' also works, after it repairs / reverts the patch. Thank you!
@oskarsss Thank you, the script works. Used on gentoo
Just happened to me too, can confirm patching works on Void.
On a completely clean install (fresh ~/.local/share/Steam, ~/.steam, no prior config or cache), Steam downloads, extracts, and installs successfully, then the login window shows "Waiting for network" indefinitely. Reproduces in both the desktop UI and Big Picture mode (-gamepadui).
cef_log.txt shows:
SteamApp Init - Before Login - SystemNetworkStore - ERROR
TypeError: SteamClient.System.Network.RegisterForDeviceChanges is not a function
source: https://steamloopback.host/library.js
This is not a network problem. connection_log.txt shows every connectivity test passing:
IPv4 connectivity test: OK
IPv6 HTTP connectivity test: SUCCESS
IPv6 UDP connectivity test: SUCCESS
External IPv6 address correctly detected
steamui_login.txt shows the backend is ready and waiting:
SetLoginState: WaitingForCredentials - OK
The UI never advances past this point despite the backend being ready and network connectivity confirmed working.
I checked whether the missing function actually exists in the shipped client files:
$ grep -rl "RegisterForDeviceChanges" ~/.local/share/Steam/steamui/
/home/armando/.local/share/Steam/steamui/chunk~2dcc5aaf7.js
$ strings ~/.local/share/Steam/ubuntu12_64/steamclient.so | grep -c RegisterForDeviceChanges
0
$ strings ~/.local/share/Steam/ubuntu12_64/steamwebhelper | grep -c RegisterForDeviceChanges
0
The steamui JS bundle (chunk~2dcc5aaf7.js) calls a function that does not exist in either steamclient.so or steamwebhelper. SystemNetworkStore therefore fails to initialize and the login UI hangs.
Environment notes:
This looks related to #13432 ("Waiting for network" since the July 21 client) and possibly the same bug family as #10813 from 2024 (missing RegisterForComputerActiveStateChange binding, same chunk hash ~2dcc5aaf7).
Steps to reproduce:
steam-logs-for-bug-report.zip
Originally posted by @armandolara in [#13432](https://github.com/ValveSoftware/steam-for-linux/issues/13432#issuecomment-5209252957)