Linux
如何確定哪些實體更改了 Xorg DPI 設置?
我已經安裝了 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
包(byapt-mark hold xfce4-settings
),要麼做其他事情來避免這種不當行為。