¿Cómo calcula X-server DPI?

De Xfce Docs :

En caso de que desee anular el valor de DPI (puntos por pulgada) calculado por el server X , puede seleccionar la checkbox y usar el cuadro de selección para especificar la resolución que se utilizará cuando la pantalla procese las fonts.

¿ Pero cómo hace X-server su cálculo? ¿Qué suposiciones se hacen en el process y se pueden anular algunos de los parameters?

Puede saber cuántos píxeles tengo en mi pantalla, pero ¿es eso suficiente?

Hasta donde yo sé, comenzando con la versión 1.7, xorg pnetworkingeterminado de 96 dpi . No calcula nada a less que especifique DisplaySize través de los files de configuration de Xorg . Además, no confíe en la salida de xdpyinfo .
Mi computadora portátil funciona con Intel SandyBridge. Extracto de mi Xorg.0.log en una nueva installation de Archlinux:

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

corriendo

 xdpyinfo | grep -E 'dimensions|resolution' 

devoluciones:

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

lo cual está lejos de ser cierto. Sé que el tamaño de mi pantalla es de 344x193 mm, por lo que obviamente xdpyinfo calcula el tamaño físico en function de la resolución de píxeles ( 1600x900 ) y el valor pnetworkingeterminado de 96 DPI . Si agrego

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

en /etc/X11/xorg.conf.d/monitor.conf y restart, Xorg.0.log informa correctamente:

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

Sin embargo, xdpyinfo | grep -E 'dimensions|resolution' xdpyinfo | grep -E 'dimensions|resolution' siempre devuelve:

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

Aún así, no hay cambios visuales ya que estoy usando Gnome, y 96 DPI también está codificado en gnome-settings-daemon . Después de parchear el último, puedo disfrutar de mi 118 DPI nativo. Pero incluso después de todo eso, xdpyinfo aún regresa:

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

¿Cómo calcula X-server DPI?

El DPI del server X se determina de la siguiente manera:

  1. La opción de línea de command -dpi tiene la más alta prioridad.
  2. Si no se utiliza, la configuration DisplaySize en el file de configuration X se usa para derivar el DPI, dada la resolución de la pantalla.
  3. Si no se DisplaySize , los valores de tamaño de monitor de DDC se utilizan para derivar el DPI, dada la resolución de pantalla.
  4. Si DDC no especifica un tamaño, se usa 75 DPI por defecto.

Puede saber cuántos píxeles tengo en mi pantalla, pero ¿es eso suficiente?

No, no solo conoce el tamaño de la pantalla virtual en píxeles sino también el tamaño de la pantalla física en milímetros. Puede verificar las dimensiones de su pantalla ejecutando lo siguiente en una window de terminal:

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

El cálculo que hace su server X es el siguiente:

  • 1366 píxeles divididos por 361 milímetros multiplicados por 25,4 milímetros por pulgada = 96,11191136 puntos por pulgada (DPI).
  • 768 píxeles divididos por 203 milímetros multiplicados por 25,4 milímetros por pulgada = 96.09458128 puntos por pulgada.

Puede verificar qué DPI ha calculado su server X con el siguiente command:

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

Se ve bien, ¿no?

Para lectura adicional:

Puntos por pulgada = Puntos (píxeles) / pulgadas (tamaño físico del monitor).