Yocto 图像缺少字体 (X11)
Yocto image missing fonts (X11)
我正在使用 Yocto(使用 generic-x86_64 机器定义)构建 Linux 系统映像。
当我构建 core-image-x11 时,Matchbox 将在启动时中止(声明默认主题中定义的字体的参数不正确)。
如果我使用 xfce(使用 "packagegroup-xfce-base")而不是火柴盒,我可以成功加载桌面。但是,所有文本仅呈现为空框。
我尝试包含尽可能多的字体包,例如:
- xorg-最小字体
- packagegroup-fonts-truetype-core
- ttf-liberation-mono/sans/serif
- ttf-dejavu-common 等
不幸的是,其中 none 已经解决了丢失字体的问题。我错过了关键字体 package/configuration 选项吗?
可能您应该安装 fontconfig
:IMAGE_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
}
我正在使用 Yocto(使用 generic-x86_64 机器定义)构建 Linux 系统映像。
当我构建 core-image-x11 时,Matchbox 将在启动时中止(声明默认主题中定义的字体的参数不正确)。
如果我使用 xfce(使用 "packagegroup-xfce-base")而不是火柴盒,我可以成功加载桌面。但是,所有文本仅呈现为空框。
我尝试包含尽可能多的字体包,例如:
- xorg-最小字体
- packagegroup-fonts-truetype-core
- ttf-liberation-mono/sans/serif
- ttf-dejavu-common 等
不幸的是,其中 none 已经解决了丢失字体的问题。我错过了关键字体 package/configuration 选项吗?
可能您应该安装 fontconfig
:IMAGE_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
}