Yocto 图像缺少字体 (X11)

Yocto image missing fonts (X11)

我正在使用 Yocto(使用 generic-x86_64 机器定义)构建 Linux 系统映像。

当我构建 core-image-x11 时,Matchbox 将在启动时中止(声明默认主题中定义的字体的参数不正确)。

如果我使用 xfce(使用 "packagegroup-xfce-base")而不是火柴盒,我可以成功加载桌面。但是,所有文本仅呈现为空框。

我尝试包含尽可能多的字体包,例如:

不幸的是,其中 none 已经解决了丢失字体的问题。我错过了关键字体 package/configuration 选项吗?

可能您应该安装 fontconfigIMAGE_INSTALL_append = " fontconfig"。如果它仍然不起作用,您可以 strace -e open 在需要字体的程序上查看它在哪里寻找字体。

下面是使用它的摘录:

# strace -e open ./my_program
[...]
open("/etc/fonts/fonts.conf", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 13
open("/etc/fonts/conf.d", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 14
open("/etc/fonts/conf.d/10-scale-bitmap-fonts.conf", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 15
open("/etc/fonts/conf.d/20-unhint-small-vera.conf", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 15
open("/etc/fonts/conf.d/30-dejavu-aliases.conf", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 15
open("/etc/fonts/conf.d/30-metric-aliases.conf", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 15
open("/etc/fonts/conf.d/30-urw-aliases.conf", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 15
open("/etc/fonts/conf.d/40-nonlatin.conf", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 15
open("/etc/fonts/conf.d/45-latin.conf", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 15
open("/etc/fonts/conf.d/49-sansserif.conf", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 15
open("/etc/fonts/conf.d/50-user.conf", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 15
open("/etc/fonts/conf.d/51-local.conf", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 15
open("/etc/fonts/conf.d/60-latin.conf", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 15
open("/etc/fonts/conf.d/65-fonts-persian.conf", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 15
open("/etc/fonts/conf.d/65-nonlatin.conf", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 15
open("/etc/fonts/conf.d/69-unifont.conf", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 15
open("/etc/fonts/conf.d/80-delicious.conf", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 15
open("/etc/fonts/conf.d/90-synthetic.conf", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 15
open("/usr/share/fonts", O_RDONLY|O_LARGEFILE|O_CLOEXEC) = 13
[...]

希望对您有所帮助。 问候。

我发现可以通过重建字体缓存来解决 XFCE 丢失字体的问题。

fc-cache -f -v 

因为这(应该)每次安装只需要完成一次,所以我在我的食谱中添加了一个安装后任务,它在 Yocto 映像的第一次启动时重建字体缓存。

pkg_postinst_${PN}() {
    if [ x"$D" = "x" ]; then
        #Only run the script on first startup of the machine
        fc-cache -f -v
    else
        #If we're in the staging directory (on the build machine), exit.
        exit 1
    fi
}