protonscr

[Beta May 5th] BUG: Uses the WRONG desktop scaling variable.

steamclosed Steam client
ValveSoftware/steam-for-linux#9466 · opened 2023-05-05 by Arcitec · updated 2025-09-14 · 17 comments · github
AArcitec 2023-05-05 github

Hi :) Thanks a lot for working on the desktop GUI scaling on Linux. However, as you can see from the descriptions below, you're using the wrong variables.

Here's what the announcement from Valve said: "Steam will now use the system's global scale factor as configured in KDE/Gnome settings. Specifically org.gnome.desktop.interface/text-scaling-factor."

This is what you use:

image

The main purpose of that text scaling variable is to allow people to change the size of text to make it smaller/larger than the current desktop graphics scale. So if you're let's say at 200% desktop scale, you may prefer a text scale of 0.87 (87%) to make the text less comically large, etc.

This is what you need to use instead:

image

HOWEVER! Even the correct variable above is DEPRECATED!

What does that mean?

It means: It's no longer used. GNOME itself no longer writes to that variable.

GNOME now uses ~/.config/monitors.xml instead, which is what the GNOME Display Settings modifies. The dconf variable above is never updated anymore. The dconf variable is permanently "2" on my system (GNOME 44) no matter how many times I change the scale of the desktop.

Here is an example of the modern ~/.config/monitors.xml content on my 300% scaling display:

$ cat ~/.config/monitors.xml
<monitors version="2">
  <configuration>
    <logicalmonitor>
      <x>0</x>
      <y>0</y>
      <scale>2</scale>
      <primary>yes</primary>
      <monitor>
        <monitorspec>
          <connector>HDMI-2</connector>
          <vendor>SNY</vendor>
          <product>SONY TV  *00</product>
          <serial>0x01010101</serial>
        </monitorspec>
        <mode>
          <width>3840</width>
          <height>2160</height>
          <rate>60.000</rate>
        </mode>
      </monitor>
    </logicalmonitor>
  </configuration>
  <configuration>
    <logicalmonitor>
      <x>0</x>
      <y>0</y>
      <scale>3</scale>
      <primary>yes</primary>
      <monitor>
        <monitorspec>
          <connector>HDMI-1</connector>
          <vendor>SNY</vendor>
          <product>SONY TV  *00</product>
          <serial>0x01010101</serial>
        </monitorspec>
        <mode>
          <width>3840</width>
          <height>2160</height>
          <rate>60.000</rate>
        </mode>
      </monitor>
    </logicalmonitor>
  </configuration>
</monitors>

As you can see, they actually remember scaling PER OUTPUT, PER MONITOR nowadays. I can see that scale is set to 200% if I use the other HDMI port, and 300% on my current HDMI port.

This XML doc looks a bit complex and may be really beyond your energy to parse though (unless GNOME has some API to fetch the correct scale automatically), so feel free to simply use the correct, legacy dconf variable instead:

org.gnome.desktop.interface/scaling-factor.

AArcitec 2023-05-05 github

That being said, it would be super welcome if you could just add a nice little dropdown inside the app too, to let users choose between "automatic guess based on system" or a manual override such as 225%. People have been wishing for that for a decade. :D

That would allow us to have better control, and to fix the scale if Steam misdetects it (especially since even the correct dconf variable is deprecated now and won't always be correct)! This is a great opportunity to finally add that feature. :)

Jjarrard 2023-05-09 github

Scaling doesn't even work for me under Plasma. Could be that I have a NV4090? tried a few different tricks to force it, but no luck. It's all small font and scaling at 4k.

Llangurmonkey 2023-05-09 github

I find the same behaviour as @jarrad, nothing works with NVIDIA (using GTX 1070, i3wm, Xorg, Arch Linux with kernel 6.3.1-arch1-1, NVIDIA driver 530.41.03). This is what I tried:

  • -forcedesktopscaling
  • $GDK_SCALE
  • org.gnome.desktop.interface.text-scaling-factor via gsettings
  • org.gnome.desktop.interface.scaling-factor via gsettings

Using a 4K display, the UI is always super small, almost illegible.

AArcitec 2023-05-18 github

May 17th beta is out now. Sadly no notes about fixing this variable:

https://steamcommunity.com/groups/SteamClientBeta/announcements/detail/3731840159844956304

And people say the GDK_SCALE env var stopped working again.

Edit: I am trying the beta now (on NVIDIA, GNOME X11). It doesn't react to any of these anymore. So it seems like Valve may be working on implementing the proper scaling method on GNOME instead (the modern one mentioned in the 1st post):

  • dconf: scaling-factor, text-scaling-factor. Both are removed.
  • env: GDK_SCALE (this does nothing: flatpak run --env=GDK_SCALE=2 com.valvesoftware.Steam) Maybe this was removed since people said this usage was an abuse of GDK_SCALE.

But this works:

  • The command line flag to force a scale works: flatpak run com.valvesoftware.Steam -forcedesktopscaling 2.0
Jjarrard 2023-05-18 github

I do notice some latency issues, UI isn't as snappy and the splash screen when selecting account is cut off a bit. Also window drag zones are a bit wonky.

Some other minor things like proton version selection list being compressed.

Ooemsysadm 2023-05-22 github

Desktop client scaling has been either broken or not working well for years. Here is another request for a manual UI scale setting in %. I run a 48" 4k monitor (Gnome), and it's hard to read the steam desktop client UI. Especially on the new beta UI preview.

Sshadywack 2023-05-28 github

I have this issue too, Gnome 44 on Fedora 38 with scale factor 200%, also on Gentoo w/Plasma 5.27 and scaling of 1.50.

Ccreativecoder 2023-06-15 github

Can confirm issue description:

Pop!_OS 22.04 LTS
Gnome 42.5

Single 4K display, set to 200% scaling
image

scaling-factor settings don't seem to be used

$ gsettings get org.gnome.desktop.interface scaling-factor
uint32 0
$ gsettings get org.gnome.desktop.interface text-scaling-factor
1.0

Monitor config within ~/.config/monitors.xml with <scale>2</scale>

  <configuration>
    <logicalmonitor>
      <x>0</x>
      <y>0</y>
      <scale>2</scale>
      <primary>yes</primary>
      <monitor>
        <monitorspec>
          <connector>HDMI-A-0</connector>
          <vendor>TCL</vendor>
          <product>50S535</product>
          <serial>0x00000000</serial>
        </monitorspec>
        <mode>
          <width>3840</width>
          <height>2160</height>
          <rate>60</rate>
        </mode>
      </monitor>
    </logicalmonitor>
  </configuration>
Ggtsiam 2023-06-15 github

@Arcitec The things you listed are all gnome-specific and should not be used by applications directly. They're meant for gnome and gtk use only.

In Short

Read Xft.dpi with XGetDefault() or similar and divide by 96. If there is no Xft.dpi, just use a scale of 1.

You can see the dpi on your system with: xrdb -query | grep Xft.dpi. On my system it's 192, so 192 / 96 = 2.

In Long

Wayland provides a nice api for window scaling (and recently, even fractional scaling). But since steam is using x11 things get a bit more complicated. From what I've gathered, there are two ways to get the display scaling factor in x11:

  • The first is to read Xft.dpi and divide by 96.
  • The second is to get the size of the monitor from xrandr and do a bunch of math to calculate the scale factor.

Apparently, gtk used to do the first and then fallback to the second step. But as of gtk 3.17.6, they seem to have dropped the fallback behaviour.

For fractional scaling on x11, both gnome and kde seem to have settled with with rendering with the highest integer scaling factor and downscaling. So the dpi divided by 96 (should?) always be an integer.

Jjarrard 2023-06-16 github
image

Valve needs to just change scale to a slider with text and let people go from say %50 to %400 in %10 increments.

Llavadrop 2023-08-08 github

Just updated to Beta 1691444934 and scaling seems correct now.

HHenne1191 2023-09-22 github

For me it is still not working. I can only get the correct scaling by specifying "-forcedesktopscale 2". Set scale to 200% in Ubuntu settings. text-scaling-factor is showing 1.0 and in monitors.xml is also set to 1 which I find a bit strange. Where is the 200% Ubuntu setting stored?

Kkleener 2023-10-13 github

With Ubuntu 23.10 Steam flickers with me and I can not set anything in the Gui, or open.
The following error in the syslog:

xdg-desktop-portal-kde[2165]: xdp-kde-settings: Namespace "org.gnome.desktop.interface" is not supported

AArcitec 2024-09-01 github

Still broken in the latest Steam for Linux over a year later. Using GNOME 46 on Wayland currently (Fedora 40).

I have to use STEAM_FORCE_DESKTOPUI_SCALING=2.5 environment variable to force this garbage UI to a proper scale.

Jjarrard 2024-09-01 github

I have to use STEAM_FORCE_DESKTOPUI_SCALING=2.5

That's %250 scale. Are you running a 8k screen?

AArcitec 2024-09-01 github

I have to use STEAM_FORCE_DESKTOPUI_SCALING=2.5

That's %250 scale. Are you running a 8k screen?

3840x2160.

AArcitec 2025-09-10 github

September 9th, 2025, this is finally fixed.

Two long years, but it's finally here.

  • STEAM_FORCE_DESKTOPUI_SCALING has been deleted.

New changes:

  • Enabled advanced options for the in-game performance overlay for AMD and Nvidia GPUs.
  • Fixed the 'Browse Local Files' button in 'Game Properties' failing to open the system file browser.
  • Fixed a rare case where the Big Picture update progress UI would disappear.
  • Fixed Steam UI scale not updating with system DPI changes in XWayland.
  • Fixed system display scale not applying in overlay.
  • Fixed a case where steam would freeze and fail to recover after a process crash.
  • Fixed an issue with crash dump reporting.
  • Fixed Steam client failing to reload or showing dialogs unexpectedly after a render process crash.
  • Added an accessibility settings menu to desktop mode. It includes features such as: High Contrast mode, Reduced motion settings, UI Scale controls.

https://steamcommunity.com/games/593110/announcements/detail/500583527919651040

Overriding the UI scaling is now doable via Settings: Accessibility in the main client UI instead of an env varaible.

Nothing extracted yet.