Як X-сервер обчислює DPI?


9

Від Документів Xfce :

У випадку, якщо ви хочете змінити значення 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

7

Як X-сервер обчислює DPI?

DPI X-сервера визначається наступним чином:

  1. Параметр -dpiкомандного рядка має найвищий пріоритет.
  2. Якщо це не використовується, DisplaySizeпараметр у файлі X config використовується для отримання 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

Виглядає добре, чи не так?

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


@ alois-mahdal Я певно спочатку зрозумів це питання. Я вдосконалив відповідь, додавши розміри дисплея, використовувані X сервером.
Афр

Xorg за замовчуванням 96x96 незалежно від роздільної здатності монітора. Я думаю, це тому, що програми постачають зображення, призначені для цього стандартного dpi. Краще бути трохи від цього, ніж створювати артефакти, масштабуючи зображення весь час. Фактична DPI мого основного монітора - 93,8. Однак налаштування користувальницької DPI корисна для великих дисплеїв, таких як великі HDTV, чий DPI набагато нижчий, ніж 96.
Колін

Здається, X не дозволяє налаштувати DPI на один монітор для одного екрана, що DPI розділяється на всіх моніторах на одному екрані. Також я виявив, що міліметри, задані xdpyinfoне, не складаються з міліметрів з xrandr --query.
CMCDragonkai

0

Dots per Inch = крапки (пікселі) / дюйми (фізичний розмір монітора).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.