LEGO City Undercover on Linux
Every crash this game throws on Proton, named and fixed.
A reproducible fix log for running LEGO City Undercover on Linux via Proton 3.7-8, including a Chapter 15 freeze fixed nowhere else.
Every crash this game throws on Proton, named and fixed.
A reproducible fix log for running LEGO City Undercover on Linux via Proton 3.7-8, including a Chapter 15 freeze fixed nowhere else.
LEGO City Undercover (Steam App ID 578330) has several Linux failure modes, and each one produces a misleading symptom that sends people in the wrong direction. The audio thread deadlocks under heavy scene loads and surfaces as a cryptic critical-section timeout that looks like a GPU fault. FSYNC silently crashes the game on cutscenes. High resolutions on a dual-monitor setup freeze level transitions. Newer Proton versions page-fault on launch. Worst of all, the game freezes at the Chapter 15 moon transition, and I could not find that fix documented in any Steam thread or community wiki. I wanted a single page that names every crash, its real cause, and the exact flag that resolves it.
I treated it like a bug investigation rather than a forum hunt. Every crash got reproduced, every root cause confirmed in the Proton logs, and every fix verified before it went in the README. The result is one working Steam launch string where each flag earns its place: the Optimus and Vulkan ICD variables force rendering onto the NVIDIA GPU, PULSE_LATENCY_MSEC=240 raises the PulseAudio buffer so the audio threads stop deadlocking, PROTON_NO_ESYNC and PROTON_NO_FSYNC dodge the cutscene crash, and WINEDLLOVERRIDES="xaudio2_7=n,b" routes XAudio2 through Wine’s own stub, which is the piece that finally gets past Chapter 15. Proton is pinned to 3.7-8 because anything newer breaks the port. A small udev rule tames a noisy SHANWAN controller clone that was flooding the HID queue, and the README pairs every error-log signature with its fix so someone landing from a search lands on an answer.
__NV_PRIME_RENDER_OFFLOAD=1 __VK_LAYER_NV_optimus=NVIDIA_only __GLX_VENDOR_LIBRARY_NAME=nvidia VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/nvidia_icd.json PULSE_LATENCY_MSEC=240 PROTON_NO_ESYNC=1 PROTON_NO_FSYNC=1 WINEDLLOVERRIDES="xaudio2_7=n,b" PROTON_LOG=1 %command% → Full setup guide configuration, deployment, troubleshooting