LINUX.ORG.RU

Почему xorg сообщает неверные значения DPI и размеров экрана?

 , ,


0

3

xrandr сообщает верные значения физического размера экрана:

$ xrandr | grep mm
eDP1 connected primary 1920x1080+0+0 (normal left inverted right x axis y axis) 380mm x 210mm

А здесь значения неверные:

$ xdpyinfo | grep dimen -A1
  dimensions:    1920x1080 pixels (508x285 millimeters)
  resolution:    96x96 dots per inch

Тот dpi который сообщает xdpyinfo это dpi core протокола. Он был спроектирован на заре X11. Выкинуть его из core протокола невозможно, не сломав обратную совместимость протокола, поэтому его не выбросили. Но современные X11 клиенты им пользоваться не должны. Это было неудачное проектное решение, связанное с сервер-сайд шрифтами (которыми современные X11 клиенты тоже не пользуются). И привязан он не к монитору, а к скрину, потому что на заре X11 многомониторные конфигурации реализовывались как мультискрин.

Современные X11 клиенты пользуются dpi указанным в ресурсе Xft.dpi. Это проектное решение сделал тот же Кит Паккард когда разрабатывал библиотеку Xft для отрисовки клиентских шрифтов.

В целом это было правильное решение. Dpi это не механизм, а политика. X11 сервер исторически реализовывал механизмы, а не политики. Предполагалось, что политики будут реализованы в X11 клиентах, а именно в тулкитах. Xft.dpi был удачным решением в своё время. Один X11 клиент (приложение gnome settings) позволяло менять Xft.dpi на сервере, клиентские библиотеки (gtk, Xft) брали dpi с сервера, сервер просто хранил эту строчку как X11 ресурс. Таким образом политика была замкнута в клиентах.

Очень жаль, что при разработке расширения RANDR Кит Паккард не выработал предложения по «обновлению» этой политики. После добавления RANDR скрин стал состоять из нескольких мониторов. Было бы логично «обновить» политику, чтобы dpi каждого монитора хранился в отдельном ресурсе (скажем, Xft.randr-output-name.dpi). Вероятно Паккард надеялся что политика будет обновлена разработчиками gnome. Но разработчики gnome к тому времени уже сконцентрировались на wayland и заклеймили X11 словом legacy.

Никаких технических препятствий для поддержки mixed dpi в X11 нет. Mixed dpi это клиент-сайд фича. В этом и проблема. Основной тулкит (gtk) не будет разрабатывать эту фичу, потому что X11 это legacy с точки зрения gtk.

iliyap ★★★★★
()
Последнее исправление: iliyap (всего исправлений: 1)