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패키지를 유지하거나(pass apt-mark hold xfce4-settings) 이러한 오작동을 방지하기 위해 다른 작업을 수행해야 합니다.

관련 정보