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パッケージ (by apt-mark hold xfce4-settings) を保持するか、この誤動作を回避するために何か他の操作を行う必要があります。

関連情報