HiDPI

出自 ArchWiki

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 感知不足的系统上使用 HiDPI 屏幕时,该系统假定 DPI 约为 96,小字体将难以阅读。由于字体渲染相对容易调整,即使是“DPI 感知不足”的系统(例如 #Wine 应用程序)通常也提供用于调整字体 DPI 的旋钮。每当 DPI 设置作为数字(而不是乘数或百分比)公开时,它可能仅指文本渲染。

大多数现代 GUI 工具包都能够进行“整数缩放”,即将 UI 渲染为至少 2 倍大小。这是通过应用不同的字体 DPI 以及提供 HiDPI 版本的资源来实现的。一些工具包还支持分数缩放,GTK #分数缩放 使用应用任意字体 DPI 和缩小图形资源的组合。

在其他方面使用 UI 缩放的桌面上,缺少分辨率独立性的应用程序(例如 #Xwayland)可能会以 1x 比例渲染,然后由显示服务器放大。

桌面环境

GNOME

要启用 HiDPI,请导航到设置 > 设备 > 显示器 > 缩放并选择适当的值。或者,使用 gsettings

$ gsettings set org.gnome.settings-daemon.plugins.xsettings overrides "[{'Gdk/WindowScalingFactor', <2>}]"
$ gsettings set org.gnome.desktop.interface scaling-factor 2
注意: 默认情况下,GNOME 仅允许设置整数缩放比例。1 = 100%,2 = 200%,等等。请参阅下面的 #分数缩放

分数缩放

设置为 23 等等,这都是您可以对 scaling-factor 执行的操作,对于某些 HiDPI 显示器和较小的屏幕(例如小型平板电脑)可能并不理想。分数缩放在 Wayland 和 Xorg 上都是可能的,尽管过程有所不同。

实施方案主要在 2017 年 GNOME 分数缩放黑客马拉松中讨论和决定,请查看 [5] 以获取更多技术细节。

注意

此文章或章节的 事实准确性 存在争议。

原因: 以下信息可能会发生变化。更多信息,请参阅 此在线讨论。(在 Talk:HiDPI 中讨论)

目前,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']"
Xorg

Ubuntu 提供了一个补丁[6],用于在 GNOME 设置中使用 Randr 进行缩放。此补丁已由 mutter-x11-scalingAUR 提供。安装后,您可以设置

$ gsettings set org.gnome.mutter experimental-features "['x11-randr-fractional-scaling']"

然后打开设置 > 设备 > 显示器以设置缩放比例。

您还可以通过结合使用 GNOME 的 scaling-factorxrandr 手动实现任何非整数缩放比例。这种组合保持了 TTF 字体正确缩放,这样在使用 xrandr 单独缩放时它们不会变得模糊。您可以使用 gsettings 指定放大系数,并使用 xrandr 指定缩小系数。

首先将 GNOME 放大到最小的过大尺寸。通常“2”已经太大了,否则尝试“3”等等。然后通过使用 xrandr 设置缩小系数来开始缩小。首先获取相关的输出名称,以下示例使用 eDP1。例如,从缩小 1.25 倍开始。如果 UI 仍然太大,则增加缩放比例;如果太小,则减小缩放比例。

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

为了确保设置在重启后仍然有效,您可以选择使用 autorandr。有关更多信息,请参阅 此 StackOverflow

此文章或章节的 事实准确性 存在争议。

原因: 以下内容最初在 #X 资源下添加。阐明它如何与 GNOME 的信息集成,或者与上述信息集成。(在 Talk:HiDPI#GNOME 忽略 X 设置 中讨论)

由于 Gnome Settings Daemon 中的 xsettings 插件,GNOME 忽略了 X 设置,其中 DPI 设置是硬编码的。有一个关于 重新编译 Gnome Settings Daemon 的博客文章[死链接 2022-09-18 ⓘ]。在源代码文档中,提到了另一种设置 X 设置 DPI 的方法

您可以使用 gsettings,只需确保首先读取之前的设置并将其合并。只需使用此命令简单地设置它

$ gsettings set org.gnome.settings-daemon.plugins.xsettings overrides "{'Xft/DPI': <153600>}"

来自 README.xsettings

请注意,变体必须以通常的方式指定(用 <> 包裹)。

另请注意,上述示例中的 DPI 以英寸的 1024 分之一表示。

文本缩放

或者,除了更改显示缩放之外,您还可以单独缩放文本。这可以通过导航到 Gnome Tweaks 中的字体 > 缩放因子或使用 gsettings 来完成。请注意,文本缩放因子不必限于整数,例如

$ gsettings set org.gnome.desktop.interface text-scaling-factor 1.5
Xorg 下的 GTK+ 与 Gnome Shell 元素

此文章或章节已过时。

原因: 需要对 Gnome Shell 工具包进行部分重写,因为它自 2009 年以来似乎未维护。(在 Talk:HiDPI 中讨论)

如上所述调整文本缩放仅影响 GNOME 桌面的 GTK+ 元素。这应涵盖 Wayland 上的所有内容。但是,Xorg 会话的用户可能会发现他们需要在 HiDPI 环境中进行进一步调整,因为 GNOME Shell UI(包括顶部栏、dock、应用程序菜单等)单独依赖于 St[死链接 2021-11-11 ⓘ] 工具包。请注意,这是一个长期存在的问题,补丁 已合并并可用于 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 应用程序。

注意: Plasma 5.27 放弃 使用 GDK_SCALE/GDK_DPI_SCALE 变量,并 切换Xsettingsd。应安装它以使 GTK 应用程序的缩放工作。或者,您可以按照 #GDK 3 (GTK 3) 中的描述手动设置这些变量。

要一起调整字体、小部件和图标缩放

  1. 系统设置 > 显示和监视器 > 显示配置 > 全局缩放
  2. 将滑块拖动到所需大小
  3. 重启以使设置生效
注意: 如果您使用的是 xorg,并且全局缩放已设置但未在重启后应用于 Qt 应用程序,请检查 ~/.Xresources 中是否设置了 xft.dpi。如果是,则删除该变量并再次调整全局缩放可能会生效。

但是,使用 X11 会话,Plasma 默认情况下会忽略 Qt 缩放设置,这会影响面板和其他桌面元素。要使 Plasma 尊重 Qt 设置,设置 PLASMA_USE_QT_SCALING=1

光标大小

要调整光标大小

  1. 系统设置 > 外观 > 光标 > 大小

字体缩放

要仅调整字体缩放

  1. 系统设置 > 外观 > 字体
  2. 选中“强制字体 DPI”并将 DPI 级别调整为所需值。此设置应立即对新启动的应用程序生效。您必须注销并重新登录才能使其在 Plasma 桌面生效。

图标缩放

要仅调整图标缩放

  1. 系统设置 > 外观 > 图标 > 高级
  2. 为列出的每个类别选择所需的图标大小。这应立即生效。

面板缩放

要仅调整面板缩放

  1. 右键单击面板,选择进入编辑模式,然后手动调整面板高度

Xwayland

从 Plasma 5.26 开始,可以在系统设置 > 显示和监视器 > 显示配置页面的底部选择 Xwayland 缩放方法。

在“由系统缩放”模式下,X 应用程序将以 1x 渲染,然后由 KDE 放大(缩放)。这适用于所有应用程序,但会因放大而导致模糊。

在“自行应用缩放”模式下,X 应用程序必须以适当的大小自行渲染。这将避免模糊,但 DPI 感知不足的应用程序将以 1x 比例自行渲染,因此会显得很小。

有关详细信息,请参阅此 博客文章

Xfce

Xfce 支持 HiDPI 缩放,可以使用设置管理器启用

  1. 转到设置管理器 > 外观 > 设置 > 窗口缩放并选择 2 作为缩放因子。
  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)

  1. 转到设置管理器 > 外观 > 字体 > 自定义 DPI 设置,并将 96 更改为 192
  2. 设置 环境变量 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 的整数倍通常效果最佳,例如,200% 缩放时为 192。

确保在 X 启动时正确加载设置,例如在您的 ~/.xinitrc 中使用 xrdb -merge ~/.Xresources(有关更多信息,请参阅 Xresources)。

这将使字体在大多数工具包和应用程序中正确渲染,但这不会影响图标大小等内容!同时设置 Xft.dpi 和工具包缩放(例如 GDK_SCALE)可能会导致某些程序(如 firefox)中的界面元素比预期的大得多。

X 服务器

此文章或章节的 事实准确性 存在争议。

原因: libxft 是一个字体渲染接口库Xft.dpi 设置并非旨在被其他应用程序滥用。另一方面,xorg.conf 值应该影响所有内容。(在 Talk:HiDPI 中讨论)

某些程序可能仍然解释 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

此示例使用不准确的尺寸(423 毫米 x 238 毫米,即使 Dell XPS 9530 的尺寸为 346 毫米 x 194 毫米)以获得 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=0QT_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)

注意:#X 资源 部分所述,如果您将 xft.dpi 设置为更大的 dpi,它将使其他比例大于平常,包括 GDK。

设置 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 下,目前无法缩放图标大小,除非应用程序显式实现了一种方法来执行此操作。请参阅错误报告 #4528。如果您需要此功能,请尽可能使用 Qt。

GTK 2

工具包本身不支持 UI 元素的缩放,但是可以使用 themix-full-gitAUR 生成具有为 HiDPI 显示器预先缩放元素的 主题。

Electron

Electron 应用程序(例如 slack-desktopAUR, signal-desktop 等)可以通过向 .desktop 文件添加 --force-device-scale-factor 标志来配置为使用自定义缩放值。这通常位于 /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

FLTK 1.3,Arch Linux 中提供的默认 FLTK 版本,不支持分辨率缩放。当应用程序开始使用 FLTK 1.4 时,将支持分辨率缩放。

启动管理器

GRUB

降低帧缓冲分辨率

为帧缓冲区设置较低的分辨率,如 GRUB/技巧和窍门#设置帧缓冲分辨率 中所述。

更改 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/技巧和诀窍#背景图片和位图字体 中所示。

GRUB_FONT="/boot/grubfont.pf2"
注意: 如果使用了 GRUB_THEME,它会覆盖 GRUB_FONT

最后,重新生成主配置文件

提示: 字体大小也可以使用 GUI 工具 grub-customizer 进行更改。

systemd-boot

通过 console-mode 为控制台设置较低的分辨率,如 systemd-boot#Loader 配置loader.conf(5) § OPTIONS 中所述。

应用程序

如果您正在运行 Wayland 会话,但应用程序通过 Xwayland 运行(要么是因为它本身不支持 Wayland,要么是因为它默认使用 X11),即使应用程序支持 HiDPI,您仍然可能会遇到字体和界面模糊的问题。请参阅 此错误报告。另请参阅 Wayland#以视觉方式检测 Xwayland 应用程序

浏览器

Firefox

Firefox 应该使用 #GDK 3 (GTK 3) 设置。但是,建议的 GDK_SCALE 建议并不能始终如一地缩放整个 Firefox,并且不适用于小数值(例如,对于 1080p 14 英寸笔记本电脑,缩放因子为 158DPI/96DPI = 1.65)。您可能想要改用 GDK_DPI_SCALE。另一种选择是在 #X Resources 中使用设置,因为 Firefox 应该尊重那里定义的 Xft.dpi 值,这样可以避免在许多设置中使用 Firefox 特定的设置。

要覆盖这些设置,请打开 Firefox 高级首选项页面 (about:config),添加并设置参数 ui.textScaleFactor150(或找到更适合您的值;150 对于 Retina 屏幕来说是一个不错的选择)。您可能还需要编辑常规首选项中的缩放级别,例如 120%。这并不能始终如一地缩放整个 Firefox:为此编辑 layout.css.devPixelsPerPx,但截至 Firefox 103,它可能无法按预期工作。

如果 Firefox 没有缩放字体,您可能需要创建 userChrome.css 并向其中添加适当的样式。有关 userChrome.css 的更多信息,请访问 mozillaZine。从 Firefox 69 开始,除非用户设置了首选项,否则默认情况下不会加载 userChrome.cssuserContent.css 文件。打开 Firefox 高级首选项页面 (about:config) 并将参数 toolkit.legacyUserProfileCustomizations.stylesheets 设置为 True,然后重启 Firefox 以应用更改。

~/.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;
}

如果您将 HiDPI 显示器(如 Retina 显示器)与另一个显示器一起使用,则可以使用 ffreszoom 附加组件,如果它检测到您正在使用大型显示器,它将调整页面缩放(缩放级别和阈值是可配置的)。目前不支持从扩展程序修改内部 CSS DPI 设置 [7]

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

如果您将 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 设置(在 KDE 中:强制字体 DPI 设置)自动检测 DPI。

Gimp 2.10

要修复工具栏图标大小,请更新首选项 > 界面 > 图标主题 > 自定义图标大小huge 或其他值。

如果菜单字体仍然太小,您可以通过将现有主题从 /usr/share/gimp/2.0/themes/ 复制到 ~/.config/GIMP/2.10/themes/ 并将 gtkrc 中的 gtk-font-namefont_name 更改为更大的字体(如 Sans 30)来更新现有主题。然后从首选项 > 界面 > 主题中选择新主题。复制时,请确保将新目录重命名为与原始名称不同的名称(例如 Dark > DarkHighDPI)。

您也可以尝试使用 gimp-hidpi(安装说明已过时,指的是 2.8 版本,在 Gimp 2.10 中,主题应安装到 ~/.config/GIMP/2.10/themes/ 中)

在最新版本的 gimp-develAUR 上,Wayland 和 HiDPI 都得到完全支持。可以从首选项 > 界面 > 图标主题/显示分别缩放图标和文本。

Inkscape

要将图标缩放到“可用”大小,请转到首选项 > 界面并将图标大小设置为大或更大[8][9]

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=2GDK_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 应用程序混合使用 JavaFXAWT/Swing(通过 javafx.embed.swing.JFXPanel)。在这种情况下,AWT/Swing 的设置也会影响 JavaFX,并且设置 -Dglass.gtk.uiScale 将不起作用。

JetBrains IDE

在 Wayland 上,自 2024.2 版本起,实验性地支持带小数值缩放的 HiDPI。Wayland 支持预览可以通过将 -Dawt.toolkit.name=WLToolkit 添加到 VM 选项(帮助 > 编辑自定义 VM 选项)来启用。

JetBrains 产品(IntelliJ IDEA 和其他 IDE)支持两种 HiDPI 模式(JRE 管理和 IDE 管理)。用于确定系统缩放比例的顺序在 [10] 中有详细记录。

  1. Java 属性 – -Dsun.java2d.uiScale
  2. gsettings(1)ubuntu.user-interface/scale-factororg.gnome.desktop.interface/scaling-factor
  3. GDK_SCALEGDK_DPI_SCALE
  4. XresourcesXft.dpi
  5. 1.0

对于故障排除,请通过 搜索任何位置 “Shift 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

可以使用 AWT/Swing 解决方案为 HiDPI 显示器缩放 Maple。但是,必须将其添加到 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 允许设置缩放因子[11]

>> s = settings;s.matlab.desktop.DisplayScaleFactor
>> s.matlab.desktop.DisplayScaleFactor.PersonalValue = 2

设置在 MATLAB 重启后生效。

如果您需要频繁更改缩放比例,这可能会变得很繁琐。为了简化此操作,请考虑使用以下脚本

~/bin/matlab-scale
#!/bin/sh
exec matlab -r "s = settings;s.matlab.desktop.DisplayScaleFactor.PersonalValue=$1;quit" -nodesktop -nosplash

要将显示缩放比例更改为 3

$ matlab-scale 3

Mono 应用程序

根据 [12][死链接 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 属性。[13]

编辑器字体大小可以从工具 > 选项 > 字体和颜色控制。

输出窗口字体大小可以从工具 > 选项 > 其他 > 输出控制

OBS Studio

OBS 29 支持 HiDPI 设置,无需任何额外配置。

对于旧版本的 OBS,建议设置环境变量 QT_AUTO_SCREEN_SCALE_FACTOR=0 以禁用 Qt 的 hi-dpi 迁移模式 并安装 Yami 主题。请勿将 Yami 主题与 OBS 29 或更高版本一起使用,因为它不再必要,并且会导致错误行为。

Rofi

Rofi 默认为 96 DPI,并且仅依赖于其自身的配置

~/.config/rofi/config.rasi
configuration {
    …
    dpi: 150;
    …
}

Skype

Linux 版 Skype(skypeforlinux-binAUR 软件包)使用 #GDK 3 (GTK 3)

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[14] 截至 2023 年 6 月的 UI 大修,此参数还支持非整数缩放因子,例如 1.25

非官方

可以安装 HiDPI-Steam-Skin 以增加界面字体大小。虽然不完美,但确实提高了可用性。

注意: HiDPI 皮肤的 README 列出了放置皮肤的几个可能位置。可以通过是否存在名为 skins_readme.txt 的文件来识别这些位置中的正确文件夹。

MetroSkin 非官方补丁 也有助于 Linux 上 Steam 的 HiDPI。

Sublime Text 3

Sublime Text 3 完全支持显示缩放。转到首选项 > 设置 > 用户设置并将 "ui_scale": 2.0 添加到您的设置中。

Thunderbird

参见 #Firefox。要访问 about:config,请转到编辑 > 首选项 > 高级 > 配置编辑器

VirtualBox

注意: 这仅适用于启用缩放的 KDE。

VirtualBox 也将系统范围的缩放应用于虚拟机监视器,这会根据您的缩放因子降低虚拟机内的最大分辨率(参见 [15])。

可以通过计算缩放因子的倒数并手动为 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 [16])。如果首选使用 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

不支持的应用程序,通过网络层

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 中已经支持为不同的显示器设置不同的缩放因子。

侧显示器

一种解决方法是使用 xrandrscale 选项。要使非 HiDPI 显示器(在 DP1 上)位于内部 HiDPI 显示器 (eDP1) 的右侧,可以运行

$ xrandr --output eDP-1 --auto --output DP-1 --auto --scale 2x2 --right-of eDP-1

当扩展到内部显示器上方时,您可能会在外部显示器上看到内部显示器的一部分。在这种情况下,请手动指定位置。

您可以调整显示器设置上的 sharpness 参数,以调整缩放引入的模糊级别。

注意
  • 上述使用 --scale 2x2 的解决方案在某些 NVIDIA 卡上不起作用。目前没有可用的解决方案。[17] 通过在 CurrentMetaMode 上配置 ForceFullCompositionPipeline=On(通过 nvidia-settings)存在潜在的解决方法。有关更多信息,请参阅 [18]
  • 如果您正在使用 modesetting 驱动程序,您将遇到鼠标闪烁。这可以通过将非缩放屏幕缩放 0.9999x0.9999 来解决。

多个外部显示器

在缩放多个 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 参数,以调整缩放引入的模糊级别。

工具

有几个工具可以自动执行上述命令。

Linux 控制台 (tty)

内核字体

Linux 控制台 根据显示器的垂直和水平像素计数[20](无论其物理尺寸如何)将字体更改为 TER16x32(基于 terminus-font[19] 中的 ter-i32b)。如果您的显示器未被识别为 HiDPI,则可以更改默认字体。在这种情况下,请在内核命令行中指定 fbcon=font:TER16x32。在 Linux 6.8 及更早版本中,控制台字体的限制为 32*32。从 Linux 6.9 开始,控制台字体的最大尺寸增加到 64(宽度)*128(高度)[21]

内核外部字体 (tty)

kbd 软件包中最大的字体是 latarcyrheb-sun32solar24x32。其他软件包(如 terminus-font)包含更多替代方案,例如 ter-132n(普通)和 ter-132b(粗体)。有关配置详细信息,请参阅 Linux 控制台#字体,特别是有关在早期 userspace 启动序列期间应用字体设置的信息,请参阅 Linux 控制台#持久配置

更改字体后,当更改为其他虚拟控制台 (tty26) 时,字体通常会变得乱码且无法读取。要解决此问题,您可以为 KMS 强制指定模式,例如 video=2560x1600@60(替换为您的 HiDPI 显示器的原生分辨率),然后重启。使用小分辨率会使文本看起来更大,但也更像素化。

通过 UEFI 启动的用户可能会遇到控制台和 引导加载程序 被限制为低分辨率的情况,即使已设置正确的 KMS 设置。这可能是由 UEFI 设置中启用的传统/BIOS 启动引起的。禁用传统启动以绕过兼容性层应允许系统以正确的分辨率启动。

现代 HiDPI 支持 (kmscon)

对于真正的 HiDPI 支持,请参阅 KMSCON 而不是更改 tty 中的字体大小。

另请参阅