While using Xorg X11, on KDE/Gnome/XFCE how can we scale the display/resolution for the whole desktop and/or per application? (when this is not available on the settings GUI)
The purpose is to keep the screen resolution unchanged (at max) while scaling the size (bigger/smaller) of the desktop/applications.
Best Answer
Linux display
This is detailed in depth on how does Linux's display works? QA.
On most desktops system (like KDE or Gnome) there are settings available on their respective settings panel, this guide is for additional/manual settings that can be applied to scale an application or the whole desktop. This reference article have many valuable informations for the matter.
Scaling applications
Scaling application can be done mainly via DPI, specific environment variable (explained bellow), application own setting or some specific desktop setting (out of scope of this QA).
Qt applications can be scaled with the following environment variables, note that many applications are hard-coding sizing and font and thus the result on such app may not be as expected.
Gnome/GTK applications can be scaled with the following environment variables
Gnome/GTK can as well be scaled globally with this Gnome setting
Chromium, can be scaled with the following command
Xpra (python) can be used along with Run scaled to achieve a per app scaling.
Environment variables modification can be placed in
~/.profile
for a global and automatic appliance after login.Scaling the desktop with Xorg X11
Xorg's extension RandR have a scaling feature and can be configured with
xrandr
. This can be used to scale the desktop to display a bigger environment, this can be useful for HiDPI (High Dots Per Inch) displays.RandR can also be used the other way around, example making a screen with 1366x768 max resolution support a greater resolution like 1920x1080. This is achieved by simulating the new greater resolution while rendering it for the supported max resolution, similar to when we watch a Full-HD video on a screen that is not Full-HD.
Scaling the desktop without changing the resolution
Getting the screen name:
Reduce the screen size by 20% (zoom-in)
Increase the screen size by 20% (zoom-out)
Reset
xrandr
changesScaling the desktop and simulate/render a new resolution
When using
xrandr
to "zoom-in" with the previous method, the desktop remain full screen but when we "zoom-out" with for instancexrandr --output screen-name --scale 1.2x1.2
(to get an unsupported resolution) the desktop is not displayed in full screen because this require updating the resolution (to probably a higher unsupported resolution by the screen), we can use a combinaison of--mode
,--panning
and--scale
, xrandr's parameters to achieve a full screen "zoom-out" scaling (simulate a new resolution), example:Get the current setup
Configuration example
The idea here is to increase the screen resolution virtually (because we are limited to 1366x768 physically) the command would be (replace
screen-name
):Reset the changes with
Making xrandr changes persistant
There is a multitude of methods to make
xrandr
changes persistant, this and this QA have many examples.Experiments notes
As a side note and experiments result while using SDDM + KDE, and after many tests to achieve a persistant config, I ended up loading a script with
~/.config/autostart
(systemsettings5
> Startup... > Autostart), and naming my script00-scriptname
to make it run first.References
Some KDE's gui tools:
systemsettings5
> display,kcmshell5 xserver
andkinfocenter
.Links and sources: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 and 12.