Linux

如何確定哪些實體更改了 Xorg DPI 設置?

  • March 19, 2020

我已經安裝了 Xubuntu 19.04,並且考慮到我筆記型電腦的螢幕解析度,/etc/lightdm/lightdm.conf我添加了這一行

xserver-command=X -dpi 166

結果是 XFCE 面板、終端和其他 GTK2 和 GTK3 程序採用正確的字型大小(就像我在外觀字型中將**自定義 DPI 設置設置為 166 一樣),但所有其他的,例如 Yakuake 仍然看到 96 DPI . 此外,如果我嘗試,我會得到這個 96 DPI:xdpyinfo

$ xdpyinfo | grep dot
 resolution:    96x96 dots per inch

此外,如果我勾選並取消勾選自定義 DPI 設置選項,字型也會在 XFCE 中縮小(顯然,從 X 伺服器重新查詢 DPI)。

所以我懷疑,在會話啟動期間,某些實體會更改螢幕 DPI 設置,就好像通過執行xrandr --dpi 96. 如果我手動執行xrandr --dpi 166,程序開始正常執行。

我想找出究竟是什麼實體在做這件事,以便在核心解決這個問題,而不是添加啟動後的解決方法。我怎樣才能找到它?

感謝@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包(by apt-mark hold xfce4-settings),要麼做其他事情來避免這種不當行為。

引用自:https://unix.stackexchange.com/questions/573714