我已經安裝了 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
),要么做其他事情來避免這種不當行為。