T470s 上 HiDPI 显示器在 openSUSE KDE 环境下的相关设置

购买 ThinkPad T470s 的时候选择了 2560×1440 分辨率的 WQHD 屏幕,结果发现在预装的 Windows 10 上字体和图标过大,估计是因为 Windows 默认以实际 DPI 来调整显示了。而在 Linux 滚动发行版 openSUSE Tumbleweed 的 KDE Plasma 桌面上默认的字体和图标又过小。于是折腾了很久才将 KDE 桌面环境上的显示相关设置调整到适合自己的情况。

目前我的系统环境为,

openSUSE Tumbleweed: 20170414
KDE Plasma: 5.9.4
Qt: 5.7.1
KDE Frameworks: 5.32.0
Kernel: 4.10.9

基本设置

基本的设置主要就 4 个方面:

  1. 调整字体的 DPI 到合适的值(「系统设置」->「字体」->「强制字体 DPI」)—— 我用了 144(相当于放大 144/96 = 1.5 倍)。
  2. 设置图形界面显示的放大倍率(「系统设置」->「显示和监视器」->「显示」->「缩放」)—— 我使用了默认的 1,不过很多界面会看着有些挤,需要打开后再次调整(拖放)界面大小,而且图标大小(「系统设置」->「图标」->「图标」->「高级」)也需要跟着调整;虽然 1.5 倍(似乎只能设置某些值,比如 1.5、2 之类的)更省事,但是有些问题,如,会导致,
    • 命令行(Konsole)里面出现莫名其妙的白线;
    • 闪烁的 I 型光标经常会变成并排的 2 个;
    • 在 KMail2 中,邮件显示的时候不会占满显示区域,而是以未经放大的形式显示在阅读窗格的一角。
  3. 调整任务栏的高度。
  4. 设置虚拟终端的字体大小,针对开机进入 RunLevel 3 命令行界面和图形界面使用 Ctrl+Alt+F1-6 进入的虚拟终端。(参考这里。)

这些设置多数都需要重启系统或者应用才能生效。

在 openSUSE Tumbleweed 的 KDE 桌面下,经过好多天的尝试,最后我只将 DPI 强制调整到 144,相当于比默认的 96 放大了 1.5 倍,文字和图标的大小都能接受。然后将任务栏的高度调到感觉最舒服。本来还后悔选了 HiDPI 的屏幕,应用了上面的设置之后就没再后悔了。因为 KDE Plasma 5 本身对 HiDPI 的支持就非常好。

这些主要参考了论坛里的这个帖子。虽然还看了很多其它的介绍,但是这个总结得比较简洁。

特殊情况

登录界面

启动系统后出现的登录界面并不响应「系统设置」里「强制字体 DPI」的配置。虽然这个界面显示得小些并不会有多大的妨碍,如果能配置一下还是比较好的。这里需要直接配置 sddm 的配置文件才行。

编辑 sddm 的配置文件 /etc/sddm.conf,在其中 [XDisplay] 那一节的最后加上下面的配置可以强制其使用 144 的 DPI,

ServerArguments=-nolisten tcp -dpi 144

实际上,上面的这条设置可以替代前面提到的「强制字体 DPI」的配置,但是有些应用却不买这个帐,比如 Firefox 的界面(网页没问题)。

Firefox

因为各种网页设计的方法不同,Firefox 在处理这些问题的时候还是有些缺陷的。除了前面提到的系统级配置之外,可能还需要调整 Firefox 内置的配置。

按照前面的基本设置下来之后,Firefox 的显示基本上看着很舒服了。但是也有些网站的字体设置过小,需要照顾到,比如在 Firefox 的「设置」->「内容」->「字体和色彩」里面将「高级」字体设置里面的「最小字体」尺寸设置合适,比如 14

但是也不能单方面只限制最小字体而忽视了有些网站放置相应文字的 HTML 容器的大小调整,否则可能会导致可点击的文字的可点击面过小。所以还需要考虑到界面(UI)内容(图标、按钮等)的放大。这就需要调整 Firefox 内部的一个设置项。在 Firefox 浏览器地址栏里输入 about:config 并回车,然后确认安全警告并继续,在新出现的搜索框里输入 layout.css.devPixelsPerPx 并将搜索到的该设置项的值改到合适,我选的是 1.6

外接显示器

外接显示器如果不是 HiDPI 的,那么显示的文字和图标就会太大了。或者说,主显示器如果与外接显示器的 DPI 相差太大,看起来就不会太舒服。虽然也可以有方法调整,但是试了很久,都有不少问题。具体可以看我在 openSUSE 论坛的帖子

网上也有很多关于这个问题的介绍和讨论,比如:

目前我的做法是主要参考 ArchLinux 上的方法使用 xrandr 调整外接显示器的缩放,但是平常不用,而是等到需要的时候才运行指令来调整它。外接显示器是 1920×1080 的(使用 HDMI 接口显示为 HDMI-2),放在主显示器(eDP-1)右边,使用 xrandr 的 scale 或者 panning 方法,缩放按照 1.5 倍计算。比如 panning 的方法(1920×1080 放大 1.5 倍就是 2880×1620 然后显示到 1920×1080 的显示器上),

xrandr --output eDP-1 --auto --output HDMI-2 --auto --panning 2880x1620+2560+0 --scale 1.5x1.5 --right-of eDP-1

为了方便,可以在 ~/.bashrc 中设置一个别名(比如用 setextdisp 来代替上一条指令),

$ echo "alias setextdisp='xrandr --output eDP-1 --auto --output HDMI-2 --auto --panning 2880x1620+2560+0 --scale 1.5x1.5 --right-of eDP-1'" >> $HOME/.bashrc

可以查看结果,上面写入的内容应该是在

$ cat $HOME/.bashrc

的结尾的地方。然后,需要用的时候直接在 Konsole 中运行 setextdisp 即可,不用输入一长串命令了。

两种方法都有些问题,比如主显示器中鼠标抖动等。

我主要是用外接显示器来运行远程桌面,因为 KRDC 远程桌面到 Windows 上之后因为服务器端的 DPI 还是默认的 96 而导致 KRDC 中的显示太小。这样一来就在放大的情况下表现完美了。

远程桌面与虚拟机

在上述基本设置下,目前还遇到两个问题一个跟 KRDC 远程桌面有关,一个跟 VirtualBox 虚拟机相关。

远程桌面

在使用远程桌面连接到办公室电脑之后,文字和图片都**太小**。虽然可以通过调整 Windows 的 DPI 来调节,可是办公室的显示器却只是普通屏,总是来回调 DPI 是不可接受的。凑巧的是,家里有个外界显示器不是 HiDPI 的,刚好它又因为系统设置的 144 DPI 而显示过大,这样两相抵消就正常了。

如果要在主显示器上显示正常大小的远程桌面,就需要用到 FreeRDP 的 smart-sizing 参数。用 KRDC 暂时是不行了。虽然 KRDC 的后台就是 FreeRDP,但是 KRDC 没有提供针对 smart-sizing 参数的设置。如果强行加上这个额外的参数,KRDC 无法正确处理。一个基本的带 smart-sizing 参数的 FreeRDP 的命令行指令如下,

$ xfreerdp /u:{用户名} /p:{密码} /v:{IP地址}:{端口} /size:1280x720 /smart-sizing:1920x1080 /bpp:24 /rfx /jpeg /jpeg-quality:60 /codec-cache:rfx /network:lan -wallpaper +clipboard +compression

这里 {} 的部分需要相应调整。该参数组合将服务器上 1280×720 的屏幕显示到本地,并放大到 1920×1080,相当于放大了 1.5 倍。缩小应该也没问题,但是我没有试过。

更新 2017-04-20:/rfx-mode 还是使用默认的 video 比较顺畅,从上面的指令中去掉了这个参数。

我对这些参数也是一知半解,可能还有优化的空间。参考资料在这里:

虚拟机

而另一个本机系统里的 VirtualBox 虚拟机里的 Windows 系统则可以通过直接设置 Windows 的 DPI 为 150 来解决。当然只是将它显示到主显示器上。但是也有缺点:似乎有些应用软件对这个 DPI 设置不是太敏感。

另一个方法就是保持系统默认的 96 DPI 不变,但是直接设置 VritualBox 提供的缩放(「设置」->「显示」->「缩放」),比如选择 150%。然后在客户机系统里到 「控制面板」->「外观与个性化」->「个性化」里面将鼠标指针调大。如果选用系统提供的最大号指针图标还是嫌小的话,那估计就只能安装特别的主题了。这样设置的缺点是客户机里的文本文字显示得没有前一种设置锐利。

也许还有其它的特殊情况,这个看来还将是个长期的问题。欢迎大家在评论区分享自己的设置经验。©

本文发表于水景一页。永久链接:<http://cnzhx.net/blog/t470s-hidpi-opensuse-kde-settings/>。转载请保留此信息及相应链接。

时间过去太久,评论已关闭。
如果您有话要说,请到讨论区留言并给出此文章链接。
谢谢您的理解 :-)