fontconfig 警告:“/etc/fonts/fonts.conf”,第 100 行:未知“元素空白”

fontconfig 警告:“/etc/fonts/fonts.conf”,第 100 行:未知“元素空白”

我的 vps 服务器上出现此错误:

fontconfig warning: "/etc/fonts/fonts.conf", line 100: unknown element "blank"

这是文件:

https://pastebin.com/VqcSgJ9x

如何修复它?

答案1

长话短说:您可能应该忽略此警告。

如果您觉得有点大胆,您可以尝试从文件<blank>...</blank>中删除该部分/etc/fonts/fonts.conf(如果您不觉得那么鲁莽的话,可以先进行备份)。当我尝试这样做时,警告消失了。但是,您可能已经注意到文件顶部有一条看起来很可怕的消息:DO NOT EDIT THIS FILE. IT WILL BE REPLACED WHEN FONTCONFIG IS UPDATED. LOCAL CHANGES BELONG IN 'local.conf'.所以这可能不是正确的解决方案。 (如果你想知道我为什么这样做:我没有看到local.conf,太懒了阅读精美的手册,并认为我的黑客被覆盖更像是一个功能而不是一个错误,因为维护者可能会发布一个官方解决方案无论如何,后来——而且我想学习。)

好的,我们现在备份一下。这(毫不奇怪)与fontconfig<blank>元素,其用法在字体配置文档作为

<blank> 字体通常包含“损坏的”字形,这些字形出现在编码中,但在屏幕上绘制为空白。在元素内,将元素中应为空白的每个 Unicode 字符放入其中。在此集合之外绘制为空白的字符将从字体支持的字符集中删除。

文档表明定义这些选项没有任何问题。而且,他们是DTD 中指定。但是,您可能已经注意到一个相关的 fontconfig API,称为FcBlanks(强调我的):

FcBlanks 对象保存一个 Unicode 字符列表,绘制时这些字符预计为空白。扫描新字体时,任何空且不在该列表中的字形将被假定为已损坏,并且不会放置在与该字体关联的 FcCharSet 中。这为应用程序提供了更加准确的字符集。

FcBlanks 已弃用,不应在新编写的代码中使用。为了与旧代码兼容,它仍然被某些函数接受,但将来会被删除。

这对我来说表明配置文件中允许使用它们以实现兼容性,但不再打算使用它们。

如果没有更多信息,我不确定您在什么情况下看到此警告,但是,最近我在 chromium / electro / Google Chrome 中经常看到它。看看 chromium 的情况external/fontconfig我注意到的提交历史记录:

commit dc8326d3f116bb2a1425aa68660a332e351b6cb4
Author: Behdad Esfahbod <[email protected]>
Date:   Fri Sep 15 01:20:56 2017 -0400

    [fc-query] Remove --ignore-blanks / -b
    
    Blanks are the new black, err, dead!

...

commit 8b46a518bda8ecb3c5e2dfb0c1e5fda99e40aa3e
Author: Behdad Esfahbod <[email protected]>
Date:   Tue Sep 12 17:08:08 2017 -0400

    Update documentation for removal of blanks
    
    Patch from Jerry Casiano.

您还可以在2.12.91 变更日志。我怀疑该警告是在 chromium 更新到此(或更新的)版本的 fontconfig 前后开始出现的。它看起来这件事发生在 2018 年 6 月左右/铬 69。偷看DEPS文件third_party/fontconfig/BUILD.gn建议ba206df9b9a7ca300265f650842c1459ff7c634a(一些比 2.13.1 更新的提交)用于嵌入式构建,同时 ChromeOS 和 Linux 将使用“系统版本”。如果我理解正确的话,这意味着在 Linux 上/为 Linux 构建 chromium 时,build/install-build-deps.sh会安装libfontconfig1发行版提供的最新软件包(在我的例子中2.11.0-6.7+b1)。此时,我四处查看了一下有关如何编译我的 chromium 版本的更多信息,具体来说,但后来我失去了兴趣。我认为维护者试图使其与发行版的其余部分保持一致。

最后,如果我没有弄错的话,所有这些消息的真正含义是配置文件包含一些信息(注释除外),这些信息不会被输出它的程序使用。

也可以看看:

相关内容