我有两个不同的桌面主机通过它们的DisplayPort输出连接到同一4K监视器上的两个DisplayPort输入:
-
,这是一款采用赛扬N3350处理器内置Intel HD Graphics 500的小型PC。(据我所知,我在另一个地方也有一个类似的系统,它配备了奔腾N4200处理器和Intel 505图形处理器,在4K时的功能完全相同。)
-
,一个相当普通的旧ATX系统,带有Intel i5-3450 CPU和一个ATI Radeon 7870图形卡
这两个系统都运行着最新的Debian9,配置与我所能管理的完全相同。特别地:
-
两个系统上的X服务器DPI都是96,用
grep DPI /var/log/Xorg.0.log
和
xdpyinfo | grep dots
-
两个系统上的Xft DPI都是120,用
xrdb -query | grep dpi
-
两者都配置有
xrdb -cpp cpp -merge $HOME/.Xresources
从一个相同的文件,我已经确认了
xrdb -query
在两者上产生相同的输出。我也有完全相同的一组源代码Pro字体加载到
~/.fonts
在其中一个上,我可以启动一个80列的xterm,配置为
XTerm*VT100*font: -misc-fixed-medium-r-semicondensed--13-120-75-75-c-60-iso10646-1
它们看起来一模一样,宽484像素。如果使用
ssh -X
然而,
urxvt
取决于我使用的X服务器。我已将font X资源配置为:
Rxvt.font: xft:Source Code Pro:size=9,xft:Source Han Sans,xft:DejaVu Serif:size=8,xft:DejaVu Sans Mono:size=8
超声心动图
田园诗般的
的X服务器,在本地或在另一台主机上启动
,当垂直最大化时,80列终端为644像素宽,106列高。但是,当我开始显示
的X服务器(同样在本地或与使用
),80列
超声心动图
为726像素宽,但在垂直最大化时仍有106列高。
是什么原因
超声心动图
在
对数的
再宽一点,我怎么才能把它和
田园诗般的
即使你不知道,调试提示也会很感激。我很乐意编写与X11服务器对话的程序(更喜欢Python或类似的,而不是C或类似的),并允许我使用类似的呈现
超声心动图
是想看看问题是否可以通过这种方式找到,你是否对我应该调用什么样的api以及我应该寻找什么样的结果有具体的建议。
xft:
字体是由X客户端呈现的,对吗?如果这是正确的,这似乎是一个很大的提示,即X11服务器中的某些设置正在更改
上的客户端
主机正在呈现字体,这取决于它正在与哪个X11服务器通信。
xfce4-terminal
问询处
我试着启动一个
xfce4终端
超声心动图
使用于
. 这似乎表明这与
超声心动图
Xft
库(如果
xfce4终端
不用,我很确定
是的),而不是自由类型?
编辑:
xtrace
我从
X跑道
(谢谢你的建议,
@Uli Schlachter
!) 这至少让我更详细地看到了问题所在。即使只是跑步
xtrace urxvt -e true
产生几百千字节的输出,所以很明显我不打算在这里全部包括,但这里有一些关键位。下面是会话的差异
田园诗般的
和
田园诗般的
对数的
田园诗般的
运行
在这两种情况下,但首先显示在自身上,然后远程显示在
对数的
在第156行
CreateWindow
-000:<:005e: 48: Request(1): CreateWindow depth=0x18 window=0x03200009 parent=0x000000e7 x=0 y=0 width=644 height=904 border-width=0 class=InputOutput(0x0001) visual=0x00000021 value-list={background-pixel=0x00ffffe0 border-pixel=0x00ffffe0 override-redirect=false(0x00) colormap=0x00000020}
+000:<:005e: 48: Request(1): CreateWindow depth=0x18 window=0x05400009 parent=0x000004bb x=0 y=0 width=724 height=904 border-width=0 class=InputOutput(0x0001) visual=0x00000021 value-list={background-pixel=0x00ffffe0 border-pixel=0x00ffffe0 override-redirect=false(0x00) colormap=0x00000020}
从每一行的第138行开始,我看到这个diff(第二行被截断以保持正常),这似乎证实了
width=7
与。
width=9
对于正在创建的字形,这是一个字符宽度问题。
-000:<:004c: 12: RENDER-Request(139,17): CreateGlyphSet gsid=0x03200008 format=0x00000024
-000:<:004d:108: RENDER-Request(139,20): AddGlyphs glyphset=0x03200008 glyphids=0x0000036d; glyphs={width=7 height=10 x=-1 y=10 xOff=9 yOff=0}; data=0x00,0x3e,...
+000:<:004c: 12: RENDER-Request(139,17): CreateGlyphSet gsid=0x05400008 format=0x00000026
+000:<:004d:388: RENDER-Request(139,20): AddGlyphs glyphset=0x05400008 glyphids=0x0000036d; glyphs={width=9 height=10 x=0 y=10 xOff=9 yOff=0}; data=0x00,0x00,...
(对于其他字符,此操作将继续,宽度为8对10、9对11等)
所以不管是什么原因造成的,都是在138号线之前。在这之前,大多数diff似乎都是用于对象的ID号的变化,所以要找出真正的diff是什么有点痛苦。
对数的
(使用离散Radeon图形卡的)返回
许多
{id=0x00000021 class=TrueColor(0x04) bits/rgb-value=8 colormap-entries=256 red-mask=0x00ff0000 green-mask=0x0000ff00 blue-mask=0x000000ff},
{id=0x00000022 class=DirectColor(0x05) bits/rgb-value=8 colormap-entries=256 red-mask=0x00ff0000 green-mask=0x0000ff00 blue-mask=0x000000ff},
之后的列表似乎主要是重复的,只是在
对数的
侧面。
Reply to QueryPictFormats
:其中
screens=... depths=... visuals={...}
对数的
侧面。
但在最后,还有一个更显著的区别:
-subpixels=Unknown(0x0);
+subpixels=HorizontalRGB(0x1);
QueryFont
对于fixed,它返回一些不同的数据,看起来只是IDs,而且似乎只用于创建一个游标,因为它在那之后立即关闭。接下来,它看起来几乎是一样的(同样,模id,除非我漏掉了什么),直到第139行。
编辑:FontConfig调试
我也试过检查
FC_DEBUG
针对每个服务器
FC_DEBUG=8191 urxvt -e true 2>outputfile
. 我确认这样做的宽度确实还是不同的。在8.5 MB的输出中对两个输出文件进行区分只会产生以下差异的三个实例(
-
是田园诗
,
对数的
):
- rgba: 0(i)(s)
+ rgba: 1(i)(s)