Difference between revisions of "HiDPI"

From ArchWiki
Jump to: navigation, search
(simplification and beautification of wikilinks (interactive))
(Tag: wiki-scripts)
(Added info and workaround for KDE Display Scale font bug)
Line 1: Line 1:
[[Category:Graphics]]
+
=== KDE ===
[[ja:HiDPI]]
 
{{Related articles start}}
 
{{Related|Font configuration}}
 
{{Related articles end}}
 
HiDPI (High Dots Per Inch) displays, also known by Apple's "[[wikipedia:Retina Display|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.
 
 
 
== Desktop environments ==
 
 
 
=== GNOME ===
 
 
 
To enable HiDPI, use gsettings:
 
 
 
$ gsettings set org.gnome.desktop.interface scaling-factor 2
 
 
 
{{Note|1={{ic|scaling-factor}} only allows whole numbers to be set. 1 = 100%, 2 = 200%, etc...}}
 
 
 
A setting of {{ic|2, 3, etc}}, which is all you can do with {{ic|scaling-factor}}, may not be ideal for certain HiDPI displays and smaller screens (e.g. small tablets). 
 
 
 
You can achieve any non-integer scale factor by using a combination of GNOME's {{ic|scaling-factor}} and [[xrandr]]. This combination keeps the TTF fonts properly scaled so that they do not become blurry if using {{ic|xrandr}} alone. You specify zoom-in factor with {{ic|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 {{ic|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 {{ic|--panning}} option as explained in [[#Side display]].}}
 
 
 
{{Accuracy|The following was initially added under [[#X Resources]]. Clarify how it integrates with the info there or that above for GNOME.|section=GNOME ignores X settings}}
 
 
 
GNOME ignores X settings due to its xsettings Plugin in Gnome Settings Daemon, where DPI setting is hard coded.
 
There is blog entry for [http://blog.drtebi.com/2012/12/changing-dpi-setting-on-gnome-34.html 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>
+
KDE plasma 5 provides excellent support for HiDPI screens out of the box: You can set the correct DPI by [[#Using KDE system settings]].
  
From README.xsettings
+
Alternatives are to use [[SDDM#DPI settings]] or the [[#X Server]]. However, it seems that Gtk+ applications ignore both SDDM and X settings. You can fix this by creating a custom login session as follows.
  
Noting that variants must be specified in the usual way (wrapped in <>).
+
'''Note:'''
 
+
Note also that DPI in the above example is expressed in 1024ths of an inch.
+
Playing with GDK_SCALE and GDK_DPI_SCALE values can be useful in case you want to tune GTK app scale in KDE without affecting QT app.
 
+
For example you may want to do not use the Scale value in KDE Display setting as not integer values creates issues with some QT application fonts.  
=== KDE ===
 
 
 
KDE plasma 5 provides excellent support for HiDPI screens out of the box.
 
You can set the correct DPI by [[#Using KDE system settings]]. Alternatives are to use [[SDDM#DPI settings]] or the [[#X Server]]. However, it seems that Gtk+ applications ignore both SDDM and X settings. You can fix this by creating a custom login session as follows:
 
  
 
{{Style|Comply with [[Help:Style#File editing requests]] (i.e. do not use ''sed'').}}
 
{{Style|Comply with [[Help:Style#File editing requests]] (i.e. do not use ''sed'').}}
Line 58: Line 16:
 
  # sed -i 's/Plasma/Plasma (custom)/g' /usr/share/xsessions/plasma-custom.desktop
 
  # sed -i 's/Plasma/Plasma (custom)/g' /usr/share/xsessions/plasma-custom.desktop
  
Create {{ic|/usr/bin/startkde-custom}} with the following contents:
+
Create {{ic|/usr/bin/startkde-custom}}.
 +
 
 +
Example for a generic 13" 1920x1080 (You may need to adjust these values depending on your display):
 +
 
 +
#!/bin/bash
 +
## GDK_SCALE only integer values (ex. 1 2 3 )
 +
export GDK_SCALE=1
 +
## GDK_DPI_SCALE can be non integer (ex. 1.1 1.2 )
 +
export GDK_DPI_SCALE=1.2
 +
export XCURSOR_SIZE=48
 +
/usr/bin/startkde "$@"
 +
 
 +
Example for a 15" Retina Macbook Pro (The negative dpi scale ensures that the text is sized correctly):
  
 
  #!/bin/bash
 
  #!/bin/bash
Line 65: Line 35:
 
  export XCURSOR_SIZE=48
 
  export XCURSOR_SIZE=48
 
  /usr/bin/startkde "$@"
 
  /usr/bin/startkde "$@"
 
The negative dpi scale ensures that the text is sized correctly on a 15" Retina Macbook Pro. You may need to adjust these values depending on your display.
 
  
 
Do not forget to ensure that the script can be executed ({{ic|# chmod +x /usr/bin/startkde-custom}}). Logout and choose your new custom session (you may need to restart your display manager for it to show up) and GTK+ applications should be scaled correctly.
 
Do not forget to ensure that the script can be executed ({{ic|# chmod +x /usr/bin/startkde-custom}}). Logout and choose your new custom session (you may need to restart your display manager for it to show up) and GTK+ applications should be scaled correctly.
Line 76: Line 44:
 
To adjust font, widget, and icon scaling together:
 
To adjust font, widget, and icon scaling together:
  
# System Settings →  Display and Monitor → Display Configuration →  Scale Display (note: if you set a not integer value it may create issue with the font render in some application )
+
# System Settings →  Display and Monitor → Display Configuration →  Scale Display  
 
# Drag the slider to the desired size
 
# Drag the slider to the desired size
 
# Restart for the settings to take effect
 
# Restart for the settings to take effect
Line 89: Line 57:
 
# System Settings →  Icons → Advanced
 
# System Settings →  Icons → Advanced
 
# Choose the desired icon size for each category listed. This should take effect immediately.
 
# 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 ====
 
==== Tray icons with fixed size ====
Line 111: Line 89:
 
</nowiki>'''iconSize=2'''<nowiki>
 
</nowiki>'''iconSize=2'''<nowiki>
 
</nowiki>}}
 
</nowiki>}}
 
=== 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 {{ic|<nowiki>xdpyinfo | grep resolution</nowiki>}}, 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 ([https://github.com/i3/i3/blob/next/libi3/dpi.c source]) and Chromium ([https://code.google.com/p/chromium/codesearch#chromium/src/ui/views/widget/desktop_aura/desktop_screen_x11.cc source]).
 
 
To verify that the X Server has properly detected the physical dimensions of your monitor, use the ''xdpyinfo'' utility from the {{Pkg|xorg-xdpyinfo}} package:
 
 
$ xdpyinfo | grep -B 2 resolution
 
screen #0:
 
  dimensions:    3200x1800 pixels (423x238 millimeters)
 
  resolution:    192x192 dots per inch
 
 
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.
 
 
If the DPI displayed by xdpyinfo is not correct, see [[Xorg#Display size and DPI]] for how to fix it.
 
 
== X Resources ==
 
 
If you are not using a desktop environment such as KDE, Xfce, or other that manipulates the X settings for you, you can set the desired DPI setting manually via the {{ic|Xft.dpi}} variable in [[Xresources]]:
 
 
{{hc|~/.Xresources|<nowiki>
 
Xft.dpi: 180
 
Xft.autohint: 0
 
Xft.lcdfilter:  lcddefault
 
Xft.hintstyle:  hintfull
 
Xft.hinting: 1
 
Xft.antialias: 1
 
Xft.rgba: rgb
 
</nowiki>}}
 
 
Make sure the settings are loaded properly when X starts, for instance in your {{ic|~/.xinitrc}} with {{ic|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 {{ic|Xft.dpi}} at the same time as toolkit scale (e.g. {{ic|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 {{ic|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 ({{ic|QT_SCREEN_SCALE_FACTORS}}) or globally ({{ic|QT_SCALE_FACTOR}}). For more details see the [https://blog.qt.io/blog/2016/01/26/high-dpi-support-in-qt-5-6/ Qt blog post].
 
 
{{Note|
 
* If you manually set the screen factor, it is important to set {{ic|1=QT_AUTO_SCREEN_SCALE_FACTOR=0}} otherwise some applications which explicitly force high DPI enabling get scaled twice.
 
* {{ic|QT_SCALE_FACTOR}} scales fonts, but {{ic|QT_SCREEN_SCALE_FACTORS}} does not scale fonts.
 
* If you also set the font DPI manually in ''xrdb'' to support other toolkits, {{ic|QT_SCALE_FACTORS}} will give you huge fonts.
 
}}
 
 
=== 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 {{AUR|oomox-git}}.
 
 
=== Elementary (EFL) ===
 
 
To scale UI elements by a factor of 1.5:
 
 
  export ELM_SCALE=1.5
 
 
For more details see https://phab.enlightenment.org/w/elementary/
 
 
== Boot managers ==
 
 
=== GRUB ===
 
 
Set a lower resolution for the framebuffer as explained in [[GRUB/Tips and tricks#Setting the framebuffer resolution]].
 
 
== Applications ==
 
 
=== Browsers ===
 
 
==== Firefox ====
 
 
Firefox should use the [[#GDK 3 (GTK+ 3)]] settings. However, the suggested {{ic|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 {{ic|GDK_DPI_SCALE}} instead.
 
 
To override those, open Firefox advanced preferences page ({{ic|about:config}}) and set parameter {{ic|layout.css.devPixelsPerPx}} to {{ic|2}} (or find the one that suits you better; {{ic|2}} is a good choice for Retina screens), but it also doesn't consistently scale the entirety of Firefox.
 
 
If you use a HiDPI monitor such as Retina display together with another monitor, you can use [https://addons.mozilla.org/en-US/firefox/addon/autohidpi/ AutoHiDPI]add-on in order to automatically adjust {{ic|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.
 
 
==== Chromium / Google Chrome ====
 
 
Chromium should use the [[#GDK 3 (GTK+ 3)]] settings.
 
 
To override those, use the {{ic|1=--force-device-scale-factor}} flag with a scaling value. This will scale all content and ui, including tab and font size. For example {{ic|1=chromium --force-device-scale-factor=2}}.
 
 
Using this option, a scaling factor of 1 would be normal scaling. Floating point values can be used. To make the change permanent, for Chromium, you can add it to {{ic|~/.config/chromium-flags.conf}}:
 
 
{{hc|~/.config/chromium-flags.conf|2=--force-device-scale-factor=2}}
 
 
If you use a HiDPI monitor such as Retina display together with another monitor, you can use the [https://chrome.google.com/webstore/detail/resolution-zoom/enjjhajnmggdgofagbokhmifgnaophmh reszoom] extension in order to automatically adjust the zoom level for the active screen.
 
 
==== Opera ====
 
 
Opera should use the [[#GDK 3 (GTK+ 3)]] settings.
 
 
To override those, use the {{ic|1=--alt-high-dpi-setting=X}} command line option, where X is the desired DPI. For example, with {{ic|1=--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.)
 
 
=== Thunderbird ===
 
 
See [[#Firefox]]. To access {{ic|about:config}}, go to Edit → Preferences → Advanced → Config editor.
 
 
=== Wine applications ===
 
 
Run
 
$ winecfg
 
and change the "dpi" setting found in the "Graphics" tab. This only affects the font size.
 
 
=== Skype ===
 
 
The new Skype for Linux with the {{AUR|skypeforlinux-bin}} package uses [[#GTK+ 2]].
 
 
The old legacy Skype ({{AUR|skype}}{{Broken package link|package not found}}) uses Qt 4, and needs to be configured separately. You cannot change the DPI setting for it, but at least you can change font size. Install {{Pkg|qt4}} and run {{ic|qtconfig-qt4}} to do it.
 
 
=== Spotify ===
 
 
Spotify can be launched with a custom scaling factor, for example
 
$ spotify --force-device-scale-factor=1.5
 
 
=== Zathura document viewer ===
 
 
No modifications required for document viewing.
 
 
UI text scaling is specified via [https://pwmt.org/projects/zathura/documentation/ configuration file] (note that "font" is a [https://pwmt.org/projects/girara/options/ girara option]):
 
 
set font "monospace normal 20"
 
 
=== Sublime Text 3 ===
 
Sublime Text 3 has full support for display scaling. Go to Preferences > Settings > User Settings and add {{ic|"dpi_scale": 2.0}} to your settings [http://blog.wxm.be/2014/08/30/sublime-text-3-and-high-dpi-on-linux.html (source)].
 
 
=== IntelliJ IDEA ===
 
 
IntelliJ IDEA 15 and above should include HiDPI support.[http://blog.jetbrains.com/idea/2015/07/intellij-idea-15-eap-comes-with-true-hidpi-support-for-windows-and-linux/] 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 {{ic|1=-Dhidpi=true}} to the vmoptions file in either {{ic|$HOME/.IdeaC14/}} or {{ic|/usr/share/intelligj-idea-ultimate-edition/bin/}} of [https://youtrack.jetbrains.com/issue/IDEA-114944 release 14] should not be required anymore.
 
 
=== NetBeans ===
 
 
NetBeans allows the font size of its interface to be controlled using the {{ic|1=--fontsize}} parameter during startup. To make this change permanent edit the {{ic|1=/usr/share/netbeans/etc/netbeans.conf}} file and append the {{ic|1=--fontsize}} parameter to the {{ic|1=netbeans_default_options}} property.[http://wiki.netbeans.org/FaqFontSize]
 
 
The editor fontsize can be controlled from Tools → Option → Fonts & Colors.
 
 
The output window fontsize can be controlled from Tools → Options → Miscelaneous → Output
 
 
=== Gimp 2.8 ===
 
 
Use a high DPI theme, or adjust {{ic|1=gtkrc}} of an existing theme. (Change all occurrences of the size {{ic|1=button}} to {{ic|1=dialog}}, for example {{ic|1=GimpToolPalette::tool-icon-size}}.)
 
 
There is also the [https://github.com/jedireza/gimp-hidpi gimp-hidpi].
 
 
=== Steam ===
 
 
The [https://github.com/MoriTanosuke/HiDPI-Steam-Skin HiDPI-Steam-Skin] can be installed to increase the font size of the interface. While not perfect, it does improve usability.
 
 
{{Note|The README for the HiDPI skin lists several possible locations for where to place the skin. The correct folder out of these can be identified by the presence of a file named {{ic|1=skins_readme.txt}}.}}
 
 
[http://steamcommunity.com/groups/metroskin/discussions/0/517142253861033946/ MetroSkin Unofficial Patch] also helps with HiDPI on Steam with Linux.
 
 
=== Java applications ===
 
 
Java applications using the AWT/Swing framework can be scaled by defining the sun.java2d.uiScale variable when invoking java. For example,
 
 
java -Dsun.java2d.uiScale=2 -jar some_application.jar
 
 
=== Mono applications ===
 
 
According to [https://bugzilla.xamarin.com/show_bug.cgi?id=35870], Mono applications should be scalable like [[#GDK 3 (GTK+ 3)|GTK3]] applications.
 
 
=== MATLAB ===
 
 
Recent versions (R2017b) of [[Matlab]] allow to set the scale factor:
 
>> s = settings;s.matlab.desktop.DisplayScaleFactor
 
>> s.matlab.desktop.DisplayScaleFactor.PersonalValue = 2
 
The settings take effect after MATLAB is restarted.
 
 
=== Unsupported applications ===
 
 
{{AUR|run_scaled-git}} can be used to scale applications (which uses {{AUR|xpra}} internally).
 
 
Another approach is to run the application full screen and without decoration in its own VNC desktop. Then scale the viewer. With Vncdesk ({{AUR|vncdesk-git}} from the [[AUR]]) you can set up a desktop per application, then start server and client with a simple command such as {{ic|vncdesk 2}}.
 
 
[[x11vnc]] has an experimental option {{ic|-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.
 
 
=== Side display ===
 
One workaround is to use [[xrandr]]'s scale option. To have a non-HiDPI monitor (on DP1) right of an internal HiDPI display (eDP1), one could run:
 
 
xrandr --output eDP-1 --auto --output DP-1 --auto --scale 2x2 --right-of eDP-1
 
 
When extending above the internal display, you may see part of the internal display on the external monitor. In that case, specify the position manually, e.g. using [https://gist.github.com/wvengen/178642bbc8236c1bdb67 this script].
 
 
You may run into problems with your mouse not being able to reach the whole screen. That is a [https://bugs.freedesktop.org/show_bug.cgi?id=39949 known bug] with an xserver-org patch (or try the panning option, but that might cause other problems).
 
 
An example of the panning syntax for a 4k laptop with an external 1920x1080 monitor to the right:
 
 
xrandr --output eDP-1 --auto --output HDMI-1 --auto --panning 3840x2160+3840+0 --scale 2x2 --right-of eDP-1
 
 
Generically if your HiDPI monitor is AxB pixels and your regular monitor is CxD and you are scaling by [ExF], the commandline for right-of is:
 
 
xrandr --output eDP-1 --auto --output HDMI-1 --auto --panning [C*E]x[D*F]+[A]+0 --scale [E]x[F] --right-of eDP-1
 
 
If panning is not a solution for you it may be better to set position of monitors and fix manually the total display screen.
 
 
An example of the syntax for a 2560x1440 WQHD 210 DPI laptop monitor (eDP1) using native resolution placed below a 1920x1080 FHD 96 DPI external monitor (HDMI) scaled to match global DPI settings:
 
 
xrandr --output eDP-1 --auto --pos 0x1458 --output HDMI-1 --scale 1.35x1.35 --auto --pos 0x0 --fb 2592x2898
 
 
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:
 
 
xrandr --output eDP-1 --auto --pos 0x(DxF) --output HDMI-1 --auto --scale [E]x[F] --pos 0x0 --fb [greater between A and (C*E)]x[B+(D*F)]
 
 
You may adjust the "sharpness" parameter on your monitor settings to adjust the blur level introduced with scaling.
 
 
{{Note|1=Above solution with {{ic|--scale 2x2}} does not work on some Nvidia cards. No solution is currently available. [https://bbs.archlinux.org/viewtopic.php?pid=1670840] A potential workaround exists with configuring {{ic|1=ForceFullCompositionPipeline=On}} on the {{ic|CurrentMetaMode}} via {{ic|nvidia-settings}}. For more info see [https://askubuntu.com/a/979551/763549].}}
 
 
=== Mirroring ===
 
 
If all you want is to mirror ("unify") displays, this is easy as well:
 
 
With AxB your native HiDPI resolution (for ex 3200x1800) and CxD your external screen resolution (for ex 1920x1200)
 
 
xrandr --output HDMI --scale [A/C]x[B/D]
 
 
In this example which is QHD (3200/1920 = 1.66 and 1800/1200 = 1.5)
 
 
xrandr --output HDMI --scale 1.66x1.5
 
 
For UHD to 1080p (3840/1920=2 2160/1080=2)
 
 
xrandr --output HDMI --scale 2x2
 
 
You may adjust the "sharpness" parameter on your monitor settings to adjust the blur level introduced with scaling.
 
 
== Linux console ==
 
 
The default [[w:Linux console|Linux console]] font will be very small on hidpi displays, the largest font present in the {{Pkg|kbd}} package is {{ic|latarcyrheb-sun32}} and other packages like {{Pkg|terminus-font}} contain further alternatives, such as {{ic|ter-132n}}(normal) and {{ic|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 ({{ic|tty2-6}}). To fix this you can [[Kernel_mode_setting#Forcing_modes_and_EDID|force specific mode]] for KMS, such as {{ic|1=video=2560x1600@60}} (substitute in the native resolution of your HiDPI display), and reboot.
 
 
== See also ==
 
 
* [http://www.phoronix.com/scan.php?page=article&item=linux_uhd4k_gpus Ultra HD 4K Linux Graphics Card Testing] (Nov 2013)
 
* [http://www.eizo.com/library/basics/pixel_density_4k/ Understanding pixel density]
 

Revision as of 07:35, 7 December 2017

KDE

KDE plasma 5 provides excellent support for HiDPI screens out of the box: You can set the correct DPI by #Using KDE system settings.

Alternatives are to use SDDM#DPI settings or the #X Server. However, it seems that Gtk+ applications ignore both SDDM and X settings. You can fix this by creating a custom login session as follows.

Note:

Playing with GDK_SCALE and GDK_DPI_SCALE values can be useful in case you want to tune GTK app scale in KDE without affecting QT app. For example you may want to do not use the Scale value in KDE Display setting as not integer values creates issues with some QT application fonts.

Tango-edit-clear.pngThis article or section needs language, wiki syntax or style improvements. See Help:Style for reference.Tango-edit-clear.png

Reason: Comply with Help:Style#File editing requests (i.e. do not use sed). (Discuss in Talk:HiDPI#)
# cp /usr/share/xsessions/plasma.desktop /usr/share/xsessions/plasma-custom.desktop
# sed -i 's/\/usr\/bin\/startkde/\/usr\/bin\/startkde-custom/g' /usr/share/xsessions/plasma-custom.desktop
# sed -i 's/Plasma/Plasma (custom)/g' /usr/share/xsessions/plasma-custom.desktop

Create /usr/bin/startkde-custom.

Example for a generic 13" 1920x1080 (You may need to adjust these values depending on your display):

#!/bin/bash
## GDK_SCALE only integer values (ex. 1 2 3 )
export GDK_SCALE=1 
## GDK_DPI_SCALE can be non integer (ex. 1.1 1.2 )
export GDK_DPI_SCALE=1.2
export XCURSOR_SIZE=48
/usr/bin/startkde "$@"

Example for a 15" Retina Macbook Pro (The negative dpi scale ensures that the text is sized correctly):

#!/bin/bash
export GDK_SCALE=2
export GDK_DPI_SCALE=-1
export XCURSOR_SIZE=48
/usr/bin/startkde "$@"

Do not forget to ensure that the script can be executed (# chmod +x /usr/bin/startkde-custom). Logout and choose your new custom session (you may need to restart your display manager for it to show up) and GTK+ applications should be scaled correctly.

Using KDE system settings

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

To adjust font, widget, and icon scaling together:

  1. System Settings → Display and Monitor → Display Configuration → Scale Display
  2. Drag the slider to the desired size
  3. Restart for the settings to take effect

To adjust only font scaling:

  1. System Settings → Fonts
  2. 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:

  1. System Settings → Icons → Advanced
  2. 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:

  1. Set the scale value to 1
  2. Adjust your font and icons and use the "Force fonts DPI" ( this affects all apps, also GTK but not create issue with the fonts )
  3. Restart KDE
  4. If required tune the GTK apps using the variables GDK_SCALE/GDK_DPI_SCALE (as described above)

Tray icons with fixed size

If the tray icons are not scaled with the rest of the desktop, the size can be set in the Plasma configuration. System-wide configuration is located in the file /usr/share/plasma/plasmoids/org.kde.plasma.private.systemtray/contents/config/main.xml, where the dimension of icons can be controlled by editing the default value for iconSize (a value of 2 should be fine):

/usr/share/plasma/plasmoids/org.kde.plasma.private.systemtray/contents/config/main.xml
<entry name="iconSize" type="Int">
    <label>Default icon size for the systray icons, it's an enum which values mean, 
           Small, SmallMedium, Medium, Large, Huge, Enormous respectively. On low 
           DPI systems they correspond to 16, 22, 32, 48, 64, 128 pixels. On high
           DPI systems those values would be scaled up, depending on the DPI.</label>                    
    <default>2</default>
</entry>

User configuration is located in the file ~/.config/plasma-org.kde.plasma.desktop-appletsrc. The section containing the settings for the tray bar should look similar to this; if the iconSize field is not present, add it.

~/.config/plasma-org.kde.plasma.desktop-appletsrc
[Containments][47][General]
extraItems=org.kde.plasma.mediacontroller,org.kde.plasma.battery,org.kde.plasma.printmanager,org.kde.plasma.bluetooth,org.kde.plasma.clipboard,org.kde.plasma.notifications,org.kde.plasma.networkmanagement,org.kde.plasma.devicenotifier
hiddenItems=org.kde.ktp-contactlist,org.kde.plasma.battery
knownItems=org.kde.plasma.mediacontroller,org.kde.plasma.battery,org.kde.plasma.printmanager,org.kde.plasma.bluetooth,org.kde.plasma.clipboard,org.kde.plasma.notifications,org.kde.plasma.networkmanagement,org.kde.plasma.devicenotifier
shownItems=org.kde.plasma.notifications,org.kde.plasma.clipboard
iconSize=2