HiDPI

HiDPI (High Dots Per Inch) displays, also known by Apple's "Retina Display" marketing name, are screens with a high resolution in a relatively small format. They are mostly found in high-end laptops and monitors.

Not all software behaves well in high-resolution mode yet. Here are listed most common tweaks which make work on a HiDPI screen more pleasant.

You can achieve any non-integer scale factor by using a combination of GNOME's scaling-factor and xrandr. This combination keeps the TTF fonts properly scaled so that they do not become blurry if using xrandr alone. You specify zoom-in factor with gsettings and zoom-out factor with xrandr.

First scale GNOME up to the minimum size which is too big. Usually "2" is already too big, otherwise try "3" etc. Then start scaling down by setting zoom-out factor with xrandr. First get the relevant output name, the examples below use eDP1. Start e.g. with zoom-out 1.25 times. If the UI is still too big, increase the scale factor; if it is too small decrease the scale factor.

$ xrandr --output eDP1 --scale 1.25x1.25

Note: To allow the mouse to reach the whole screen, you may need to use the --panning option as explained in #Side display.

GNOME ignores X settings due to its xsettings Plugin in Gnome Settings Daemon, where DPI setting is hard coded.
There is blog entry for recompiling Gnome Settings Daemon.
In the source documentation there is another way mentioned to set X settings DPI:

You can use the dconf Editor and navigate to key

/org/gnome/settings-daemon/plugins/xsettings/overrides

and complement the entry with the value

'Xft/DPI': <153600>

From README.xsettings

Noting that variants must be specified in the usual way (wrapped in <>).

Note also that DPI in the above example is expressed in 1024ths of an inch.

KDE

You can use KDE's settings to fine tune font, icon, and widget scaling. This solution affects both Qt and Gtk+ applications.

Check "Force fonts DPI" and adjust the DPI level to the desired value. This setting should take effect immediately for newly started applications. You will have to logout and login for it to take effect on Plasma desktop.

To adjust only icon scaling:

System Settings → Icons → Advanced

Choose the desired icon size for each category listed. This should take effect immediately.

Display Scale not integer bug :

When you use not integer values for Display Scale it causes font render issue in some QT application ( ex. okular ).

A workaround for this is to:

Set the scale value to 1

Adjust your font and icons and use the "Force fonts DPI" ( this affects all apps, also GTK but not create issue with the fonts )

Restart KDE

If required tune the GTK apps using the variables GDK_SCALE/GDK_DPI_SCALE (as described above)

Tray icons with fixed size

The tray icons are not scaled with the rest of the desktop, since Plasma ignores the Qt scaling settings by default. To make Plasma respect the Qt settings, set PLASMA_USE_QT_SCALING to 1.

Xfce

Go to Settings Manager → Appearance → Fonts, and change the DPI parameter. The value of 180 or 192 seems to work well on Retina screens. To get a more precise number, you can use xdpyinfo | grep resolution, and then double it.

To enlarge icons in system tray, right-click on it (aim for empty space / top pixels / bottom pixels, so that you will not activate icons themselves) → “Properties” → set “Maximum icon size” to 32, 48 or 64.

Cinnamon

Has good support out of the box.

Enlightenment

For E18, go to the E Setting panel. In Look → Scaling, you can control the UI scaling ratios. A ratio of 1.2 seems to work well for the native resolution of the MBPr 15" screen.

X Server

Some programs use the DPI given by the X server. Examples are i3 (source) and Chromium (source).

To verify that the X Server has properly detected the physical dimensions of your monitor, use the xdpyinfo utility from the xorg-xdpyinfo package:

This example uses inaccurate dimensions (423mm x 328mm, even though the Dell XPS 9530 has 346mm x 194mm) to have a clean multiple of 96 dpi, in this case 192 dpi. This tends to work better than using the correct DPI — Pango renders fonts crisper in i3 for example.

Make sure the settings are loaded properly when X starts, for instance in your ~/.xinitrc with xrdb -merge ~/.Xresources (see Xresources for more information).

This will make the font render properly in most toolkits and applications, it will however not affect things such as icon size!
Setting Xft.dpi at the same time as toolkit scale (e.g. GDK_SCALE) may cause interface elements to be much larger than intended in some programs like firefox.

GUI toolkits

Qt 5

Since Qt 5.6, Qt 5 applications can be instructed to honor screen DPI by setting the QT_AUTO_SCREEN_SCALE_FACTOR environment variable:

export QT_AUTO_SCREEN_SCALE_FACTOR=1

If automatic detection of DPI does not produce the desired effect, scaling can be set manually per-screen (QT_SCREEN_SCALE_FACTORS) or globally (QT_SCALE_FACTOR). For more details see the Qt blog post.

Note:

If you manually set the screen factor, it is important to set QT_AUTO_SCREEN_SCALE_FACTOR=0 otherwise some applications which explicitly force high DPI enabling get scaled twice.

QT_SCALE_FACTOR scales fonts, but QT_SCREEN_SCALE_FACTORS does not scale fonts.

If you also set the font DPI manually in xrdb to support other toolkits, QT_SCALE_FACTORS will give you huge fonts.

If you have multiple screens of differing DPI ie: #Side display you may need to do QT_SCREEN_SCALE_FACTORS="2;2"

GDK 3 (GTK+ 3)

To scale UI elements by a factor of two:

export GDK_SCALE=2

To undo scaling of text:

export GDK_DPI_SCALE=0.5

GTK+ 2

Scaling of UI elements is not supported by the toolkit itself, however it's possible to generate a theme with elements pre-scaled for HiDPI display using oomox-gitAUR.

Applications

Browsers

Firefox

Firefox should use the #GDK 3 (GTK+ 3) settings. However, the suggested GDK_SCALE suggestion doesn't consistently scale the entirety of Firefox, and doesn't work for fractional values (e.g., a factor of 158DPI/96DPI = 1.65 for a 1080p 14" laptop). You may want to use GDK_DPI_SCALE instead.

To override those, open Firefox advanced preferences page (about:config) and set parameter layout.css.devPixelsPerPx to 2 (or find the one that suits you better; 2 is a good choice for Retina screens), but it also doesn't consistently scale the entirety of Firefox. If Firefox is not scaling fonts, you may want to create userChrome.css and add appropriate styles to it. More information about userChrome.css at mozillaZine.

Warning: The following extension is not compatible with Firefox Quantum (version 57 and above).

If you use a HiDPI monitor such as Retina display together with another monitor, you can use AutoHiDPI add-on in order to automatically adjust layout.css.devPixelsPerPx setting for the active screen. Also, since Firefox version 49, it auto-scales based on your screen resolution, making it easier to deal with 2 or more screens.

Opera

To override those, use the --alt-high-dpi-setting=X command line option, where X is the desired DPI. For example, with --alt-high-dpi-setting=144 Opera will assume that DPI is 144. Newer versions of opera will auto detect the DPI using the font DPI setting (in KDE: the force font DPI setting.)

Sublime Text 3

IntelliJ IDEA

IntelliJ IDEA 15 and above should include HiDPI support.[1] If it does not work, the most convenient way to fix the problem in this case seems to be changing the Override Default Fonts setting:

File -> Settings -> Behaviour & Appearance -> Appearance

The addition of -Dhidpi=true to the vmoptions file in either $HOME/.IdeaC14/ or /usr/share/intelligj-idea-ultimate-edition/bin/ of release 14 should not be required anymore.

NetBeans

NetBeans allows the font size of its interface to be controlled using the --fontsize parameter during startup. To make this change permanent edit the /usr/share/netbeans/etc/netbeans.conf file and append the --fontsize parameter to the netbeans_default_options property.[2]

Unsupported applications

Another approach is to run the application full screen and without decoration in its own VNC desktop. Then scale the viewer. With Vncdesk (vncdesk-gitAUR from the AUR) you can set up a desktop per application, then start server and client with a simple command such as vncdesk 2.

x11vnc has an experimental option -appshare, which opens one viewer per application window. Perhaps something could be hacked up with that.

Multiple displays

The HiDPI setting applies to the whole desktop, so non-HiDPI external displays show everything too large. However, note that setting different scaling factors for different monitors is already supported in Wayland.

The total screen size (--fb) and positioning (--pos) are to be calculated taking into account the scaling factor.

In this case laptop monitor (eDP1) has no scaling and uses native mode for resolution so it will total 2560x1440, but external monitor (HDMI) is scaled and it has to be considered a larger screen so (1920*1.35)x(1080*1.35) from where the eDP1 Y position came 1080*1.35=1458 and the total screen size: since one on top of the other X=(greater between eDP1 and HDMI, so 1920*1.35=2592) and Y=(sum of the calculated heights of eDP1 and HDMI, so 1440+(1080*1.35)=2898).

Generically if your hidpi monitor is AxB pixels and your regular monitor is CxD and you are scaling by [ExF] and hidpi is placed below regular one, the commandline for right-of is:

You may adjust the "sharpness" parameter on your monitor settings to adjust the blur level introduced with scaling.

Note: Above solution with --scale 2x2 does not work on some Nvidia cards. No solution is currently available. [5] A potential workaround exists with configuring ForceFullCompositionPipeline=On on the CurrentMetaMode via nvidia-settings. For more info see [6].

Multiple external monitors

There might be some problems in scaling more than one external monitors which have lower dpi than the built-in HiDPI display. In that case, you may want to try downscaling the HiDPI display instead, with e.g.

In addition, when you downscale the HiDPI display, the font on the HiDPI display will be slightly blurry, but it's a different kind of bluriness compared with the one introduced by upscaling the external displays. You may compare and see which kind of bluriness is less problematic for you.

Mirroring

If all you want is to mirror ("unify") displays, this is easy as well:

You may adjust the "sharpness" parameter on your monitor settings to adjust the blur level introduced with scaling.

Linux console

The default Linux console font will be very small on hidpi displays, the largest font present in the kbd package is latarcyrheb-sun32 and other packages like terminus-font contain further alternatives, such as ter-132n(normal) and ter-132b(bold). See Fonts#Console fonts for configuration details.

After changing the font, it is often garbled and unreadable when changing to other virtual consoles (tty2-6). To fix this you can force specific mode for KMS, such as video=2560x1600@60 (substitute in the native resolution of your HiDPI display), and reboot.