![Как определить, какая сущность изменяет настройки Xorg DPI?](https://rvso.com/image/169420/%D0%9A%D0%B0%D0%BA%20%D0%BE%D0%BF%D1%80%D0%B5%D0%B4%D0%B5%D0%BB%D0%B8%D1%82%D1%8C%2C%20%D0%BA%D0%B0%D0%BA%D0%B0%D1%8F%20%D1%81%D1%83%D1%89%D0%BD%D0%BE%D1%81%D1%82%D1%8C%20%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D1%8F%D0%B5%D1%82%20%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B8%20Xorg%20DPI%3F.png)
Я установил 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
), либо сделать что-то еще, чтобы избежать этого некорректного поведения.