适用于Linux的一些HiDPI技巧

2021-01-31 02:53:34

作为该切换的一部分,我需要配置Linux环境的某些部分(最初是Ubuntu的原始版本,但现在是i3,具有大量自定义的用户空间),才能在HiDPI显示器上正确运行。

这篇文章将记录我应用的大多数更改。希望其他人会发现它对自己的HiDPI设置有用。

事实证明,这里有一个(几乎)一站式的位置,用于配置X11应用程序的默认DPI:Xft.dpi设置。

有很多方法可以配置X11,但是我个人使用〜/ .Xresources文件:

在我的系统上,〜/ .Xresources通过我从未配置过的魔术自动加载到X资源数据库中。但是,如果您没有(或使用其他资源文件),则始终可以告诉i3(或您选择的WM)使用xrdb显式加载它。

有了这个,大约90%的应用程序(包括基于GTK的应用程序,如Firefox)可以正确缩放,并且可以使用,而无需更改任何字体或自定义缩放比例。单行还不错!

Spotify的Linux应用程序是CEFshell。由于我不清楚的原因,它不尊重Xft.dpi,而普通的Chromium(通过snap或apt)却尊重Xft.dpi。

在这一点上,我很清楚DPI的小数形式可以在尽可能少的位置设置,以避免重复。因此,上面的janus.fractionalDpi和这个小的Spotify包装器:

#查看上面链接的实际脚本,了解一些程序发现愚蠢real_spotify = / snap / bin / spotify#从X资源DB dpi = $(xrdb -query | grep" $(hostname)中获取正确的分数DPI。分数Dpi" | cut -f2)" $ {real_spotify}" --force-device-scale-factor =" $ {dpi}" " $ {@}"

我将Sublime Text 3用作主要编辑器。据我所知,它既不使用GTK也不使用Qt(或任何其他开源GUI框架),这可能就是为什么它不尊重Xft.dpi的原因。

为了使Sublime Text正确缩放,我必须在用户首选项(〜/ .config / sublime-text-3 / Preferences.sublime-settings)中将ui_scale设置为适当的分数DPI:

缩放UI时,Sublime Text的输入明显滞后。它虽然不那么笨拙,却无法使用,但即使您对延迟不敏感(我也不是),也绝对可以注意到。

在Sublime Text和其他窗口之间移动会在视频播放期间引起明显的卡顿/打ic。我还没有研究过X事件,但是我猜想它有一些悲观(和串行)的XFlush或XSync,它们在较大的窗口缓冲区上需要花费一些时间。较小的窗口(浮动窗口或固定窗口)不会发生这种情况。

我最近没有使用过它,但是我曾经使用OBS来流媒体处理开源项目。

切换显示器时,我注意到场景的嵌入式预览窗口已停止工作。 OBS本身仍然可以正常运行,并且单独的预览窗口仍然有效,但是嵌入式预览始终填充有黑色像素。

经过一番梳理之后,我发现了一个Qt环境变量来“修复”它:

我仍然不明白为什么要修复此问题,但是现在我的OBS已正确缩放并嵌入了功能预览。我还将此修复程序发布到OBS论坛。

我使用feh作为图像查看器。默认情况下,它似乎使用的位图字体在HiDPI显示器上非常小。

为了修复它,我默认修改了主题以使用发行版提供的Ubuntu Roman-face字体in14pt。

我还没有弄清楚的一件事:当我用feh打开一些高分辨率的图像时,它们有时会向右移动,其中应包含一些图像的透明像素。在图像窗口内单击并拖动会导致图像重新正确渲染,就像调整窗口大小一样。没什么大不了的,但是有点烦人。

它不需要任何特定于HiDPI的配置,但我借此机会使这些通知在这些较新的显示器上更具可读性。

我的新显示器分别比以前的显示器更大,并且密度更大,这使鼠标感觉迟钝。我最初用xset配置了鼠标加速,但是在某些时候,我的系统切换到了libinput和基于libinput的输入显然不再使用xset了(或者从不这样做)。叹。

解决的办法是改用xinput,使用设备的符号名称或XID,并进行设置控制。例如,这是我用来将鼠标的加速度设置为最大值(1.0)的方法:

当然,您的设备和设置名称可能会有所不同,其值范围也可能有所不同(我的碰巧是0.0到1.0)。您可以单独使用xinput列出设备的名称和XID。 xinput list-props< XID或名称>可用于转储特定设备的属性及其当前值。

登录时,我使用i3的布局保存/恢复功能自动加载所有工作区及其应用程序。

这些布局通过i3-save-tree以(宽松的)JSON格式存储,并包含硬编码的坐标。要为新显示器更新它们,我只需要在新显示器上重新创建每个工作区并将其转储:

HexChat的配置文件在GUI中的每个子窗格中都包含单独的偏移量,这意味着,如果您更改显示器尺寸,则损坏严重。我无法弄清楚如何解决它们,因此最终删除了我的主〜/ .config / hexchat / hexchat.conf并从内存中重新创建了我喜欢的布局。 YMMV。

我不需要对系统图标大小进行任何更改,这可能是因为在i3正常使用期间实际上看到的图标很少。再次,YMMV。

从一组3个FHD监视器切换到两个4K HiDPI监视器是相对容易的。 毫无疑问,我遇到的问题主要是我使用的少数专有应用程序需要以自己的方式来获取DPI信息-其他所有问题都是bug(OBS + Qt)或更一般的重新配置问题。