Steam launches from CLI but not from the app icon on Ubuntu 24.04

Gaming

If you’ve installed Steam on Ubuntu 24.04 and noticed it works fine when launched from the terminal but shows no window (or a transparent/broken window) when clicking the app icon, you’re not alone. Here’s what’s going on and how to fix it.

Symptoms

  • Steam launches normally from the terminal (steam command).
  • Clicking the Steam icon in the application launcher shows nothing, or a transparent/flickering window.
  • The Steam process does appear in ps aux when launched from the icon, it’s running, just not showing its window.

Root cause

The culprit is a single environment variable: DRI_PRIME.

GNOME sets DRI_PRIME when launching apps from the desktop to steer them toward the integrated (low-power) GPU. This is part of GNOME’s power management behaviour.

When Steam is launched from the terminal, this variable is not set, so Steam correctly uses your discrete GPU. When launched via the icon, GNOME injects DRI_PRIME=pci-0000_XX_00_0 pointing at the integrated GPU, and Steam fails to render its window properly on it.

You can confirm this is the issue by comparing the two environments:

# In your terminal, capture the CLI environment
env | sort > /tmp/cli-env.txt

# Then modify your .desktop file temporarily to capture the icon environment
# Add to the Exec line: bash -c 'env | sort > /tmp/desktop-env.txt && /usr/bin/steam %U'
# Click the icon, then:
diff /tmp/cli-env.txt /tmp/desktop-env.txt

In the diff output, look for:

> DRI_PRIME=pci-0000_XX_00_0

XX would be a number in that output. That line only appears in the desktop launcher environment, that’s your smoking gun.

The fix

Override the .desktop file to unset DRI_PRIME before launching Steam:

# Copy the system .desktop file to your local overrides
cp /usr/share/applications/steam.desktop ~/.local/share/applications/steam.desktop

# Unset DRI_PRIME for all Exec lines
sed -i 's|Exec=/usr/bin/steam|Exec=env -u DRI_PRIME /usr/bin/steam|g' \
    ~/.local/share/applications/steam.desktop

The env -u DRI_PRIME prefix strips the variable before Steam starts, so it behaves exactly as if you launched it from the terminal.

No logout required, the change takes effect the next time you click the icon.

Why not just set DRI_PRIME to the discrete GPU?

You could do Exec=env DRI_PRIME=pci-0000_XX_00_0 /usr/bin/steam, but unsetting the variable is cleaner. It lets Steam (and its runtime) decide which GPU to use based on its own logic, rather than hardcoding a PCI address that could theoretically change.

System details

This was tested on:

  • OS: Ubuntu 24.04 LTS
  • Desktop: GNOME on Xorg
  • GPU: AMD Radeon RX 7800 XT (discrete) + AMD Raphael (integrated)
  • Steam version: 1773426488
  • Driver: Mesa / radeonsi, LLVM 20.1.2, kernel 6.17

The issue likely affects any dual-GPU system (AMD+AMD, AMD+Intel, Nvidia+Intel) where GNOME’s GPU offloading kicks in for desktop-launched apps. Happy to hear if this solution worked for you.

Share on Mastodon

About Marcel Bootsman

Marcel discovered the web in 1995. Since then he has paid attention to and worked with lots of technologies and founded his own WordPress oriented business nostromo.nl in 2009.

Currently Marcel is Partnerships & Community Manager EMEA at Kinsta. where he helps clients and partners grow with their business with Managed Hosting for WordPress.

You can contact Marcel on a diverse range of online platforms. Please see the Connect section on the homepage for the details.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *