X-server如何计算DPI?

X-server如何计算DPI?

Xfce 文档:

如果您想覆盖 DPI(每英寸点数)值由X-server计算,您可以选中该复选框并使用旋转框指定屏幕呈现字体时要使用的分辨率。

如何X-server 是否进行计算?在此过程中做出了哪些假设?某些参数是否可以被覆盖?

它可能知道我的显示器上有多少像素,但这足够了吗?

答案1

据我所知,从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

答案2

X-server如何计算DPI?

X 服务器的 DPI 通过以下方式确定:

  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 点。

您可以使用以下命令检查 X 服务器计算出的 DPI:

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

看起来不错,不是吗?

进一步阅读:

答案3

每英寸点数 = 点数(像素)/英寸(显示器的物理尺寸)。

相关内容