Как определить, какая сущность изменяет настройки Xorg DPI?

Как определить, какая сущность изменяет настройки Xorg DPI?

Я установил Xubuntu 19.04 и, чтобы учесть разрешение экрана моего ноутбука, /etc/lightdm/lightdm.confя добавил строку

xserver-command=X -dpi 166

В результате панель XFCE, терминал и другие программы GTK2 и GTK3 принимают правильные размеры шрифтов (такие же, как если бы я установилПользовательская настройка DPIвПоявлениеШрифтыдо 166), но все остальные, например, Якуаке, все еще видят 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), либо сделать что-то еще, чтобы избежать этого некорректного поведения.

Связанный контент