DPI (Dots Per Inch), also known as PPI (Pixels Per Inch), is a property of an X screen that describes the physical size of pixels. Some X applications, such as xterm, can use the DPI of an X screen to determine how large (in pixels) to draw an object in order for that object to be displayed at the desired physical size on the display device.
The DPI of an X screen is computed by dividing the size of the X screen in pixels by the size of the X screen in inches:
DPI = SizeInPixels / SizeInInches
Since the X screen stores its physical size in millimeters rather than inches (1 inch = 25.4 millimeters):
DPI = (SizeInPixels * 25.4) / SizeInMillimeters
The NVIDIA X driver reports the size of the X screen in pixels and in millimeters. When the XRandR extension resizes the X screen in pixels, the NVIDIA X driver computes a new size in millimeters for the X screen, to maintain a constant DPI (see the "Physical Size" column of the `xrandr -q` output as an example). This is done because a changing DPI can cause interaction problems for some applications. To disable this behavior, and instead keep the same millimeter size for the X screen (and therefore have a changing DPI), set the ConstantDPI option to FALSE.
You can query the DPI of your X screen by running:
% xdpyinfo | grep -B1 dot
which should generate output like this:
dimensions: 1280x1024 pixels (382x302 millimeters) resolution: 85x86 dots per inch
The NVIDIA X driver performs several steps during X screen initialization to determine the DPI of each X screen:
If the display device provides an EDID, and the EDID contains information about the physical size of the display device, that is used to compute the DPI, along with the size in pixels of the first mode to be used on the display device.
Note that in some cases, the physical size information stored in a display device's EDID may be unreliable. This could result in a display device's DPI being computed incorrectly, potentially leading to undesired consequences such as fonts that are scaled larger or smaller than expected. These issues can be worked around by manually setting a DPI using the "DPI" X configuration option, or by disabling the use of the EDID's physical size information for computing DPI by setting the UseEdidDpi X configuration option to "FALSE"'.
If multiple display devices are used by this X screen, then the NVIDIA X screen will choose which display device to use. You can override this with the "UseEdidDpi" X configuration option: you can specify a particular display device to use; e.g.:
Option "UseEdidDpi" "DFP-1"
or disable EDID-computed DPI by setting this option to false:
Option "UseEdidDpi" "FALSE"
EDID-based DPI computation is enabled by default when an EDID is available.
If the "-dpi" commandline option to the X server is specified, that is used to set the DPI (see `X -h` for details). This will override the "UseEdidDpi" option.
If the DPI X configuration option is specified, that will be used to set the DPI. This will override the "UseEdidDpi" option.
If none of the above are available, then the "DisplaySize" X config file Monitor section information will be used to determine the DPI, if provided; see the xorg.conf man page for details.
If none of the above are available, the DPI defaults to 75x75.
You can find how the NVIDIA X driver determined the DPI by looking in your X log file. There will be a line that looks something like the following:
(--) NVIDIA(0): DPI set to (101, 101); computed from "UseEdidDpi" X config option
Note that the physical size of the X screen, as reported through `xdpyinfo` is computed based on the DPI and the size of the X screen in pixels.
The DPI of an X screen can be poorly defined when multiple display devices are enabled on the X screen: those display devices might have different actual DPIs, yet DPI is advertised from the X server to the X application with X screen granularity. Solutions for this include:
Use separate X screens, with one display device on each X screen; see Chapter 13, Configuring Multiple X Screens on One Card for details.
The RandR X extension version 1.2 and later reports the physical size of each RandR Output, so applications could possibly choose to render content at different sizes, depending on which portion of the X screen is displayed on which display devices. Client applications can also configure the reported per-RandR Output physical size. See, e.g., the xrandr(1) '--fbmm' command line option.
Experiment with different DPI settings to find a DPI that is suitable for all display devices on the X screen.