Skip to content

Linux/Proton: SSLKEYLOGFILE is honored — full sync verified end to end #8

Description

@ayozetr

docs/LINUX.md lists this as the one unverified assumption the Linux backend rests on:

Whether ARC Raiders under Proton honors SSLKEYLOGFILE for the connection ARCTracker reads has not been verified end-to-end on this machine [...] If keys aren't written, no decryption is possible regardless of capture.

It is honored, and a full sync completes on Linux. Setup: CachyOS, kernel 7.1.6, Wayland, Proton cachyos-11.0-20260703-slr, ARC Raiders on Steam, built from d591460.

Three checks, rather than trusting a green screen:

  1. lsof on the key log shows the game's own GameThread holding write descriptors on it, so PioneerGame.exe writes to the file itself rather than something upstream of it doing so on its behalf. Proton's python3 wrapper and wineserver hold descriptors too, and the header line is CPython's — which of them wrote any given secret was not established, only that the game is among the writers.
  2. The file accumulates TLS 1.3 secrets — CLIENT_HANDSHAKE_TRAFFIC_SECRET, SERVER_TRAFFIC_SECRET_0, and so on — and keeps growing across a session.
  3. With capture running, the app reached its synced state and named the ARCTracker account.

One caveat worth documenting: capture only decrypts handshakes it witnesses, so the app has to be started before the game. If the game is already running it must be restarted, otherwise the gateway handshake is missed and the app sits on "looking for your account" indefinitely. This is the single easiest symptom to mistake for a bug.

While getting there I ran into a handful of separate issues, all with fixes ready if you want them as PRs:

  • cargo clippy --all-targets -- -D warnings, exactly as CI runs it, fails on current stable rustc (1.97.1) with 32 instances of falling back to f32 as the trait bound f32: From<f64> is not satisfied. I hit this on the Linux job; the Windows one runs the same command and 27 of the 32 are in theme.rs and widgets.rs, which carry no cfg(windows) at all.
  • i18n::tests::unknown_tag_resolves_to_english fails on any machine whose system locale is supported and not English — it falls through to the system language. Reproduces with LANG=es_ES.UTF-8 cargo test --lib i18n.
  • The Linux CI job and the README install libgtk-3-dev, libxdo-dev, libayatana-appindicator3-dev and pkg-config; a release build and cargo test both complete in a container with none of them present.
  • find_processes cannot see a Wine process, so game_running is permanently false on Linux: /proc/<pid>/exe resolves to the Wine preloader and comm holds the main thread's name (ARC Raiders reports GameThread).
  • File dialogs never open once the binary carries CAP_NET_RAW, which scripts/run-linux.sh grants by default — xdg-desktop-portal cannot identify the caller, so pick_file() returns None and both "choose game" buttons look inert.
  • launcher_readiness reads SSLKEYLOGFILE from the launcher process, which misses Steam's per-game launch options entirely — they reach the game and never the Steam process. Happy to open a separate issue for that one, since it is a behaviour change rather than a fix.

Glad to send any subset as PRs, or none at all if you would rather take a different approach.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions