44

I am running Gnome Shell with a 4k monitor and there are a few applications that I use that don't scale at all with the high resolution.

Here is an example of LMMS, an application that hasn't yet been ported Qt 5, so it doesn't have high dpi scaling capabilities:

Screenshot
(Click images to enlarge)

Is there any way to scale a specific X window without changing the display resolution?

My current solution is to half the dimensions of my display resolution, but this degrades the resolution of every other application that supports proper dpi scaling:

Screenshot

karel
  • 13,706
daxvena
  • 1,033

6 Answers6

34

I finally managed to find a solution that scales old applications without any noticeable visual or performance degradation.

Thanks to kaueraal, you can now scale old applications using run_scaled. You can obtain the script from either his GitHub page or as part of the xpra package if you are running Arch Linux.

Here is an example of two applications running side by side:

  • Firefox with HiDPI support on the left
  • LMMS running with run_scaled on the right

enter image description here

I discovered this script through the Arch Linux Wiki.

VasyaNovikov
  • 3,656
daxvena
  • 1,033
9

Without seeing the exact problem that you are running into I would suggest using

GDK_SCALE=x

or

GDK_DPI_SCALE=x

Before starting each application. You will likely have to manually change .desktop files or run from your shell prefixing the commands with GDK_SCALE=x

GDK_SCALE only allow interger values however GDK_DPI_SCALE=x allow for decimal values like i.e.GDK_DPI_SCALE=0.66

For other SDK based applications there are likely similar settings for respective kits. However since your problem is with gnome desktop I will provide this solution.

I haven't tried with a 4k monitor, but running GDK_DPI_SCALE=1.66 gnome-calculator will demo the solution.

Source: https://developer.gnome.org/gtk3/stable/gtk-x11.html

3

Vncdesk gives you a solution based on a local VNC client-server (see here)

It is not a complete solution for me because it gives some problems if the app need a window manager.

3

I have an application that spawns many windows, and I cannot at the moment use xpra as is required by the accepted run_scaled solution. I also can't tolerate gnome-tweak-tool's 2x scaling. Too huge. Need 1.5x.

I have discovered that the tigerVNC java client supports client-side display scaling of 150%.

So I start a vncserver with 2/3rds size and a minimal windows manager:

vncserver -geometry 2520x1380 -xstartup ~/.vnc/xstartup-mwm

I then connect with TigerVNC's v1.7 java client (1.8.0 consistently crashes for me):

java -jar VncViewer-1.7.0.jar -ScalingFactor=150

Other than the commandline, you can hit F8 to get the VNC Viewer Options. Screen->Scaling Factor->150%. This scales the resolution from 2/3rds of 4k to 4k.

enter image description here

Archaic MWM in VNC with 150% scaling on the left. Fancy Gnome desktop (native) on the right, no scaling. You'll notice the tiny icons. Gnome is otherwise adjusted for 4k with 1.5x Font Scaling in gnome-tweak-tool, but the icons don't scale. This is just an example application -- the icons and scaling in the application that is pushing me this way are far worse.

Unfortunately this is an entire 1.5x scaled desktop with a separate window manager. It creates a nice walled-off area for my multiwindow app, but it's annoying to have a second window manager. Nonetheless VNC is something I'm familiar with from longtime use, and this does kick over to the laptop pretty easily, so perhaps this is usable.

1

I think I've found a GPU-accelerated solution! Install weston and run this:

weston --xwayland --scale=2
DISPLAY=:1 your_app

That's it!

Tuning

Note 1: You may have noticed a magical number has been used, DISPLAY=:1. The underlying assumption here was that your main xorg display is :0. If it's not, adjust accordingly.

Note 2: You may have noticed that weston has a top panel by default. You may want to remove it. To do that, create a weston.ini file:

[core]
idle-time=0

[shell] panel-position=none locking=false

And use it when starting weston weston --config=/path/to/weston.ini. You can also place it to ~/.config/weston.ini for it to be picked up by weston automatically, please refer to man weston.ini for further details.

EDIT: I've also documented the newly found approach here: https://wiki.archlinux.org/title/HiDPI#Unsupported_applications,_via_Weston

VasyaNovikov
  • 3,656
0

For scaling a specific application window without the overhead of xpra and loss of GPU acceleration, you can use gamescope.

L29Ah
  • 238
  • 2
  • 10