我已经安装了 Xubuntu 19.04,并且考虑到我的笔记本电脑的屏幕分辨率,/etc/lightdm/lightdm.conf
我添加了以下行
xserver-command=X -dpi 166
结果是 XFCE 面板、终端和其他 GTK2 和 GTK3 程序采用正确的字体大小(就像我设置的一样)自定义 DPI 设置在外貌→字体到 166),但所有其他人(例如 Yakuake)仍然看到 96 DPI。此外,如果我尝试xdpyinfo
,我确实会得到 96 DPI:
$ xdpyinfo | grep dot
resolution: 96x96 dots per inch
另外,如果我勾选并取消勾选自定义 DPI 设置选项,字体在 XFCE 中也会缩小(显然,DPI 从 X 服务器重新查询)。
所以我怀疑,在会话启动期间,某些实体会更改屏幕 DPI 设置,就像通过运行xrandr --dpi 96
.如果我手动运行xrandr --dpi 166
,程序开始正常运行。
我想找出实体到底在做什么,以便从核心解决这个问题,而不是添加启动后的解决方法。我怎样才能找到它?
答案1
感谢@mosvy 的评论,我发现罪魁祸首是xfsettingsd
.特别是,其xfce_displays_helper_normalize_crtc
函数包含 96 DPI 的任意硬编码选择:
/* The 'physical size' of an X screen is meaningless if that screen
* can consist of many monitors. So just pick a size that make the
* dpi 96.
*
* Firefox and Evince apparently believe what X tells them.
*/
helper->mm_width = (helper->width / 96.0) * 25.4 + 0.5;
helper->mm_height = (helper->height / 96.0) * 25.4 + 0.5;
0xC3
在我通过用(x86/x86_64指令)替换它的第一个字节来在二进制文件中删除这个函数之后RET
,我不再强制使用 96 DPI。
但这不是一个完全长期的解决方案,因为升级可能会覆盖此文件,所以我要么必须保留xfce4-settings
包(通过apt-mark hold xfce4-settings
),要么做其他事情来避免这种不当行为。