11
21
2020
11

HiDPI 配置记录

本文来自依云's Blog,转载请注明。

首先,我是用 X11 窗口系统的,不同屏幕分别设置肯定没戏。所以只好让笔记本电脑的屏幕迁就一下我的4K主屏啦,把笔记本屏幕缩放一下。算一下 scale 值:192 / 120 = 1.6。不是整数,会糊,可总比放大两倍的巨大界面要好。

xrandr --output eDP-1 --scale 1.6 --auto --output DP-2 --auto --pos 3072x0 --primary --fb 6912x2160

这里要注意的是,要指定--pos(或者--panning),不然会重叠;要指定--fb,不然鼠标可能会有部分区域去不了。

然后开始设置。本来我是尝试了一下 KDE 的,但因为我将在下一篇文章中写的原因而放弃,回到了 Awesome。不过也不是全无收获。我把 KDE 的配置方案拿过来用了。你想问怎么拿的?我 btrfs 的文件系统,做好快照再 rsync -n 对比一下它动了哪些文件就有了。

首先是 X11 的资源。在~/.Xresources里写上Xft.dpi: 192,然后xrdb -merge ~/.Xresources一下就好了。顺便再xrandr --dpi 192一下,听说有些程序会读这个。

然后是 GTK。GTK 2 就放弃吧,没办法。文字会按设置的 Xft.dpi 放大,图标啥的不会。GTk 3,要设置两个环境变量:

export GDK_SCALE=2 GDK_DPI_SCALE=0.5

前一个是把界面放大,后一个是把文字缩回去,因为文字已经按 Xft.dpi 放大过,不能再放大一次了。

再然后是 Qt。Qt4 早卸载干净了不用管。Qt5 嘛,也不用管。它自己会处理好。有个按不同屏幕缩放的环境变量QT_SCREEN_SCALE_FACTORS,效果跟 Windows 10 差不多的。但是我为了照顾其它程序已经把屏幕给 scale 过了,就不需要设置这个了。你要设置个QT_AUTO_SCREEN_SCALE_FACTOR=0也行,但这个是默认行为。

最后是个别的程序。

Telegram 直接在设置里关掉「默认界面缩放比例」并且设置缩放比例为 300% 就好了。我也不知道为什么,Telegram 默认的字总是很小。之前 120dpi 的时候我要 200% 缩放,现在 192dpi 需要 300% 缩放了。

YouTube,就是那个网站啦。它其实没什么显示上的问题,只是死活不会给我自动选择 1080p 以上的分辨率。经过仔细二分测试之后发现,把火狐的配置文件夹下的storage/default/https+++www.youtube.com目录删掉之后就好了。没发现删掉这个会有其它影响。

mpv 要修改配置文件,加上no-hidpi-window-scale参数,不然会把视频自动放大,4K视频一打开会只能看到四分之一的画面。加上这个参数,默认窗口大小时,一个视频里的像素会对应一个显示器上的像素,不大不小刚刚好。mpv 文档上说这是 OS X 系统上的默认行为,可我这是 Linux 桌面啊,你把别的平台上的习惯搬过来是几个意思?另外我加了个demuxer-readahead-secs = 20选项。我的大文件都在机械硬盘上,4K 码率又比较高,不多预读一点容易卡。

我的 qemu 之前使用的是-display gtk,也坏掉了。窗口那么大,虚拟机只用左下角那里四分之一的空间。spicy 也有问题,会告诉虚拟机只有 1080p。解决方法是 unset GDK_SCALE GDK_DPI_SCALE。它们在放大了自己的界面的同时,把显示的虚拟机的内容也给放大了,所以干脆叫它们别动。也没什么别的影响。

哦还有 Zoom。设置个QT_AUTO_SCREEN_SCALE_FACTOR=1似乎就好了?我试了一下QT_SCREEN_SCALE_FACTORS,会导致很怪异的行为。

以上解决了显示大小的问题,但我发现还有个问题:我的鼠标光标时大时小的……从 KDE 那边弄来几个设置之后就好了,而且主题也更加一致了呢。

首先是设置 xcursor 环境变量:

export XCURSOR_THEME=Vanilla-DMZ XCURSOR_SIZE=36

听说对应的 X 资源大家都不理睬,那我也就不设好了。

然后是 GTK 2 的~/.gtkrc-2.0文件里写上:

gtk-cursor-theme-name = "Vanilla-DMZ"
gtk-cursor-theme-size = 36

再接下来是 GTK 3 的~/.config/gtk-3.0/settings.ini

[Settings]
gtk-cursor-theme-name = Vanilla-DMZ
gtk-cursor-theme-size = 36

然后又没了。天知道为什么 Qt 那边啥都不干就好好的,GTK 却这么麻烦。

啊,你问这些环境变量在哪里设?我给写~/.xprofile里了。不过这还不够。有些 GUI 程序会由用户的 systemd启动(比如我的 Telegram 是由 systemd 启动的,为了在内存用得太多的时候自动重启),有些 GUI 程序会由 D-Bus 激活(比如 gnome-terminal)。这些是和登录会话分开的,所以要手动导入一下。以下是我的 .xprofile 中导入图形界面相关环境变量的部分:

_envs=(
  GDK_SCALE GDK_DPI_SCALE
  XCURSOR_THEME XCURSOR_SIZE
  XMODIFIERS QT_IM_MODULE GTK_IM_MODULE
  LIBVA_DRIVER_NAME GST_VAAPI_ALL_DRIVERS
)
dbus-update-activation-environment "${_envs[@]}"
systemctl --user import-environment "${_envs[@]}"

至于登录界面怎么办,我是在 lightdm 的 display-setup-script 里,跑了跑 xrandr,设置了一下 Xft.dpi 资源。环境变量啥的没动,反正用不上。当然你也可以去改~lightdm/.pam_environment来设环境变量,反正现在 Arch Linux 还是读它的。别的 dm 同理。

Category: Linux | Tags: screen linux hidpi 显示器 | Read Count: 106519
Alynx Zhou 说:
Nov 22, 2020 09:13:15 PM

用 4k 屏真的很麻烦……亲身体验 HiDPI 带来的烦恼远大于好处,HiDPI 能让字体更锐利只是锦上添花而不是雪中送炭,毕竟字体不用那么锐利也可以使用,但是程序字太小或者糊就很难用,特别特别是还有另一个 DPI 不一样的显示器,高分辨率就不再是令人舒适而是带来折磨了。所以我后来换成 27 寸的 2k 分辨率屏幕就是为了不用设置缩放……可能我以后只会考虑 34 寸以上的 4k 屏幕了吧。感觉小尺寸 + 高分辨率多少是苹果炒起来的一种华而不实的东西,或者可能我自己真的没这个需求。

Avatar_small
依云 说:
Nov 22, 2020 10:44:52 PM

可是 27 寸的 2k 分辨率还是和我的笔记本屏幕不一致呢……
其实在苹果推出 2x 屏幕的那个年代,原来的 96dpi 屏幕显示繁体真的是一团黑色。不过确实太高了又差别不大了。
现在的问题不是分辨率太低或者太高,而是多个屏幕需要得到大体相当的文字大小啦。

palytoxin 说:
Nov 23, 2020 04:03:12 PM

linux双屏幕就是很麻烦,我以为x11能处理的像mac一样顺滑,买了个thinkpad x1 4k的,外接显示直接放弃了。

Alynx Zhou 说:
Nov 26, 2020 06:25:31 PM

不一致是肯定的,但至少DPI没有差到一个需要100%缩放另一个需要200%缩放就行……我现在已经不追求字体一样大了,能看就行……

wzyboy 说:
Dec 15, 2020 06:10:22 AM

几年前曾经短暂用过一个笔记本是 200% 缩放、外接是 100% 缩放的 Arch Linux + i3wm,苦不堪言。当时查到说只有 Wayland 能解决问题。

最近用了一下 Windows + 4K + 150% 的组合,感觉屏幕细腻。打算买一个 4K 显示器在 Arch Linux + i3wm 里用,本来已经准备拥抱 i3wm + 4K + 150% 了,看到这篇文章又有点犹豫了。是不是还要坚守 2K + 100% 呢?

Alynx Zhou 说:
Dec 15, 2020 05:24:27 PM

如果你不能保证所有的屏幕都可以 150% 缩放并且看起来文字不会过大,那就不要 4K,否则就可以。

wzyboy 说:
Dec 15, 2020 08:58:33 PM

嗯,我已经下单了一个 2K 100% 的显示器。

Hacksign 说:
Dec 16, 2020 06:45:31 PM

话说
>> cat .Xresources
Xcursor.theme:ultra-flat-icons
Xcursor.size:48
之后, gtk的cursor大小倒是变了
但是鼠标一道QT程序里面之后, 就又变小了
怎么调整成和gtk的一致?

Avatar_small
依云 说:
Dec 16, 2020 07:59:44 PM

咦,你用环境变量来设置试试呢?我看到说有些程序不从 Xresources 读这个。

Hacksign 说:
Dec 17, 2020 12:32:37 PM

设置完环境变量后好了。。。

>> cat /etc/profile.d/cursor.sh
export XCURSOR_THEME=Vanilla-DMZ
export XCURSOR_SIZE=48

Junix 说:
Jul 25, 2022 12:13:08 PM

https://t.me/archlinuxcn_offtopic/4136839


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

| Theme: Aeros 2.0 by TheBuckmaker.com