HiDPI
HiDPI(高 DPI,每英寸点数)显示器,也被苹果称为“Retina 显示屏”营销名称,是指在相对较小的尺寸下具有高分辨率的屏幕。它们主要出现在高端笔记本电脑和显示器中。
并非所有软件都能很好地在高分辨率模式下运行。此处列出了最常见的调整方法,可以使 HiDPI 屏幕上的工作更加愉快。
背景
该领域的术语可能会引起误解。在 HiDPI 之前,术语是
- 每英寸点数(DPI)—指定打印纸张时墨滴的输出密度。[1] 更高的每英寸点数对应更密集的输出。
- 像素密度,*每英寸像素数*(PPI)—指定数字图像的输入密度。[2] 计算公式为 `(图像中的像素数) / (照片的物理尺寸)`。
每个显示器都有一个固有的 PPI,即屏幕原生分辨率与物理屏幕尺寸的比例。[3] 尽管一些技术来源使用“PPI”一词,[4] 但更常见的是(不准确地)将此比例称为 DPI。96 DPI 的屏幕被认为对大多数人来说阅读 ~12pt 字体是舒适的,并且大多数“低 DPI”显示器都属于此范围。HiDPI 屏幕的 DPI 大约为 192 或更高,有些屏幕介于两者之间(“中等 PPI”)。
当 DPI 不敏感的系统(假设 DPI 约为 96)使用 HiDPI 屏幕时,小字体将难以阅读。由于字体渲染相对容易调整,即使是“DPI 不敏感”的系统(例如 #Wine 应用程序)也经常提供一个调整字体 DPI 的旋钮。每当 DPI 设置以数字(而不是乘数或百分比)形式公开时,它很可能指的是文本渲染本身。
大多数现代 GUI 工具包都能进行“整数缩放”,至少将 UI 渲染为 2 倍大小。这是通过应用不同的字体 DPI 并提供 HiDPI 版本的资源来实现的。一些工具包还支持分数缩放,GTK 的#分数缩放使用应用任意字体 DPI 和缩小图形资源相结合的方式。
在一个使用了 UI 缩放的桌面上,缺乏分辨率独立性的应用程序(例如 #Xwayland)可能会以 1 倍比例渲染,然后由显示服务器进行放大。
桌面环境
GNOME
要启用 HiDPI,请导航至*设置 > 设备 > 显示 > 缩放*并选择合适的值。或者,使用 gsettings
$ gsettings set org.gnome.settings-daemon.plugins.xsettings overrides "[{'Gdk/WindowScalingFactor', <2>}]"
$ gsettings set org.gnome.desktop.interface scaling-factor 2
分数缩放
设置为 `2`、`3` 等(这是 `scaling-factor` 唯一能做的)可能不适合某些 HiDPI 显示器和小屏幕(例如小型平板电脑)。分数缩放在 Wayland 和 Xorg 上都可能实现,尽管过程不同。
实现主要在 GNOME 分数缩放黑客节 2017 中讨论和决定,有关更多技术细节,请查看 [5]。
目前,GTK 只支持字体的分数缩放。另一方面,小部件,如按钮或标签,可能只使用整数(DPI)缩放。因此,大多数原生 GNOME 应用程序的分数缩放需要先以更高的分辨率渲染,然后缩小到所需分辨率。GTK 在 Wayland 和 Xorg 会话中都利用了这种技术。
对于某些设置运行 GTK 3 应用程序,这可能会增加 CPU 和 GPU 使用率以及功耗,导致响应速度变慢——尤其是在 Xorg 中。如果这些问题在您的用例中非常严重,请考虑使用其他桌面环境或禁用分数缩放。
Wayland
启用实验性分数缩放功能
$ gsettings set org.gnome.mutter experimental-features "['scale-monitor-framebuffer']"
然后打开*设置 > 设备 > 显示*(新选项可能在重启后才出现)。
要为所有用户启用该选项,请创建以下三个文件并填入相应内容
/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
然后运行 `dconf update` 并重启计算机。这将永久锁定该选项。
Xwayland
从 Mutter 47.0 开始,可以启用原生分数缩放作为一项实验性功能。
通过发出以下命令启用它
$ gsettings set org.gnome.mutter experimental-features "['scale-monitor-framebuffer', 'xwayland-native-scaling']"
文本缩放
或者,作为更改显示缩放的替代方法或补充,您可以单独缩放文本。这可以通过在 Gnome Tweaks 中导航到*字体 > 缩放因子*,或使用 gsettings 来完成。请注意,文本缩放因子不必限于整数,例如
$ gsettings set org.gnome.desktop.interface text-scaling-factor 1.5
Xorg 上的 GTK+ 与 Gnome Shell 元素
如上所述调整文本缩放只会影响 GNOME 桌面的 GTK+ 元素。这应该涵盖 Wayland 上的所有内容。但是,在 Xorg 会话中的用户可能会发现,在 HiDPI 环境中需要进行进一步的调整,因为 GNOME Shell UI(包括顶部栏、Dock、应用程序菜单等)单独依赖于 St 工具包[死链接 2021-11-11—HTTP 404]。请注意,这是一个长期存在的问题,补丁已合并,可用于 Gnome Shell 3.35 及更高版本。对于旧版本,Xorg 用户可以通过手动编辑他们当前正在使用的 Shell 主题来解决大多数 Gnome Shell 缩放问题。相关的 CSS 文件通常位于 `/usr/share/themes/YOUR-THEME/gnome-shell/gnome-shell.css`。用户应按显示缩放比例增加此文件中的所有“font-size”元素(例如,对于 200% 缩放,字体大小加倍)。例如,编辑后的 Adapta Shell 主题顶部的 CSS 文件可能看起来像
usr/share/themes/Adapta/gnome-shell/gnome-shell.css
stage { font-size: 20pt; font-family: Roboto, Noto Sans, Sans-Serif; color: #263238; }
保存这些更改后,通过切换到另一个主题(例如,使用 gnome-tweaks)然后再切换回来,即可激活它们。顶部栏、应用程序菜单、日历和其他 Shell 元素现在应该已正确缩放。
除了编辑相关的 Shell 主题的 CSS 文件外,Xorg 上的用户可能还希望增加打开应用程序顶部的标题栏字体。这可以通过 dconf 编辑器(`org > gnome > desktop > wm > preferences :: titlebar-font`)完成。请注意,还应关闭 `title-bar-uses-system-fonts` 选项。或者,使用 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
您可以使用 Plasma 的设置来精细调整字体、图标和小部件的缩放。此解决方案会影响 Qt 和 GTK 应用程序。
要一起调整字体、小部件和图标缩放
- 系统设置 > 显示和监视器 > 显示配置 > 全局缩放
- 拖动滑块到所需大小
- 重启以使设置生效
但是,使用 X11 会话时,Plasma 默认会忽略 Qt 缩放设置,这会影响面板和其他桌面元素。要使 Plasma 尊重 Qt 设置,请设置 `PLASMA_USE_QT_SCALING=1`。
鼠标指针大小
要调整鼠标指针大小
- 系统设置 > 外观 > 鼠标指针 > 大小
字体缩放
要仅调整字体缩放
- 系统设置 > 外观 > 字体
- 勾选“强制字体 DPI”并调整 DPI 到所需值。此设置应立即对新启动的应用程序生效。您需要注销并重新登录才能使其在 Plasma 桌面上生效。
图标缩放
要仅调整图标缩放
- 系统设置 > 外观 > 图标 > 高级
- 为列出的每个类别选择所需的图标大小。这应立即生效。
面板缩放
要仅调整面板缩放
- 右键单击面板,选择*进入编辑模式*,然后手动调整*面板高度*。
Xwayland
从 Plasma 5.26 开始,可以在*系统设置 > 显示和监视器 > 显示配置*页面的底部选择 Xwayland 缩放方法。
在“系统缩放”模式下,X 应用程序将以 1 倍比例渲染,然后由 KDE 放大(缩放)。这适用于所有应用程序,但由于放大而导致模糊。
在“自行应用缩放”模式下,X 应用程序必须以适当的大小自行渲染。这将避免模糊,但未支持 HiDPI 的应用程序将以 1 倍比例自行渲染,因此会显得很小。
有关详细信息,请参阅此博客文章。
Xfce
Xfce 支持 HiDPI 缩放,可以使用设置管理器启用
- 转到*设置管理器 > 外观 > 设置 > 窗口缩放*,然后选择 2 作为缩放因子。
- 转到*设置管理器 > 窗口管理器 > 样式*,然后选择 `Default-xhdpi` 主题。
或者,也可以使用命令行通过 `xfconf-query` 完成相同的操作
$ xfconf-query -c xsettings -p /Gdk/WindowScalingFactor -s 2 $ xfconf-query -c xfwm4 -p /general/theme -s Default-xhdpi
在执行上述任一更改后,某些 GTK 应用程序中的字体可能仍未缩放;您可能还需要执行以下操作(请参阅 #GDK 3 (GTK 3))
- 转到*设置管理器 > 外观 > 字体 > 自定义 DPI 设置*,并将 96 更改为 192
- 设置环境变量 `GDK_DPI_SCALE=0.5` 以取消对某些将缩放两次的字体的缩放。
上述步骤将为 Xfce 和其他 GTK 3 应用程序设置 2 倍缩放分辨率。
Qt 5 应用程序的缩放应手动设置,请参阅 #Qt 5。请注意,如果您在上面设置了自定义字体 DPI,则很可能需要设置 `QT_FONT_DPI=96` 以避免 Qt 应用程序中的字体被双重缩放。
Cinnamon
开箱即用,支持良好。
Enlightenment
对于 E18,请转到 E 设置面板。在*外观 > 缩放*中,您可以控制 UI 缩放比例。1.2 的比例似乎对 MacBook Pro 15 英寸屏幕的原始分辨率效果良好。
窗口管理器
Sway
请参阅 Sway#HiDPI。
Hyprland
请参阅 Hyprland#设置屏幕分辨率。
X 资源
如果您不使用 KDE、Xfce 或其他会为您处理 X 设置的桌面环境,您可以通过 Xresources 中的 `Xft.dpi` 变量手动设置所需的 DPI 设置。
~/.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
对于 `Xft.dpi`,使用 96 的整数倍通常效果最好,例如 192 表示 200% 缩放。
确保在 X 启动时正确加载了设置,例如在您的 `~/.xinitrc` 中使用 `xrdb -merge ~/.Xresources`(有关更多信息,请参阅 Xresources)。
这将使字体在大多数工具包和应用程序中正确渲染,但它不会影响图标大小等内容!在某些程序(如 Firefox)中,同时设置 `Xft.dpi` 和工具包缩放(例如 `GDK_SCALE`)可能会导致界面元素比预期大得多。
X 服务器
某些程序可能仍然会解释 X 服务器提供的 DPI(尽管大多数程序直接或间接解释 X 资源)。早期版本的 i3(2017 年之前)和 Chromium(2017 年之前)曾这样做。
要验证 X 服务器是否正确检测到显示器的物理尺寸,请使用 xorg-xdpyinfo 包中的 `xdpyinfo` 工具。
$ xdpyinfo | grep -B 2 resolution
screen #0: dimensions: 3200x1800 pixels (423x238 millimeters) resolution: 192x192 dots per inch
此示例使用不准确的尺寸(423mm x 238mm,尽管 Dell XPS 9530 的尺寸为 346mm x 194mm)以获得 96 dpi 的干净倍数,在本例中为 192 dpi。这通常比使用正确的 DPI 效果更好——例如,Pango 在 i3 中渲染字体更清晰。
如果 xdpyinfo 显示的 DPI 不正确,请参阅 Xorg#显示尺寸和 DPI 来修复它。
GUI 工具包
Qt 5
自 Qt 5.6 起,可以通过设置 `QT_AUTO_SCREEN_SCALE_FACTOR` 环境变量来指示 Qt 5 应用程序尊重屏幕 DPI。Qt 5.14 引入了一个新的环境变量 `QT_ENABLE_HIGHDPI_SCALING`,它取代了 `QT_AUTO_SCREEN_SCALE_FACTOR` 变量。建议同时设置这两个环境变量以获得最大的兼容性。
$ export QT_AUTO_SCREEN_SCALE_FACTOR=1 $ export QT_ENABLE_HIGHDPI_SCALING=1
如果自动检测 DPI 未产生预期效果,则可以按屏幕手动设置缩放(`QT_SCREEN_SCALE_FACTORS`/`QT_ENABLE_HIGHDPI_SCALING`)或全局设置(`QT_SCALE_FACTOR`)。更多详细信息,请参阅 Qt 博客文章或 Qt 开发者文档。
- 如果您手动设置屏幕因子,重要的是设置 `QT_AUTO_SCREEN_SCALE_FACTOR=0` 和 `QT_ENABLE_HIGHDPI_SCALING=0`,否则某些明确强制启用高 DPI 的应用程序将被缩放两次。
- `QT_SCALE_FACTOR` 会缩放字体,但 `QT_SCREEN_SCALE_FACTORS` 可能不会缩放字体,具体取决于应用程序。
- 如果您还在 `xrdb` 中手动设置了字体 DPI 以支持其他工具包,`QT_SCREEN_SCALE_FACTORS` 会导致字体过大。
- 如果您有多个 DPI 不同的屏幕,例如 #侧显示器,您可能需要设置 `QT_SCREEN_SCALE_FACTORS="2;2"`
一个替代方案例如
$ QT_FONT_DPI=96 clementine
GDK 3 (GTK 3)
设置 GDK 比例(在 X11 中,不在 Wayland 中)将缩放 UI;但是,它不会缩放图标。如果您使用最小化窗口管理器,并且通过 Xft.dpi 设置 DPI,GDK 应该能很好地与之配合。在其他情况下,请执行以下操作
以整数因子缩放 UI 元素
$ export GDK_SCALE=2
GTK3 目前不支持分数缩放,因此分数因子将被忽略。此环境变量在 mutter wayland 会话中也无效。
GTK4 自 4.14 版本起在 Wayland 下支持分数缩放。
`GDK_DPI_SCALE` 可用于仅缩放文本。要取消文本缩放,可以使用分数缩放。
$ export GDK_DPI_SCALE=0.5
在 GTK3/4 中,目前无法缩放图标大小,除非应用程序明确实现了一种方法。请参阅 bug 报告 #4528。如果您需要此功能,请尽可能使用 Qt。
GTK 2
UI 元素的缩放本身不受工具包支持,但是可以使用 themix-full-gitAUR 生成预先为 HiDPI 显示器缩放的元素的样式。
Electron
Electron 应用程序(例如 slack-desktopAUR、signal-desktop 等)可以通过将 `--force-device-scale-factor` 标志添加到 `.desktop` 文件来配置为始终使用自定义缩放值。官方仓库中的 Electron 包和使用它们的包可以通过 配置文件进行配置。
桌面文件通常位于 `/usr/share/applications/`,并且通常可以通过将其复制到 `~/.local/share/applications/` 来按用户覆盖。该标志应添加到以“Exec=”开头的行。例如
~/.local/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)
以 1.5 的因子缩放 UI 元素
export ELM_SCALE=1.5
更多详情请参阅 https://phab.enlightenment.org/w/elementary/[死链接 2024-10-12—域名未解析]
GNUstep
使用其 GUI (AppKit) 库的 GNUstep 应用程序接受其默认值(STEP 首选项)中的 `GSScaleFactor` 属性。要为所有应用程序定义 1.5 的缩放因子
defaults write NSGlobalDomain GSScaleFactor 1.5
请注意,您还必须通过将 `GSFontHinting` 的值设置为 17 来禁用字体提示,否则在渲染长行时文本渲染会看起来很糟糕。
defaults write NSGlobalDomain GSFontHinting 17
早在 2011 年就能进行一些自动检测,但负责 X11 后端的代码在此之后被注释掉了。
FLTK
FLTK 1.3,Arch Linux 中默认提供的 FLTK 版本,不支持分辨率缩放。当应用程序开始使用 FLTK 1.4 时,支持将随之而来。
AvaloniaUI (C# / .NET)
`AVALONIA_GLOBAL_SCALE_FACTOR` 可用于缩放。要取消缩放,可以使用分数缩放。
$ export AVALONIA_GLOBAL_SCALE_FACTOR=0.5
有关按监视器配置,请参阅 avalonia wiki]。
引导管理器
GRUB
降低帧缓冲分辨率
如 GRUB/Tips and tricks#设置帧缓冲分辨率 中所述,为帧缓冲设置较低的分辨率。
更改 GRUB 字体大小
在 `/usr/share/fonts/` 中找到您喜欢的 ttf 字体。
将字体转换为 GRUB 可以使用的格式
# grub-mkfont -s 30 -o /boot/grubfont.pf2 /usr/share/fonts/FontFamily/FontName.ttf
编辑 `/etc/default/grub` 以设置新字体,如 GRUB/Tips and tricks#背景图像和位图字体 中所示。
GRUB_FONT="/boot/grubfont.pf2"
最后,重新生成主配置文件。
systemd-boot
如 systemd-boot#加载器配置 和 loader.conf(5) § OPTIONS 中所述,通过 `console-mode` 为控制台设置较低的分辨率。
应用程序
如果您正在运行 Wayland 会话,但应用程序是通过 Xwayland 运行的(因为该应用程序不支持 Wayland 原生,或默认使用 X11),您仍然可能会遇到模糊的字体和界面,即使应用程序支持 HiDPI。请参阅 此 bug 报告。另请参阅 Wayland#检测 Xwayland 应用程序。
浏览器
Firefox
Firefox 应使用 #GDK 3 (GTK 3) 设置。然而,建议的 `GDK_SCALE` 建议不能始终缩放 Firefox 的全部内容,并且不适用于分数(例如,对于 1080p 14 英寸笔记本电脑,因子为 158DPI/96DPI = 1.65)。您可能想改用 `GDK_DPI_SCALE`。另一种选择,在许多设置中可以避免 Firefox 特定的设置,是在 #X 资源中使用设置,因为 Firefox 应该尊重那里定义的 `Xft.dpi` 值。
要查看 Firefox 的内部 UI 缩放设置,请打开高级首选项页面(`about:config`)并检查这些参数
- `widget.wayland.fractional-scale.enabled`:将其设置为 true 以在 wayland 上启用分数缩放。否则,在某些桌面环境(例如 KDE on wayland)中,Firefox 可能会被双重缩放。例如,如果您在 plasma 系统设置中将屏幕缩放设置为 150%,Firefox 将首先放大到 200%,然后缩小到 150%,因此所有字体看起来都会模糊。
- `layout.css.devPixelsPerPx`:控制 UI 缩放的实际参数。125% 缩放为 `1.25`,150% 缩放为 `1.50`,依此类推。默认值为 `-1.0`(遵循系统的 HiDPI 设置)。
如果您使用 HiDPI 显示器(如 Retina 显示屏)以及其他显示器,您可以使用 ffreszoom 附加组件,它会在检测到您正在使用大显示器时调整页面缩放(缩放级别和阈值可配置)。目前不支持通过扩展修改内部 CSS DPI 设置[6]。
Chromium / Google Chrome
Chromium 应使用 #GDK 3 (GTK 3) 设置。
要覆盖这些设置,请使用带有缩放值的 `--force-device-scale-factor` 标志。这将缩放所有内容和 UI,包括标签和字体大小。例如 `chromium --force-device-scale-factor=2`。
使用此选项,缩放因子 1 将是正常缩放。可以使用浮点值。要使更改永久生效,对于 Chromium,您可以将其添加到 `~/.config/chromium-flags.conf`
~/.config/chromium-flags.conf
--force-device-scale-factor=2
要使此功能对 Chrome 生效,请将相同的选项添加到 `~/.config/chrome-flags.conf`。
如果您正在使用 Wayland,并且上述标志的设置在 Chrome(不是 Chromium)上似乎不起作用,您可能需要通过访问地址栏中的 URL 来显式设置以下“实验性”设置:`chrome://flags/` (Chrome Flags 是什么?)
- "Preferred Ozone platform": "Wayland"
- "Wayland per-window scaling": "Enabled"
- "Wayland UI scaling": "Enabled"
如果您使用 HiDPI 显示器(如 Retina 显示屏)以及其他显示器,您可以使用 reszoom 扩展程序,以便自动调整活动屏幕的缩放级别。
如果使用 Wayland 会话,您应该启用原生 Wayland 支持以避免模糊。另请参阅 Chromium#不正确的 HiDPI 渲染。
Opera
Opera 应使用 #GDK 3 (GTK 3) 设置。
要覆盖这些设置,请使用 `--alt-high-dpi-setting=X` 命令行选项,其中 X 是所需的 DPI。例如,使用 `--alt-high-dpi-setting=144` Opera 将假定 DPI 为 144。较新版本的 Opera 将自动检测 DPI,使用字体 DPI 设置(在 KDE 中:强制字体 DPI 设置)。
Inkscape
要将图标缩放到“可用”大小,请转到*首选项 > 界面*,然后将图标大小设置为大或更大[7][8]。
Java 应用程序
AWT/Swing
使用 AWT/Swing 框架的 Java 应用程序可以通过在调用 java 时定义 sun.java2d.uiScale VM 属性来缩放。该值可以是整数百分比值,或浮点值。例如,
java -Dsun.java2d.uiScale=2 -jar some_swing_application.jar java -Dsun.java2d.uiScale=300% -jar some_swing_application.jar
自 Java 9 起,GDK_SCALE 环境变量用于相应地缩放 Swing 应用程序。
请注意,此时 Java AWT/Swing(包括 OpenJDK 13)仅有效支持整数值。设置为 -Dsun.java2d.uiScale=250% 或 GDK_SCALE=2.5 将被视为 -Dsun.java2d.uiScale=2 或 GDK_SCALE=2。
JavaFX
使用 JavaFX 的 Java 应用程序可以通过在调用 java 时定义 glass.gtk.uiScale VM 属性来缩放。该值可以是整数百分比值,整数 DPI 值(其中 96dpi 代表 100% 的缩放因子,例如 192dpi 代表 200% 的缩放因子),或浮点值。例如,
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 非常好地支持分数。使用 -Dglass.gtk.uiScale=250% 或 -Dglass.gtk.uiScale=2.5 之类的值将产生预期的结果。
混合 AWT/Swing 和 JavaFX
一些 Java 应用程序混合使用 JavaFX 和 AWT/Swing(通过 javafx.embed.swing.JFXPanel)。在这种情况下,AWT/Swing 的设置也将影响 JavaFX,并且设置 -Dglass.gtk.uiScale 将不起作用。
JetBrains IDE
在 Wayland 上,自 2024.2 版本起,HiDPI 和分数缩放得到了实验性支持。可以通过在 VM 选项(Help > Edit custom VM options)中添加 -Dawt.toolkit.name=WLToolkit 来启用 Wayland 支持预览。
JetBrains 产品(IntelliJ IDEA 和其他 IDE)支持两种 HiDPI 模式(JRE 管理和 IDE 管理)。系统缩放因子的确定顺序在 [9] 有详细文档。
- Java 属性 –
-Dsun.java2d.uiScale - gsettings(1) –
ubuntu.user-interface/scale-factor或org.gnome.desktop.interface/scaling-factor GDK_SCALE和GDK_DPI_SCALE- Xresources –
Xft.dpi - 1.0
为了故障排除,请通过 搜索“Shift Shift” 的“Show HiDPI Info”对话框进行咨询。
当使用每监视器缩放时,可能会出现 IntelliJ 无法识别真实、原始监视器分辨率的问题。要解决此问题,一些用户通过将 -Dsun.java2d.uiScale.enabled=true 选项添加到 ide_name.vmoptions 文件(Help > Edit custom VM options)中获得了成功。
如果这不起作用,可能在 Wayland 上启用了实验性的 GTK 选项 scale-monitor-framebuffer(见上文),并且禁用了 Wayland 支持预览(见上文)。目前 JetBrains 产品在 Xwayland 上运行,因此 尚未完全支持原生 Wayland。这使得 JetBrains 产品中的渲染与监视器缩放帧缓冲器不兼容。因此,禁用帧缓冲器可能会解决 JB 产品中字体/渲染模糊的问题,但遗憾的是会导致分数缩放被禁用。另一个选择是启用 Wayland 支持预览。
Maple
Maple 可以使用 AWT/Swing 解决方案为 HiDPI 监视器进行缩放。但它必须添加到 Maple 安装目录下的 maple-directory/bin/maple 中的 JVM_OPTIONS
maple-directory/bin/maple
... JVM_OPTIONS="-Dsun.java2d.uiScale=2 ..." ...
或者,可以使用 GDK_SCALE 环境变量来启动缩放后的应用程序。
$ GDK_SCALE=2 maple-directory/bin/xmaple %f
MATLAB
最近版本的 MATLAB(自 R2017b 起)允许设置缩放因子[10]
版本 R2024b 及更早版本
要调整缩放因子,请在 MATLAB 命令窗口中执行以下指令
>> s = settings; >> s.matlab.desktop.DisplayScaleFactor %Get current value >> s.matlab.desktop.DisplayScaleFactor.PersonalValue = 2 %Set personal value
设置在 MATLAB 重启后生效。
如果需要频繁更改缩放,这会很麻烦。为了简化这一点,可以考虑使用以下脚本
~/bin/matlab-scale
#!/bin/sh exec matlab -r "s = settings;s.matlab.desktop.DisplayScaleFactor.PersonalValue=$1;quit" -nodesktop -nosplash
将显示缩放更改为 3
$ matlab-scale 3
版本 R2025a 及更新版本
在最新的 MATLAB 版本中,更改 DisplayScaleFactor 属性通常无效。但是,新引入的参数允许实时更改缩放因子,无需重启 MATLAB。
>> s = settings; >> s.matlab.desktop.Zoom %Get current value >> s.matlab.desktop.Zoom.PersonalValue=150 %Set personal value
Mono 应用程序
根据 [11][死链接 2023-04-23—域名未解析],Mono 应用程序应该可以像 GTK 3 应用程序一样缩放。具体方法取决于 GUI 库:GtkSharp 显然指向 Gtk,而普通的 Windows Forms (libgdiplus) 仅检测 Xft 设置。
NetBeans
NetBeans 允许通过启动时的 --fontsize 参数来控制其界面的字体大小。要使此更改永久生效,请编辑 /usr/share/netbeans/etc/netbeans.conf 文件,并将 --fontsize 参数附加到 netbeans_default_options 属性。[12]
编辑器字体大小可以通过 Tools > Option > Fonts & Colors 进行控制。
输出窗口字体大小可以通过 Tools > Options > Miscellaneous > Output 进行控制。
OBS Studio
OBS 29 支持 HiDPI 设置,无需额外配置。
对于旧版本的 OBS,建议设置环境变量 QT_AUTO_SCREEN_SCALE_FACTOR=0 来禁用 Qt 的 hi-dpi 迁移模式 并安装 Yami 主题。不要将 Yami 主题用于 OBS 29 或更新版本,因为它不再是必需的,并且会导致 buggy 行为。
Rofi
Rofi 默认为 96 DPI,并且仅依赖于自身的配置。
~/.config/rofi/config.rasi
configuration {
…
dpi: 150;
…
}
Spotify
您可以通过简单的 Ctrl++ 放大、Ctrl+- 缩小和 Ctrl+0 重置默认比例来更改缩放因子。缩放设置将保存在 ~/.config/spotify/Users/YOUR-SPOTIFY-USER-NAME/prefs 中,您可能需要自己创建此文件。
~/.config/spotify/Users/YOUR-SPOTIFY-USER-NAME/prefs
app.browser.zoom-level=100
Spotify 还可以使用自定义缩放因子启动,该因子将与 ~/.config/spotify/Users/YOUR-SPOTIFY-USER-NAME/prefs 中指定的设置相乘,例如
$ spotify --force-device-scale-factor=1.5
Steam
官方 HiDPI 支持
- 自 2018 年 1 月 25 日的测试版计划起,已实际支持 HiDPI,并且应自动检测。
- Steam > Settings > Interface,勾选 Enlarge text and icons based on monitor size(需要重启)。
- 如果未自动检测到,请使用
GDK_SCALE=2设置所需的缩放因子。 - 如果上述方法失败,请使用
steam -forcedesktopscaling 2或设置STEAM_FORCE_DESKTOPUI_SCALING=2.0。[13] 从 2023 年 6 月的 UI 大修开始,此参数也支持非整数缩放因子,例如1.25。 - 您还可以通过 Steam > Settings > Accessibility 调整界面缩放,尽管滑块不显示数值。
非官方
可以安装 HiDPI-Steam-Skin 来增加界面字体大小。虽然不完美,但它确实提高了可用性。
skins_readme.txt 的文件来识别其中的正确文件夹。MetroSkin Unofficial Patch 也有助于 Steam 在 Linux 上的 HiDPI。
Sublime Text 3
Sublime Text 3 完全支持显示缩放。转到 Preferences > Settings > User Settings 并将 "ui_scale": 2.0 添加到您的设置中。
Thunderbird
请参阅 #Firefox。要访问 about:config,请转到 Edit > Preferences > Advanced >Config editor。
VirtualBox
VirtualBox 还会将系统范围的缩放应用于虚拟监视器,这会以您的缩放因子减小 VM 内部的最大分辨率(请参阅 [14])。
可以通过计算缩放因子的倒数并手动为 VirtualBox 执行设置此新缩放因子来解决此问题,例如
$ QT_SCALE_FACTOR=0.5 VirtualBoxVM --startvm vm-name
VMware
VMware 应用程序中的文本会根据系统配置以适当的大小呈现,但图标很小,UI 元素之间的间距很小。
如 #GDK 3 (GTK 3) 所述,您可以使用 GDK_SCALE 进一步缩放整个 UI(包括图标和间距),然后使用 GDK_DPI_SCALE 将文本单独缩小到合理的大小。
例如,获得最终的 2 倍缩放因子
$ GDK_SCALE=2 GDK_DPI_SCALE=0.5 vmware
Wine 应用程序
运行
$ winecfg
并在“Graphics”选项卡中更改“dpi”设置。这只会影响字体大小。
Zathura 文档查看器
文档查看无需修改。
UI 文本缩放通过 配置文件 指定(请注意,“font”是一个 girara 选项)。
set font "monospace normal 20"
Zoom
在 ~/.config/zoomus.conf 中设置 scaleFactor 变量。
对于 Flatpak 版本,设置环境变量 QT_SCALE_FACTOR(例如设置为 0.5 [15])。如果偏好使用 GUI 工具,可以使用 Flatseal 轻松完成。
Gazebo
Gazebo 只渲染视图的左上角而不是整个视图。要解决此问题,必须设置 Qt 环境变量。
运行 Gazebo
$ QT_SCREEN_SCALE_FACTORS=[1.0] gazebo
运行 ROS 模拟
$ TURTLEBOT3_MODEL=burger QT_SCREEN_SCALE_FACTORS=[1.0] roslaunch turtlebot3_gazebo turtlebot3_world.launch
创建别名,例如 gazebo="QT_SCREEN_SCALE_FACTORS=[1.0] gazebo" 对于第一种情况有效,但对第二种情况无效。
Fcitx
Fcitx 预编辑 FontSize 可以在 ~/.config/fcitx/conf/fcitx-classic-ui.config 中更改。
对于 Fcitx5,在 ~/.config/fcitx5/conf/classicui.conf 中设置带引号的 Font(包含大小)。
Synthesizer V Studio Pro
Synthesizer V Studio Pro 支持 UI 缩放。它可以自动设置缩放,但如果失败,可以使用选项 --with-scaling 调整缩放。
$ synthv-studio --with-scaling 2.0
V2RayN、SourceGit 和其他 AvaloniaUi C# / .NET 应用程序
如 #AvaloniaUI (C# / .NET) 所述,您可以使用 AVALONIA_GLOBAL_SCALE_FACTOR。
不支持的应用程序(通过网络层)
xpra 包括一个 run_scaled 脚本,可用于缩放应用程序。
另一种方法是将应用程序全屏运行且无边框,置于其自己的 VNC 桌面中。然后缩放查看器。使用 vncdesk-gitAUR,您可以为每个应用程序设置一个桌面,然后使用类似 vncdesk 2 的简单命令启动服务器和客户端。
x11vnc 有一个实验性选项 -appshare,它为每个应用程序窗口打开一个查看器。也许可以利用它做些东西。
不支持的应用程序(通过 Weston)
有一种无网络、可能是 GPU 加速的解决方案,可以通过 Weston 缩放旧的/不支持的应用程序。基本示例是
$ weston --xwayland --socket=testscale --scale=2 $ DISPLAY=:1 WAYLAND_DISPLAY=testscale your_app
注意 1:您可以使其看起来更好。创建一个专用的 weston.ini 并与 weston --config 一起使用。
[core] idle-time=0 [shell] panel-position=none locking=false
注意 2:根据您的系统调整 DISPLAY,:1 只是主 :0 之后默认的。查看 /tmp/.X11-unix 中创建的文件以进行设置。
注意 3:如果您想要每个缩放应用程序的独立窗口,请调整 weston 的 --socket 参数以及每个启动应用程序的 WAYLAND_DISPLAY + DISPLAY。脚本化这一点并不容易,因为 Xorg 显示必须是一个相对较小的整数,但您可以创建一个半安全的脚本来推断它。
注意 4:Weston 和 xwayland 是否真正将繁重部分卸载到 GPU 尚未完全测试。至少 weston 声称会这样做,但尚未进行相关测试。如果您进行了 GPU 使用情况测试,请进行编辑。
多显示器
HiDPI 设置应用于整个桌面,因此非 HiDPI 的外接显示器也会显示所有内容过大。但是,请注意 Wayland 已支持为不同监视器设置不同的缩放因子。
侧显示器
一种解决方法是使用 xrandr 的 scale 选项。要在 HiDPI 内置显示器(eDP1)右侧放置一个非 HiDPI 监视器(在 DP1 上),可以运行
$ xrandr --output eDP-1 --auto --output DP-1 --auto --scale 2x2 --right-of eDP-1
当扩展到内置显示器上方时,您可能会在外部监视器上看到内置显示器的一部分。在这种情况下,请手动指定位置。
您可以调整监视器设置中的 sharpness 参数来调整缩放引入的模糊程度。
多个外接显示器
在缩放多个 DPI 低于内置 HiDPI 显示器的外接显示器时可能会出现一些问题。在这种情况下,您可能希望尝试向下缩放 HiDPI 显示器,例如使用
$ xrandr --output eDP1 --scale 0.5x0.5 --output DP2 --right-of eDP1 --output HDMI1 --right-of DP2
此外,当您向下缩放 HiDPI 显示器时,HiDPI 显示器上的字体会略有模糊,但这与放大外接显示器时产生的模糊不同。您可以进行比较,看看哪种模糊对您来说问题更小。
镜像
如果您只想镜像(“统一”)显示器,这也很容易。
使用 AxB 表示您的本机 HiDPI 分辨率(例如 3200x1800),使用 CxD 表示您的外接屏幕分辨率(例如 1920x1200)。
$ xrandr --output HDMI --scale [A/C]x[B/D]
在这个例子中(QHD,3200/1920 = 1.66,1800/1200 = 1.5)
$ xrandr --output HDMI --scale 1.66x1.5
从 UHD 到 1080p(3840/1920=2,2160/1080=2)。
$ xrandr --output HDMI --scale 2x2
您可以调整监视器设置中的 sharpness 参数来调整缩放引入的模糊程度。
工具
有几种工具可以自动化上述命令。
- 此脚本 将一个非 HiDPI 的外接显示器扩展到 HiDPI 内置显示器之上。
- xrandr-extend.
- xlayoutdisplayAUR 是 xrandr 的 CLI 前端,它检测并设置正确的 DPI:README
Linux 控制台(tty)
内核内字体
Linux 控制台根据显示器的垂直和水平像素数将字体更改为 TER16x32(基于 terminus-font 中的 ter-i32b[18]),而与其实际尺寸无关。[19] 如果您的监视器未被识别为 HiDPI,可以更改默认字体。在这种情况下,请在 内核命令行 中指定 fbcon=font:TER16x32。
内核外的字体(tty)
kbd 包中最大的字体是 latarcyrheb-sun32 和 solar24x32。其他包如 terminus-font 包含更多替代字体,例如 ter-132n(正常)和 ter-132b(粗体)。请参阅 Linux 控制台#字体 查看配置详情,特别是 Linux 控制台#持久化配置 以在早期用户空间引导序列中应用字体设置。
更改字体后,在切换到其他虚拟控制台(tty2–6)时,字体常常会变得混乱且难以阅读。要解决此问题,您可以 强制 KMS 使用特定模式,例如 video=2560x1600@60(替换为您 HiDPI 显示器的原生分辨率),然后重新启动。使用较低的分辨率会使文本看起来更大,但也会更像素化。
通过 UEFI 引导的用户可能会遇到控制台和 引导加载程序 被限制在低分辨率的问题,尽管设置了正确的 KMS 设置。这可能是由于 UEFI 设置中启用了传统/BIOS 引导。禁用传统引导以绕过兼容层应该可以让系统以正确的分辨率启动。
现代 HiDPI 支持(kmscon)
要获得真正的 HiDPI 支持,请参阅 KMSCON,而不是更改 tty 中的字体大小。
参见
- Ultra HD 4K Linux 显卡测试(2013 年 11 月)
- 理解像素密度
- 混合 DPI 和 X Window System