X服务器如何计算DPI?


9

Xfce Docs中

如果要覆盖X服务器计算的DPI(每英寸点数)值,则可以选中此复选框,并使用旋转框指定屏幕渲染字体时要使用的分辨率。

怎么也X服务器做它的计算?在此过程中做出什么假设,是否可以覆盖某些参数?

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

Answers:


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

这远非事实。我知道我的屏幕尺寸是344x193mm,因此显然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?

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

看起来不错,不是吗?

进一步阅读:


@ alois-mahdal我想我一开始误解了这个问题。我改进了添加X服务器使用的显示尺寸的答案。
2013年

Xorg默认为96x96,无论监视器分辨率如何。我认为这是因为程序提供了用于此标准dpi的图像。比起一直通过缩放图像来创建伪像要好一些。我的主显示器的实际DPI是93.8。但是,设置自定义DPI对于大型显示​​器(例如DPI远低于96的大型HDTV)很有用
Colin

X似乎不允许单个屏幕的每个监视器的DPI设置,因为DPI在同一屏幕的所有监视器之间共享。我还发现给出的毫米数与的毫米数xdpyinfo相加xrandr --query
CMCDragonkai

0

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.