手上这台Dell 640m家用机上原装的是Vista home basic,用得不是很多。前几天翻到它的显示设置,发现还有改变屏幕dpi的功能,可以改到120dpi以便让字体大一些,就改了一下试试,字体果然大了很多,但又感觉屏幕小了,不像是1440x900的高分辨率了,于是就又改了回去。
又回到Linux,感觉字体确实比较大一些,感觉屏幕也不如Vista下面大,看来这个dpi还是挺有用的;在Linux下面一直是120dpi,这也是这个屏幕的标准值,1440x900,304mm x 190mm的尺寸,按25.4mm = 1inch来算,就是120个点一英寸。
但软件就是比较灵活,不一定都按这个点来算,完全可以数96个点就当成一英寸,也就是把英寸这个单位变小了,于是显示的东西都会变小,而屏幕就显得大了些 ──物理尺寸当然不会变,但以变小的英寸表示数值却可以变大。Windows从XP开始使用96dpi的缺省值,高分屏上就会显得字比较小;更早前 Windows大概是用75dpi的。而X对这个问题一向是更加灵活,没有设定缺省值,全靠用户的设置,如果用户不设置,
X就自己算dpi,据说是按以下的顺序:
- 如果X的启动命令上给出了-dpi xxx,那就按这个命令来;
- 如果没有命令,就看xorg.conf里的DisplaySize值来算;
- 如果没有,就试着读显示器的DDC,再来设置;
- 还没有,就用75dpi。
但在使用中,我发现现在的Xorg大概顺序上有变,显示器的DDC信息权重变大,起码可以压过xorg.conf里设置的DisplaySize。DDC给出的值就是显示器物理值,没有改变的可能。
既然想让X显示和Vista/XP的效果尽量一致,就想
改变dpi到96。这同样有几个办法,一是在启动X的命令上加个-dpi参数;如果使用GDM,一时也找不到它在哪里启动X,也就算了;第二招就是改xorg.conf里面的DisplaySize,这个比较简单。
找到/etc/X11/xorg.conf中的Monitor段,加入:
DisplaySize 381 238
这里的381是宽,238是高,单位mm。这个值不是真实的显示器尺寸,而是按1440x900的分辨率和96dpi的设置算出来的,比实际的屏幕要大(真实值是304x190)。
但由于xorg 7.2以后DDC权重变大,所以还要阻止x读ddc,找到Device段,加入:
Option “NoDDC”
这样这个显示尺寸的设置就有用了。
重启X,可以用下述命令看X的分辨率:
xdpyinfo | grep resolution
另外,如果没有noDDC这个参数,X会假装把dpi设对了,在Xorg.log中可以看到,但实际上没用。
上面是X图形界面的dpi,另外字体显示还有一个dpi,也就是xft/fontconfig控制下的字体可以用和X不一样的dpi显示字体,即便在 120dpi的X上也可以让字体按96dpi显示来搞出小字来。这个也有几个方法,一是在font.conf中,最好是改local.conf,加入:
<match target="pattern" >
<edit name="dpi" mode="assign" >
<double>96</double>
</edit>
</match>
另外是桌面环境也许就有设置,比如Xfce4,就在用户界面的设置中加入了字体dpi的设置,很方便。所以现在也不知道上面设置font.conf是否真的有用。第三个方法是在Xresources等资源文件中设定:
Xft.dpi: 96
第3个方法也没试过。设完之后可以用这个命令查看:
xrdb -query | grep dpi
总之软件是很软的,自由软件的灵活性更强──换个说法就是没有统一的考虑,会给用户(非Hacker用户)造成不小的困扰。这方面,Windows确实是统一设置的,应该也经过微软高薪员工的调校,所以一般地可以跟着走,比如现在XP/Vista都是96dpi缺省值,我也就全面设定为96dpi了。
Mozilla网站上这篇文章很全面。