![谁在设置 Xresource Xft.dpi?](https://linux22.com/image/117080/%E8%B0%81%E5%9C%A8%E8%AE%BE%E7%BD%AE%20Xresource%20Xft.dpi%EF%BC%9F.png)
我们最近收到了配备 2160p 显示屏的新笔记本电脑。我在收到它时安装了 Unity 桌面的 Ubuntu 16.04。我已经安装并使用了 Xfce 4,但保留了 Unity 问候语(因为很漂亮)。
我完全预计在高 DPI 显示屏上会出现字体缩放问题,但某些因素已将 Xresource 设置Xft.dpi
为 192,而不是典型的 96。几乎所有应用程序都会采用此设置,使得内部显示屏大部分可用。十分之十,对吗?
嗯,不,因为我不知道这是在哪里设置的。 Xfce 的外观面板声称 DPI 是 96。 dconf
它们存在的变量也显示 96。 xdpyinfo
还说它是 96。 Xorg.0.log
有一条关于 DPI 的消息,并说它是 96。 lightdm.conf
(Unity 问候语的配置文件)显示没有尝试更改它。并xrandr
报告身份转换矩阵(无缩放)。
我怀疑 GNOME 或 Unity 问候语是罪魁祸首,因为问候语一开始是在 Flyspeck 3 中渲染的,但过了一会儿又重新调整了大小。但我无法弄清楚它是在哪里被告知执行此操作的,或者它如何保留到桌面会话。
我的目标是插入外部 1080p 显示器并调整 DPI,使两个显示器都清晰可见。但如果我与其他试图在我背后这样做的人作斗争,我就无法有效地做到这一点。
欢迎所有线索。
系统信息
- 乌班图16.04.3
- 统一7.4.0+16.04.20160906-0ubuntu1
- xorg 1:7.7+13ubuntu3
- xfce 4.12.2
答案1
我相信这个问题存在的根本原因可以从https://gitlab.freedesktop.org/xorg/xserver/-/issues/509和https://bugzilla.gnome.org/show_bug.cgi?id=757142。
v3.17 中的 GTK在不需要的Xft.dpi: 96
环境中强加Xft.dpi
,否则无效。 Gnome 开发人员拒绝恢复强制措施,而 Xorg 开发人员也不愿意为 Gnome 强制措施提供解决方法。
*在我提请他们注意这个问题后不久,SUSE 开发人员明智地恢复了强制措施。切换到 *SUSE 或任何具有相同功能的发行版都可以解决该问题。
我相信 Debian(至少运行 TDE 和 IceWM)和 Ubuntu(至少运行 TDE 和 IceWM)也做到了,所以可能还有其他发行版。 Mint(至少运行 XFCE)显然还没有,Fedora 也肯定没有,因为它是 Gnome 的旗舰产品,即使不是第一个切换到 3.17 的,也是第一批切换到 3.17 的。简而言之,我相信最基本的设置是谁做的答案就埋藏在gdk/x11/gdkxftdefaults.c
。
答案2
显然 Gnome-settings-daemon 更改了 Xft.dpi。
我/usr/lib/gsd-xsettings
从 ~/.xinitrc 执行此操作。我不使用 Gnome,但我需要配置各种 GTK 应用程序,例如不闪烁光标,这就是我运行守护程序的原因。 (我也可以编辑~/.config/gtk-3.0/settings.ini
)
我刚刚更改了它,所以我运行 xrdb后启动设置守护进程。
我可能不理解这个问题的一些术语,但这也许会有用。我想您正在运行的软件之一正在执行 gsd-xsettings。
这里是更改 Xft.dpi 属性的代码段:
$ grep -n Xft.dpi gnome-settings-daemon/plugins/xsettings/gsd-xsettings-manager.c -2
852- g_debug("xft_settings_set_xresources: orig res '%s'", add_string->str);
853-
854: update_property (add_string, "Xft.dpi",
855- g_ascii_dtostr (dpibuf, sizeof (dpibuf), (double) settings->scaled_dpi / 1024.0));
856- update_property (add_string, "Xft.antialias",
该文件的顶部详细解释了为什么该软件默认为 96 DPI。大概我可以配置一些东西来设置X设置“Xft/DPI”的值,然后 GTK 将使用我喜欢的值,而不是用“默认值”96 覆盖我在 ~/.Xdefaults 中配置的值。
答案3
我已经部分弄清楚了。 @derobert 是正确的;该设置是 Unity 问候语留下的。
我创建了两个虚拟用户帐户来进行试验。 Unity 问候语以 96 DPI 开始,然后以 192 DPI 重新绘制。我通过一个新创建的虚拟用户登录到 Unity 会话。桌面立即翻转回 96 DPI。各种控制面板还报告了 96 DPI。因此 Unity 似乎强制进行该设置。
我与另一个虚拟用户一起登录到 Xfce 会话。所有控制面板均报告 96 DPI。然而,所有正在运行的程序报告并使用的 DPIxrdb -query
仍然为 192,大概是 Unity 问候语留下的。但是立即的我修改了 Xfce 外观控制面板中的 DPI 设置,整个桌面翻转到该 DPI 值并保持在那里。我的猜测是,在您触摸 DPI 值之前,该设置不在用户的 xfconf 变量中,如果它不存在,则在登录时不会显式设置它。
所以看起来 Xfce 有一个错误——要么Xft.dpi
在启动时不检查当前值,要么不强制它达到预期的默认值。
我仍然不明白为什么 Unity 问候语首先切换到 192 DPI。