如何确定哪些实体更改了 Xorg DPI 设置?

如何确定哪些实体更改了 Xorg DPI 设置?

我已经安装了 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),要么做其他事情来避免这种不当行为。

相关内容