Como determinar qual entidade altera as configurações de DPI do Xorg?

Como determinar qual entidade altera as configurações de DPI do Xorg?

Instalei o Xubuntu 19.04 e, para levar em conta a resolução da tela do meu laptop, /etc/lightdm/lightdm.confadicionei a linha

xserver-command=X -dpi 166

O resultado é que o painel XFCE, terminal e outros programas GTK2 e GTK3 assumem os tamanhos de fonte corretos (os mesmos como se eu tivesse definidoConfiguração de DPI personalizadaemAparênciaFontespara 166), mas todos os outros como, por exemplo, Yakuake ainda veem 96 DPI. Além disso, se eu tentar xdpyinfo, obtenho estes 96 DPI:

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

Além disso, se eu marcar e desmarcar novamente oConfiguração de DPI personalizadaopção, as fontes também diminuem no XFCE (aparentemente, o DPI é consultado novamente no servidor X).

Portanto, suspeito que, durante a inicialização da sessão, alguma entidade altere a configuração de DPI da tela como se estivesse executando xrandr --dpi 96. Se eu executar manualmente xrandr --dpi 166, os programas começarão a se comportar corretamente.

Eu gostaria de descobrir o que exatamente a entidade está fazendo isso, para corrigir isso no núcleo, em vez de adicionar soluções alternativas pós-inicialização. Como posso encontrá-lo?

Responder1

Graças aos comentários de @mosvy, descobri que o culpado é xfsettingsd. Em particular, a suaxfce_displays_helper_normalize_crtcA função contém esta escolha arbitrária codificada de 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;

Depois de eliminar essa função no binário, substituindo seu primeiro byte por 0xC3(instrução x86/x86_64 RET), não tenho mais 96 DPI forçados sobre mim.

Porém, esta não é uma solução totalmente de longo prazo, porque uma atualização pode sobrescrever esse arquivo, então tenho que manter xfce4-settingso pacote (by apt-mark hold xfce4-settings) ou fazer outra coisa para evitar esse comportamento incorreto.

informação relacionada