Как X-сервер рассчитывает DPI?

9

Из Xfce Docs :

Если вы хотите переопределить значение DPI (точек на дюйм), рассчитанное X-сервером , вы можете установить флажок и использовать поле прокрутки, чтобы указать разрешение, которое будет использоваться при отображении шрифтов на экране.

Но как X-сервер делает его расчет? Какие предположения сделаны в процессе, и могут ли некоторые параметры быть переопределены?

Он может знать, сколько пикселей у меня на дисплее, но достаточно ли этого?

Алоис Махдал
источник

Ответы:

8

Насколько я знаю, начиная с версии 1.7, по xorg умолчанию используется96 dpi . Он ничего не вычисляет, если вы не укажете DisplaySizeчерез Xorgконфигурационные файлы. Кроме того, не полагайтесь на xdpyinfoвывод.
Мой ноутбук работает на Intel SandyBridge. Выдержка из моей Xorg.0.logновой установки Archlinux:

(==) intel(0): DPI set to (96, 96)

Бег

xdpyinfo | grep -E 'dimensions|resolution'

возвращает:

dimensions:    1600x900 pixels (423x238 millimeters)
resolution:    96x96 dots per inch

что далеко не так. Я знаю, что мой размер экрана равен 344x193мм, поэтому, очевидно, xdpyinfoвычисляет физический размер на основе разрешения в пикселях ( 1600x900) и значения по умолчанию 96 DPI. Если я добавлю

........
DisplaySize     344 193
........

в /etc/X11/xorg.conf.d/monitor.confи перезагрузите, Xorg.0.logправильно сообщает:

(**) intel(0): Display dimensions: (344, 193) mm
(**) intel(0): DPI set to (118, 118)

Однако xdpyinfo | grep -E 'dimensions|resolution'всегда возвращает:

dimensions:    1600x900 pixels (423x238 millimeters)
resolution:    96x96 dots per inch

Тем не менее, никаких визуальных изменений, поскольку я использую Gnome, а 96 DPIтакже жестко запрограммирован в gnome-settings-daemon. После исправления последнего я могу наслаждаться своим родным 118 DPI. Но даже после всего этого xdpyinfoвсе равно возвращается:

dimensions:    1600x900 pixels (423x238 millimeters)
resolution:    96x96 dots per inch
оборота don_crissti
источник
7

Как X-сервер рассчитывает DPI?

DPI X-сервера определяется следующим образом:

  1. Параметр -dpiкомандной строки имеет наивысший приоритет.
  2. Если это не используется, DisplaySizeнастройка в файле конфигурации X используется для получения DPI с учетом разрешения экрана.
  3. Если значение не DisplaySizeуказано, значения размера монитора из DDC используются для получения DPI с учетом разрешения экрана.
  4. Если DDC не указывает размер, по умолчанию используется 75 DPI.

Он может знать, сколько пикселей у меня на дисплее, но достаточно ли этого?

Нет, он знает не только размер виртуального экрана в пикселях, но (как правило) также физический размер дисплея в миллиметрах. Вы можете проверить размеры дисплея, выполнив следующие действия в окне терминала:

 ~ $ xdpyinfo | grep dimension
dimensions:    1366x768 pixels (361x203 millimeters)

Расчет, который выполняет ваш X-сервер, следующий:

  • 1366 пикселей, разделенные на 361 миллиметр, умноженные на 25,4 миллиметра на дюйм = 96,11191136 точек на дюйм (DPI).
  • 768 пикселей, деленные на 203 миллиметра, умноженные на 25,4 миллиметра на дюйм = 96,09458128 точек на дюйм.

Вы можете проверить, какой DPI рассчитал ваш X-сервер, используя следующую команду:

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

Выглядит хорошо, не так ли?

Для дальнейшего чтения:

Afr
источник
@ alois-mahdal Думаю, сначала я неправильно понял вопрос. Я улучшил ответ, добавив размеры экрана, используемые X-сервером.
Afr
Xorg по умолчанию 96x96 независимо от разрешения монитора. Я думаю, что это потому, что программы предоставляют изображения, предназначенные для этого стандартного dpi. Лучше быть немного отстраненным, чем создавать артефакты, постоянно масштабируя изображения. Фактическое значение DPI моего основного монитора составляет 93,8. Однако установка настраиваемого DPI полезна для больших дисплеев, таких как большие телевизоры высокой четкости, число точек на дюйм которых значительно ниже 96.
Колин,
Похоже, что X не допускает настройки DPI для каждого монитора для одного экрана, этот DPI используется для всех мониторов на одном экране. Также я обнаружил, что указанные миллиметры xdpyinfoне складываются из миллиметров от xrandr --query.
CMCDragonkai
0

Точек на дюйм = точек (пикселей) / дюймов (физический размер монитора).

psusi
источник