如何確定哪些實體更改了 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),要么做其他事情來避免這種不當行為。

相關內容