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.
Desktop environments
GNOME
To enable HiDPI, navigate to Settings > Devices > Displays > Scale and choose an appropriate value. Or, use gsettings:
$ gsettings set org.gnome.settings-daemon.plugins.xsettings overrides "[{'Gdk/WindowScalingFactor', <2>}]" $ gsettings set org.gnome.desktop.interface scaling-factor 2
Fractional scaling
A setting of 2, 3, etc
, which is all you can do with scaling-factor
, may not be ideal for certain HiDPI displays and smaller screens (e.g. small tablets). Fractional scaling is possible on both Wayland and Xorg, though the process differs.
Wayland
Enable the experimental fractional scaling feature:
$ gsettings set org.gnome.mutter experimental-features "['scale-monitor-framebuffer']"
then open Settings > Devices > Displays (the new options may only appear after a restart).
To enable the option for all users, create the following three files with the corresponding content
/etc/dconf/profile/user
user-db:user system-db:local
/etc/dconf/db/local.d/00-hidpi
[org/gnome/mutter] experimental-features=['scale-monitor-framebuffer']
/etc/dconf/db/locks/hidpi
/org/gnome/mutter/experimental-features
Then run dconf update
and restart the machine. This will permanently lock the option.
Xorg
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
--panning
option as explained in #Side display.To ensure that the settings persist across reboots, you may choose to use autorandr. Refer to this StackOverflow for more information.
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 gsettings, just make sure to read previous setting first and merge it. In just simply set it with this command:
gsettings set org.gnome.settings-daemon.plugins.xsettings overrides "{'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.
Text Scaling
Alternatively, or in addition to changing the display scaling, you can separately scale text. This can be done by navigating to Fonts > Scaling Factor in Gnome Tweaks, or using gsettings. Note that the text scaling factor need not be limited to whole integers, for example:
$ gsettings set org.gnome.desktop.interface text-scaling-factor 1.5
GTK+ vs Gnome Shell elements on Xorg
Adjusting the text scaling as per the above only affects GTK+ elements of the GNOME desktop. This should cover everything on Wayland. However, those on an Xorg session may find that they need to make further adjustments on HiDPI environments, since the GNOME Shell UI (including the top bar, dock, application menus, etc.) relies separately on the St[dead link 2021-11-11 ⓘ] toolkit. Note that this is a long-standing issue to which a patch has been merged and available for Gnome Shell 3.35 onward. For older releases, Xorg users can resolve most of the Gnome shell scaling problems by manually editing the shell theme that they are currently using. The relevant CSS files are normally located at /usr/share/themes/YOUR-THEME/gnome-shell/gnome-shell.css
. Users should increase all "font-size" elements in this file in proportion to their display scaling (doubling font sizes for 200% scaling, etc.) For example, the top of an edited CSS file for the Adapta shell theme might look like:
usr/share/themes/Adapta/gnome-shell/gnome-shell.css
stage { font-size: 20pt; font-family: Roboto, Noto Sans, Sans-Serif; color: #263238; }
Once these changes have been saved, activate them by switching to another theme (for example, using gnome-tweaks) and then reverting back again. The top bar, application menus, calendar, and other shell elements should now be correctly scaled.
In addition to editing the relevant shell theme's CSS file, users on Xorg may also wish to increase the title bar font at the top of open applications. This can be done through the dconf editor (org > gnome > desktop > wm > preferences :: titlebar-font
). Note that the title-bar-uses-system-fonts
option should also be turned off. Alternatively, use gsettings:
$ gsettings set org.gnome.desktop.wm.preferences titlebar-font 'Cantarell Bold 22' ## Change as needed $ gsettings set org.gnome.desktop.wm.preferences titlebar-uses-system-font false
KDE Plasma
You can use Plasma'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:
- System Settings > Display and Monitor > Display Configuration > Global Scale
- Drag the slider to the desired size
- Restart for the settings to take effect
To adjust only font scaling:
- System Settings > Fonts
- 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.
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=1
.
Xfce
Xfce supports HiDPI scaling which can be enabled using the settings manager:
- Go to Settings Manager > Appearance > Settings > Window Scaling and select 2 as the scaling factor.
- Go to Settings Manager > Window Manager > Style and select
Default-xhdpi
theme.
Alternatively, it is possible to do the same from command line using xfconf-query
:
xfconf-query -c xsettings -p /Gdk/WindowScalingFactor -s 2 xfconf-query -c xfwm4 -p /general/theme -s Default-xhdpi
After either of the above changes, fonts in some GTK applications may still not be scaled; you may additionally do the following (see #GDK 3 (GTK 3)):
- Go to Settings Manager > Appearance > Fonts > Custom DPI setting and change from 96 to 192
- Set the environment variable
GDK_DPI_SCALE=0.5
(e.g. in~/.profile
) to un-scale some fonts that would be scaled twice
The steps above would set 2x scaled resolution for Xfce and other GTK 3 applications.
Scaling for Qt 5 applications should be set manually, see #Qt 5. Note that if you set a Custom DPI for fonts above, you likely need to set QT_FONT_DPI=96
to avoid double-scaling of fonts in Qt applications.
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 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 Xft.dpi
variable in Xresources:
~/.Xresources
Xft.dpi: 192 ! These might also be useful depending on your monitor and personal preference: Xft.autohint: 0 Xft.lcdfilter: lcddefault Xft.hintstyle: hintfull Xft.hinting: 1 Xft.antialias: 1 Xft.rgba: rgb
For Xft.dpi
, using integer multiples of 96 usually works best, e.g. 192 for 200% scaling.
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.
X Server
Some programs may still interpret the DPI given by the X server (most interpret X Resources, though, directly or indirectly). Older versions of i3 (before 2017) and Chromium (before 2017) used to do this.
To verify that the X Server has properly detected the physical dimensions of your monitor, use the xdpyinfo utility from the 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.
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 or Qt developer documentation.
- 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, butQT_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"
An alternative is e.g.:
QT_FONT_DPI=96 clementine
GDK 3 (GTK 3)
Setting the GDK scale will scale the UI, however it will not scale icons. If you are using a minimal window manager where you are setting the dpi via Xft.dpi, GDK should scale perfectly fine with it. In other cases, do the following:
To scale UI elements by an integer factor:
$ export GDK_SCALE=2
To undo scaling of text, fractional scale can be used:
$ export GDK_DPI_SCALE=0.5
GTK 2
Scaling of UI elements is not supported by the toolkit itself, however it is possible to generate a theme with elements pre-scaled for HiDPI display using themix-full-gitAUR.
Electron
Electron applications (e.g. slack-desktopAUR, signal-desktop, etc.) can be configured to use a custom scaling value by adding a --force-device-scale-factor
flag to the .desktop file. This is normally located at /usr/share/applications/
, and can normally be overridden on a per-user basis by copying it to ~/.local/share/applications
. The flag should be added to the line beginning with "Exec=". For example:
/usr/share/applications/slack.desktop
Exec=env LD_PRELOAD=/usr/lib/libcurl.so.3 /usr/bin/slack --force-device-scale-factor=1.5 %U
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/
GNUstep
GNUstep applications that use its gui (AppKit) library accept a GSScaleFactor
property in their defaults (STEP preferences). To define a scaling factor of 1.5 for all applications:
defaults write NSGlobalDomain GSScaleFactor 1.5
Note that you must also disable font hinting by setting the value of GSFontHinting
to 17, else text rendering will look broken when rendering long lines.
defaults write NSGlobalDomain GSFontHinting 17
Some automatic detection was possible back in 2011, but the code responsible for the X11 backend was commented out thereafter.
Boot managers
GRUB
Lower the framebuffer resolution
Set a lower resolution for the framebuffer as explained in GRUB/Tips and tricks#Setting the framebuffer resolution.
Change GRUB font size
Find a ttf font that you like in /usr/share/fonts/
.
Convert the font to a format that GRUB can utilize:
# grub-mkfont -s 30 -o /boot/grubfont.pf2 /usr/share/fonts/FontFamily/FontName.ttf
-s 30
parameter to modify the font sizeEdit /etc/default/grub
to set the new font as shown in GRUB/Tips and tricks#Background image and bitmap fonts:
GRUB_FONT="/boot/grubfont.pf2"
GRUB_THEME
overrides GRUB_FONT
if it is used.Finally regenerate the main configuration file.
systemd-boot
Adding the following line and running bootctl update
increases font-size in the systemd-boot menu:
/boot/loader/loader.conf
console-mode 1
Applications
If you are running a Wayland session, but application is running via Xwayland (either because it does not support Wayland natively or because it uses X11 by default), you could still get blurry fonts and interface, even if the application supports HiDPI. See this bug report. See also Wayland#Detect Xwayland applications visually.
Atom
Add --force-device-scale-factor=2
as a flag to the atom.desktop file:
/usr/share/applications/atom.desktop
Exec=/usr/bin/atom --force-device-scale-factor=2 %F
Browsers
Firefox
Firefox should use the #GDK 3 (GTK 3) settings. However, the suggested GDK_SCALE
suggestion does not consistently scale the entirety of Firefox, and does not 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. Another option, which will avoid Firefox-specific settings in many setups is to use the settings in #X Resources as Firefox should respect the Xft.dpi
value defined there.
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 does not 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. Starting from Firefox 69 the userChrome.css
and userContent.css
files are not loaded by default unless preference is set by the user. Open Firefox advanced preferences page (about:config
) and set parameter toolkit.legacyUserProfileCustomizations.stylesheets
to True
, then restart Firefox to apply the changes.
~/.mozilla/firefox/<profile>/chrome/userChrome.css
@namespace url("https://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"); /* #tabbrowser-tabs, #navigator-toolbox, menuitem, menu, ... */ * { font-size: 15px !important; } /* exception for badge on adblocker */ .toolbarbutton-badge { font-size: 8px !important; }
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. For users of Firefox version 57 and above, the ffreszoom add-on will adjust the page zoom if it detects you are using a large monitor (zoom level and threshold are configurable). Modifying the internal CSS DPI setting from an extension is currently unsupported [1].
If you use Wayland, see Firefox#Wayland for instructions to enable the optional Wayland backend on firefox. This is also appicable to thunderbird.
Chromium / Google Chrome
Chromium should use the #GDK 3 (GTK 3) settings.
To override those, use the --force-device-scale-factor
flag with a scaling value. This will scale all content and ui, including tab and font size. For example 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 ~/.config/chromium-flags.conf
:
~/.config/chromium-flags.conf
--force-device-scale-factor=2
To make this work for Chrome, add the same option to ~/.config/chrome-flags.conf
instead.
If you use a HiDPI monitor such as Retina display together with another monitor, you can use the reszoom extension in order to automatically adjust the zoom level for the active screen.
If using Wayland session, you should enable native wayland support to avoid blurriness. See also Chromium#Incorrect HiDPI rendering.
Opera
Opera should use the #GDK 3 (GTK 3) settings.
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.)
Gimp 2.10
To fix toolbar icon sizes, update Preferences->Interface->Icon Theme->Custom icon size
to huge
or other value.
If menu fonts are still too small you can update an existing theme by copying it from /usr/share/gimp/2.0/themes
into ~/.config/GIMP/2.10/themes/
and changing gtk-font-name
and font_name
in gtkrc
into something bigger like Sans 30
. Then select the new theme from Preferences > Interface > Theme. When copying make sure to rename the new directory into something different from the original name (example Dark > DarkHighDPI).
You can also try using gimp-hidpi (installation instructions are outdated and refer to version 2.8, in Gimp 2.10 the theme should be installed into ~/.config/GIMP/2.10/themes/
)
Inkscape
To scale the icons to a "usable" size go to Preferences > Interface and set the icon size to Large or Larger[2][3].
Java applications
AWT/Swing
Java applications using the AWT/Swing framework can be scaled by defining the sun.java2d.uiScale
VM property when invoking java
. The value can be an integer percentage value, or a float value. For example,
java -Dsun.java2d.uiScale=2 -jar some_swing_application.jar java -Dsun.java2d.uiScale=300% -jar some_swing_application.jar
Since Java 9 the GDK_SCALE
environment variable is used to scale Swing applications accordingly.
Note that at this point, Java AWT/Swing (up to including OpenJDK 13) only effectively supports integer values. A setting of -Dsun.java2d.uiScale=250%
or GDK_SCALE=2.5
will be treated as if it were set to -Dsun.java2d.uiScale=2
resp. GDK_SCALE=2
.
JavaFX
Java applications using JavaFX can be scaled by defining the glass.gtk.uiScale
VM property when invoking java
. The value can be an integer percentage value, an integer DPI value (where 96dpi
represents a scale factor of 100%
, and for example 192dpi
represents a scale factor of 200%
), or a float value. For example,
java -Dglass.gtk.uiScale=200% -jar some_jfx_application.jar java -Dglass.gtk.uiScale=192dpi -jar some_jfx_application.jar java -Dglass.gtk.uiScale=2.0 -jar some_jfx_application.jar
JavaFX perfectly well supports fractions. Using values like -Dglass.gtk.uiScale=250%
or -Dglass.gtk.uiScale=2.5
will deliver the expected result.
Mixed AWT/Swing and JavaFX
Some Java applications mix JavaFX and AWT/Swing (via javafx.embed.swing.JFXPanel
). In that case, the settings for AWT/Swing will also affect JavaFX, and setting -Dglass.gtk.uiScale
will have no effect.
IntelliJ IDEA
IntelliJ IDEA supports two HiDPI modes (JRE-managed and IDE-managed). The sequence for determining system scale factor is well documented at [4]:
- Java property –
-Dsun.java2d.uiScale
-
gsettings(1) –
ubuntu.user-interface/scale-factor
ororg.gnome.desktop.interface/scaling-factor
-
GDK_SCALE
andGDK_DPI_SCALE
-
Xresources –
Xft.dpi
- 1.0
For troubleshooting, consult the "Show HiDPI Info" dialog via search everywhere "Shift Shift".
When using per-monitor scaling, an issue might occur where IntelliJ fails to recognize the real, original monitor resolution.
To remediate this problem some people have success by adding the -Dsun.java2d.uiScale.enabled=true
option to the idea64.vmoptions
file (Help > Edit custom VM options).
If this does not work, the experimental GTK option scale-monitor-framebuffer
might be enabled on Wayland (see above). Currently JetBrains products run on xwayland and thus have no native wayland support yet. This makes the rendering in JetBrains products incompatible with the monitor scaling framebuffer. Disabling the framebuffer thus might solve blurry font/rendering issues for JB products, but alas results in disabled fractional scaling.
LibreOffice
LibreOffice on all VCL backends take setting from there respective toolkits. There is a bug where the kf5
backend on Wayland does not scale [5]. Use the gtk3
VCL backend instead.
MATLAB
Recent versions (R2017b) of MATLAB allow to set the scale factor[6]:
>> s = settings;s.matlab.desktop.DisplayScaleFactor >> s.matlab.desktop.DisplayScaleFactor.PersonalValue = 2
The settings take effect after MATLAB is restarted.
This can become tedious if you need to change the scaling frequently. To simplify this, consider using the following script:
~/bin/matlab-scale
#!/bin/sh exec matlab -r "s = settings;s.matlab.desktop.DisplayScaleFactor.PersonalValue=$1;quit" -nodesktop -nosplash
To change the display scaling to 3:
$ matlab-scale 3
Mono applications
According to [7], Mono applications should be scalable like GTK 3 applications. The precise method depends on the GUI library: GtkSharp obviouslys points back to Gtk, while the usual Windows Forms (libgdiplus) simply detects Xft settings.
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.[8]
The editor fontsize can be controlled from Tools > Option > Fonts & Colors.
The output window fontsize can be controlled from Tools > Options > Miscelaneous > Output
OBS Studio
Start obs with the environment variable QT_AUTO_SCREEN_SCALE_FACTOR=0
to disable Qt’s hi-dpi migration mode. It is partially buggy (preview window can disappear after first start, depending on window position) and prevents OBS Studio from capturing at native resolution.
The downside of this option is that the UI elements will now be messed up. To mitigate this, install the Yami theme, which works well on hi-dpi displays:
$ wget https://github.com/obsproject/obs-studio/archive/fd256a46837033b9a4632327ece3c572bcb3b9b1.tar.gz -O /tmp/yami.tar.gz $ cd ~/.config/obs-studio $ tar xf /tmp/yami.tar.gz --strip-components=3 --wildcards '*/UI/data/themes/Yami*'
Then, open File → Settings → General → Theme and chose Yami.
Skype
Skype for Linux (skypeforlinux-stable-binAUR package) uses #GDK 3 (GTK 3).
Spotify
You can change scale factor by simple Ctrl++
for zoom in, Ctrl+-
for zoom out and Ctrl+0
for default scale. Scaling setting will be saved in ~/.config/spotify/Users/YOUR-SPOTIFY-USER-NAME/prefs
, you may have to create this file by yourself:
~/.config/spotify/Users/YOUR-SPOTIFY-USER-NAME/prefs
app.browser.zoom-level=100
Also Spotify can be launched with a custom scaling factor which will be multiplied with setting specified in ~/.config/spotify/Users/YOUR-SPOTIFY-USER-NAME/prefs
, for example
$ spotify --force-device-scale-factor=1.5
Steam
Official HiDPI support
- Starting on 25 of January 2018 in the beta program there is actual support for HiDPI and it should be automatically detected.
- Steam > Settings > Interface, check "Enlarge text and icons based on monitor size" (restart required)
- If it is not automatically detected, use
GDK_SCALE=2
to set the desired scale factor.
Unofficial
The HiDPI-Steam-Skin can be installed to increase the font size of the interface. While not perfect, it does improve usability.
skins_readme.txt
.MetroSkin Unofficial Patch also helps with HiDPI on Steam with Linux.
Sublime Text 3
Sublime Text 3 has full support for display scaling. Go to Preferences > Settings > User Settings and add "ui_scale": 2.0
to your settings.
Thunderbird
See #Firefox. To access about:config
, go to Edit > Preferences > Advanced >Config editor.
VirtualBox
VirtualBox also applies the system-wide scaling to the virtual monitor, which reduces the maximum resolution inside VMs by your scaling factor (see [9]).
This can be worked around by calculating the inverse of your scaling factor and manually setting this new scaling factor for the VirtualBox execution, e.g.
$ QT_SCALE_FACTOR=0.5 VirtualBox --startvm vm-name
Wine applications
Run
$ winecfg
and change the "dpi" setting found in the "Graphics" tab. This only affects the font size.
Zathura document viewer
No modifications required for document viewing.
UI text scaling is specified via configuration file (note that "font" is a girara option):
set font "monospace normal 20"
Zoom
Set the scaleFactor
variable in ~/.config/zoomus.conf
.
For the Flatpak version, set the environment variable QT_SCALE_FACTOR
(e.g. to 0.5 [10]). This can be easily done with Flatseal, if using a GUI tool is preferred.
Gazebo
Gazebo only renders an upper left of a view instead of the whole view. To fix this a Qt enviorment variable must be set. To run Gazebo:
$ QT_SCREEN_SCALE_FACTORS=[1.0] gazebo
To run a ROS simulation:
$ TURTLEBOT3_MODEL=burger QT_SCREEN_SCALE_FACTORS=[1.0] roslaunch turtlebot3_gazebo turtlebot3_world.launch
Making an alias such as gazebo="QT_SCREEN_SCALE_FACTORS=[1.0] gazebo" works for the first case but not for the second.
Fcitx
Fcitx preedit FontSize
can be changed in ~/.config/fcitx/conf/fcitx-classic-ui.config
.
For Fcitx5, set Font
with a size inside double quotes in ~/.config/fcitx5/conf/classicui.conf
.
Unsupported applications, via a network layer
run_scaled-gitAUR can be used to scale applications (which uses 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 (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.
Unsupported applications, via weston
There is a no-network, potentially GPU-accelerated solution to scale old/unsupported applications via weston. The basic example goes as:
weston --xwayland --socket=testscale --scale=2 DISPLAY=:1 WAYLAND_DISPLAY=testscale your_app
Note 1: You can make it look nicer. Create a dedicated weston.ini
and use it with weston --config
:
[core] idle-time=0 [shell] panel-position=none locking=false
Note 2: Adjust your DISPLAY
according to your system, :1
is simply the default that comes after the main :0
. Check files created in /tmp/.X11-unix
to do that.
Note 3: If you want a separate window per each scaled app, adjust the --socket
parameter to weston and WAYLAND_DISPLAY
+ DISPLAY
for each started app. Scripting that is not easy because Xorg display has to be a small-ish integer, but you can create a semi-safe script to infer it.
Note 4: It is not fully tested yet whether weston and xwayland truly off-board the heavy parts to the GPU. At least weston
advertises to do so, but no tests on that were done yet. Please edit if you make the GPU usage tests.
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.
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.
You may adjust the "sharpness" parameter on your monitor settings to adjust the blur level introduced with scaling.
- Above solution with
--scale 2x2
does not work on some Nvidia cards. No solution is currently available. [11] A potential workaround exists with configuringForceFullCompositionPipeline=On
on theCurrentMetaMode
vianvidia-settings
. For more info see [12]. - If you are using the
modesetting
driver you will get mouse flickering. This can be solved by scaling your non-scaled screen by 0.9999x0.9999.
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.
$ xrandr --output eDP1 --scale 0.5x0.5 --output DP2 --right-of eDP1 --output HDMI1 --right-of DP2
In addition, when you downscale the HiDPI display, the font on the HiDPI display will be slightly blurry, but it is 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:
With AxB your native HiDPI resolution (for ex 3200x1800) and CxD your external screen resolution (e.g. 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.
Tools
There are several tools which automate the commands described above.
- This script extend a non-HiDPI external display above a HiDPI internal display.
- xrandr-extend.
- xlayoutdisplayAUR is a CLI front end for xrandr which detects and sets correct DPI: README
Linux console (tty)
The Linux console changes the font to TER16x32
(based on ter-i32b
from terminus-font[13]) accordingly based on the resolution of the display. If your monitor is not recognised as HiDPI, the default font can be changed. In that case, specify fbcon=font:TER16x32
in the kernel command line. 32pixel fonts are the maximum supported by the linux terminal. Which in many cases may not be enough.
Fonts outside the kernel (tty)
The largest fonts present in the kbd package are latarcyrheb-sun32
and solar24x32
. Other packages like terminus-font contain further alternatives, such as ter-132n
(normal) and ter-132b
(bold). See Linux console#Fonts for configuration details and Linux console#Persistent configuration in particular for applying the font setting during the early userspace boot sequence.
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. Using small resolutions will make the text look bigger, but also pixelated.
Users booting though UEFI may experience the console and boot loader being constrained to a low resolution despite correct KMS settings being set. This can be caused by legacy/BIOS boot being enabled in UEFI settings. Disabling legacy boot to bypass the compatibility layer should allow the system to boot at the correct resolution.
Modern HiDPI support (kmscon)
For real HiDPI support, it's encouraged to use a modern solution like KMSCON instead of tty.