HiDPI
HiDPI (High Dots Per Inch) 显示器,也被苹果称为“Retina 显示屏”营销名称,是指在相对较小的尺寸内拥有高分辨率的屏幕。它们大多出现在高端笔记本电脑和显示器上。
并非所有软件都能很好地在高清分辨率模式下运行。这里列出了最常见的调整,以使 HiDPI 屏幕上的工作更加愉快。
背景
该领域的术语可能令人困惑。在 HiDPI 之前,术语是
- 每英寸点数 (DPI)—指定打印纸张时墨滴的输出密度。[1] 每英寸点数越高,输出密度越大。
- 像素密度,每英寸像素数 (PPI)—指定数字图像的输入密度。[2] 计算公式为
(图像中的像素数) / (照片的物理尺寸)。
每个显示器都有一个内在的 PPI,即屏幕原生分辨率与物理屏幕尺寸的比例。[3] 尽管一些技术来源使用“PPI”一词,[4] 但更常见的是(不准确地)将此比例称为 DPI。96 DPI 的屏幕被认为对大多数人来说阅读 ~12pt 字体是舒适的,并且大多数“低 DPI”显示器都属于这一类。HiDPI 屏幕大约是 192 DPI 及以上,有些屏幕则介于两者之间(“中等 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 上都可行,尽管过程不同。
实现主要在 2017 年 GNOME 分数缩放黑客马拉松上进行了讨论和决定,有关更多技术细节,请参阅 [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 应用程序。
GDK_SCALE/GDK_DPI_SCALE 变量的使用,并切换到了 Xsettingsd。应安装它以使 GTK 应用程序的缩放正常工作。或者,您可以手动设置这些变量,如 #GDK 3 (GTK 3) 中所述。一起调整字体、窗口小部件和图标的缩放
- 系统设置 > 显示和监视器 > 显示配置 > 全局缩放
- 拖动滑块到所需的大小
- 重启以使设置生效
~/.Xresources 中是否设置了 xft.dpi。如果是,则移除该变量并重新调整全局缩放可能生效。但是,使用 X11 会话时,Plasma 默认会忽略 Qt 缩放设置,这会影响面板和其他桌面元素。要使 Plasma 尊重 Qt 设置,请设置 PLASMA_USE_QT_SCALING=1。
鼠标指针大小
调整光标大小
- 系统设置 > 外观 > 光标 > 大小
字体缩放
仅调整字体缩放
- 系统设置 > 外观 > 字体
- 勾选“强制字体 DPI”并调整 DPI 值到所需值。此设置应立即对新启动的应用程序生效。您需要注销并重新登录才能使其在 Plasma 桌面生效。
图标缩放
仅调整图标缩放
- 系统设置 > 外观 > 图标 > 高级
- 为列出的每个类别选择所需的图标大小。这应立即生效。
面板缩放
仅调整面板缩放
- 右键单击面板,选择进入编辑模式,然后手动调整面板高度。
Xwayland
截至 Plasma 5.26,可以在系统设置 > 显示和监视器 > 显示配置页面的底部选择 Xwayland 缩放方法。
在“由系统缩放”模式下,X 应用程序将以 1x 比例渲染,然后由 KDE 进行放大(缩放)。这适用于所有应用程序,但由于放大而导致模糊。
在“自行应用缩放”模式下,X 应用程序将不得不自行以适当的大小进行渲染。这可以避免模糊,但不支持 HiDPI 的应用程序将以 1x 比例渲染,因此看起来会很小。
有关详细信息,请参阅这篇博客文章。
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 应用程序设置 2x 缩放分辨率。
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)。
这将使字体在大多数工具包和应用程序中正确渲染,但不会影响图标大小等内容!在设置工具包缩放(例如 GDK_SCALE)的同时设置 Xft.dpi 可能会导致某些程序(如 Firefox)的界面元素比预期的大得多。
X 服务器
一些程序可能仍然会解释 X 服务器提供的 DPI(尽管大多数会直接或间接解释 X 资源)。旧版本的 i3(2017 年之前)和 Chromium(2017 年之前)曾经这样做。
要验证 X 服务器是否已正确检测到显示器的物理尺寸,请使用 xdpyinfo 工具,该工具来自 xorg-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_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 等)可以通过向 .desktop 文件添加 --force-device-scale-factor 标志来配置为始终使用自定义缩放值。官方仓库中的 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)
将 UI 元素缩放 1.5 倍
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
Arch Linux 中默认的 FLTK 版本 FLTK 1.3 不支持分辨率缩放。当应用程序开始使用 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
-s 30 参数以修改字体大小。编辑 /etc/default/grub 以设置新字体,如 GRUB/Tips and tricks#背景图像和位图字体 中所示。
GRUB_FONT="/boot/grubfont.pf2"
GRUB_THEME,它将覆盖 GRUB_FONT。最后重新生成主配置文件。
systemd-boot
如 systemd-boot#Loader 配置和 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 上启用分数缩放。否则,在某些桌面环境(例如,Wayland 上的 KDE)中,Firefox 可能会被双重缩放。例如,如果您在 plasma 系统设置中将屏幕缩放设置为 150%,Firefox 将先放大到 200%,然后向下缩放到 150%,因此所有字体看起来都很模糊。layout.css.devPixelsPerPx:控制 UI 缩放的实际参数。1.25表示 125% 缩放,1.50表示 150%,依此类推。默认值为-1.0(遵循系统的 HiDPI 设置)。
如果您使用像 Retina 显示屏这样的 HiDPI 显示器并连接了另一个显示器,您可以使用 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"
如果您使用像 Retina 显示屏这样的 HiDPI 显示器并连接了另一个显示器,您可以使用 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 结合分数缩放得到了实验性支持。可以通过将 -Dawt.toolkit.name=WLToolkit 添加到 VM 选项(帮助 > 编辑自定义 VM 选项)来启用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) 中的“显示 HiDPI 信息”对话框进行咨询。
在使用按监视器缩放时,可能会出现 IntelliJ 无法识别真实、原始监视器分辨率的问题。为了解决此问题,有些人通过将 -Dsun.java2d.uiScale.enabled=true 选项添加到 ide_name.vmoptions 文件(帮助 > 编辑自定义 VM 选项)中获得了成功。
如果这不起作用,在 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
最新版本(R2017b 及更高版本)的MATLAB 允许设置缩放因子[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]
编辑器字体大小可以在“工具 > 选项 > 字体和颜色”中进行控制。
输出窗口字体大小可以在“工具 > 选项 > 杂项 > 输出”中进行控制。
OBS Studio
OBS 29 无需额外配置即可支持 HiDPI 设置。
对于旧版本的 OBS,建议设置环境变量 QT_AUTO_SCREEN_SCALE_FACTOR=0 以禁用Qt 的 hi-dpi 迁移模式并安装 Yami 主题。请勿将 Yami 主题用于 OBS 29 或更新版本,因为它不再必要,并且会导致 bug 行为。
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 日起,beta 程序中增加了实际的 HiDPI 支持,应该会自动检测。
- Steam > 设置 > 界面,勾选根据监视器大小放大文本和图标(需要重启)。
- 如果未自动检测到,请使用
GDK_SCALE=2设置所需的缩放因子。 - 如果上述方法无效,请使用
steam -forcedesktopscaling 2或设置STEAM_FORCE_DESKTOPUI_SCALING=2.0。[13] 自 2023 年 6 月的 UI 大修以来,此参数也支持非整数缩放因子,例如1.25。 - 您还可以通过 Steam > 设置 > 辅助功能 调整界面缩放,尽管滑块不显示数值。
非官方
可以安装HiDPI-Steam-Skin 来增大界面的字体大小。虽然不完美,但它确实提高了可用性。
skins_readme.txt 的文件来确定这些目录中的正确文件夹。MetroSkin 非官方补丁也有助于解决 Steam 在 Linux 上的 HiDPI 问题。
Sublime Text 3
Sublime Text 3 完全支持显示缩放。转到 首选项 > 设置 > 用户设置 并将 "ui_scale": 2.0 添加到您的设置中。
Thunderbird
参见#Firefox。要访问 about:config,请转到 编辑 > 首选项 > 高级 > 配置编辑器。
VirtualBox
VirtualBox 也会将系统范围的缩放应用于虚拟监视器,这将使虚拟机内的最大分辨率降低您的缩放因子(参见[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
并在“图形”选项卡中更改“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,它为每个应用程序窗口打开一个查看器。也许可以用它 hack 一些东西。
不受支持的应用程序,通过 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 参数来调整缩放引入的模糊级别。
多个外接显示器
在缩放比内置 HiDPI 显示器具有较低 DPI 的多个外接显示器时可能会遇到一些问题。在这种情况下,您可能想尝试降低 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 控制台会根据显示器的水平和垂直像素数[19]将字体更改为 TER16x32(基于terminus-font[18] 中的 ter-i32b),而不管其物理尺寸如何。如果您的监视器未被识别为 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 中的字体大小。
参见
- 超高清 4K Linux 显卡测试(2013 年 11 月)
- 理解像素密度
- 混合 DPI 与 X Window System