Le pilotage de l'écran par le serveur X et la carte graphique s'effectue aux moyens d'images bitmap définies en pixel. Il s'en suit que la dimension de l'image affichée est fonction de la résolution de l'écran (nombre de pixels par unité de longueur).
Pour que les dimensions des images soient comparables d'un écran à l'autre, X calcule à partir des informations fournies par le bios la résolution de l'écran et la met à disposition des applications qui en ont besoin de convertir des dimensions en pixels (affichage du bureau, fontes, ....).
xdyinfo affiche la valeur calculée par X
$ xdpyinfo |grep -B2 resolution
dimensions: 1600x900 pixels (423x237 millimeters)
resolution: 96x96 dots per inch
Dans le cas présent, la valeur utilisée est celle calculée automatiquement par X à partir des informations fournies par le bios. Ces informations sont erronées : la taille de l'écran n'est pas 423x237mm, mais 344x190mm. La résolution réelle n'est donc pas 96 dpi mais 118 dpi. Il sera donc nécessaire de configurer X pour qu'il prenne en compte cette valeur.
La valeur réelle peut-être calculée et affinée à partir de différentes méthodes :
$ fbset -s |grep ^mode
mode "1600x900"
A partir de la taille de la diagonale de l'écran en inch : le site http://dpi.lv/ affiche directement le résultat.
$ display -size 1000x30 xc:blue &
Si la longueur mesurée est de L (en mm) , le dpi est de 1000 x 25,4 / L = 25400 / L . SI L=215 mm, le dpi est de 118 dpi.
$ xrandr |grep mm
DP-1 connected 1920x1080+0+0 (normal left inverted right x axis y axis) 476mm x 268mm
Installer
read-edid qui fournit les commandes get-edid et parse-edid (voir Descriptif du paquet pour limitations en fonction de l'architecture)
edid-decode
$ sudo aptitude install read-did edid-decode i2c-tools..
$ sudo modprobe i2c-dev
Acquisition de la table et affichage décodé
$ sudo get-edid >edid.dat
$ parse-edid <edid.dat
Checksum Correct
Section "Monitor"
Identifier "PL2290"
ModelName "PL2290"
VendorName "IVM"
# Monitor Manufactured week 29 of 2018
# EDID version 1.3
# Digital Display
DisplaySize 480 270
Gamma 2.20
Option "DPMS" "true"
Horizsync 30-83
VertRefresh 55-76
# Maximum pixel clock is 170MHz
#Not giving standard mode: 1920x1080, 60Hz
#Not giving standard mode: 1280x1024, 60Hz
#Not giving standard mode: 1440x900, 60Hz
#Not giving standard mode: 1680x1050, 60Hz
#Not giving standard mode: 1280x960, 60Hz
#Not giving standard mode: 1152x864, 75Hz
#Not giving standard mode: 1440x900, 75Hz
#Extension block found. Parsing...
Modeline "Mode 13" -hsync -vsync
Modeline "Mode 0" +hsync +vsync
Modeline "Mode 1" 25.200 640 656 752 800 480 490 492 525 -hsync -vsync
Modeline "Mode 2" 27.027 720 736 798 858 480 489 495 525 -hsync -vsync
Modeline "Mode 3" 27.027 720 736 798 858 480 489 495 525 -hsync -vsync
Modeline "Mode 4" 74.250 1280 1390 1420 1650 720 725 730 750 +hsync +vsync
Modeline "Mode 5" 74.250 1920 2008 2052 2200 1080 1082 1087 1125 +hsync +vsync interlace
Modeline "Mode 6" 148.500 1920 2008 2052 2200 1080 1084 1089 1125 +hsync +vsync
Modeline "Mode 7" 27.000 720 732 796 864 576 581 586 625 -hsync -vsync
Modeline "Mode 8" 27.000 720 732 796 864 576 581 586 625 -hsync -vsync
Modeline "Mode 9" 74.250 1280 1720 1760 1980 720 725 730 750 +hsync +vsync
Modeline "Mode 10" 74.250 1920 2448 2492 2640 1080 1082 1089 1125 +hsync +vsync interlace
Modeline "Mode 11" 54.000 1440 1464 1592 1728 576 581 586 625 -hsync -vsync
Modeline "Mode 12" 148.500 1920 2448 2492 2640 1080 1084 1089 1125 +hsync +vsync
Modeline "Mode 14" +hsync +vsync
Modeline "Mode 15" -hsync -vsync
Option "PreferredMode" "Mode 13"
EndSection
$ sudo get-edid |parse-edid
$ find /sys/devices -name edid
/sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-HDMI-A-1/edid
/sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-DP-2/edid
/sys/devices/pci0000:00/0000:00:02.0/drm/card0/card0-DP-1/edid
Si la valeur du DPI fournie par X n'est pas bonne
# mkdir /etc/X11/xorg.conf.d
# nano /etc/X11/xorg.conf.d/90-monitor.conf Section "Monitor" Identifier "<default monitor>" DisplaySize 344 194 # Taille de l'écran en mm EndSection
Redémarrer le serveur X et vérifier que la nouvelle dimension a été pris en compte :
$ xdpyinfo |grep -E "dimensions|resolution"
dimensions: 1600x900 pixels (344x194 millimeters)
resolution: 118x118 dots per inch
Vérifier que le bureau prend en compte la bonne valeur de dpi : avec le bureau XFCE, dans le menu Paramètres >> Apparence >> Onglet Polices >> Vérifier que le Paramètre DPI personnalisé est à la bonne valeur, sinon le modifier.
Certaines applications prennent en compte automatiquement en compte le DPI fourni par X ou le bureau. Dans d'autres cas, il est nécessaire d'ajuster manuellement le DPI.
Pour tester un navigateur, utiliser le carré ci-dessous, dont la dimension est définie en mm. En l'absence de zoom, la largeur et la hauteur doivent être de 100 mm.
<img src="image.png" style="height: 100mm; width: 100mm">
En mode impression par contre, avec les deux navigateurs, on peut vérifier que le carré a la bonne dimension, soit en effectuant l'impression, soit en mode Aperçu avant impression en vérifiant que le ratio largeur du carré / largeur de la page est correct (100 / 210 dans le cas d'une impression sur page A4)