yoctoでmeta-qt5を組み込んで、Qt5アプリケーションを起動させた時に、次のようなエラーメッセージが表示され、文字が正しく表示されない問題が発生した。
QFontDatabase: Cannot find font directory /usr/lib/fonts. Note that Qt no longer ships fonts. Deploy some (from http://dejavu-fonts.org for example) or switch to fontconfig. QFontDatabase: Cannot find font directory /usr/lib/fonts. Note that Qt no longer ships fonts. Deploy some (from http://dejavu-fonts.org for example) or switch to fontconfig. QFontDatabase: Cannot find font directory /usr/lib/fonts. Note that Qt no longer ships fonts. Deploy some (from http://dejavu-fonts.org for example) or switch to fontconfig. QFontDatabase: Cannot find font directory /usr/lib/fonts. Note that Qt no longer ships fonts. Deploy some (from http://dejavu-fonts.org for example) or switch to fontconfig. QFontDatabase: Cannot find font directory /usr/lib/fonts. Note that Qt no longer ships fonts. Deploy some (from http://dejavu-fonts.org for example) or switch to fontconfig
local.confでは次のように定義してあるため、ttf-dejavu関連のパッケージはインストールしてある。
# fonts IMAGE_INSTALL_append = " \ ttf-dejavu-common \ ttf-dejavu-sans \ ttf-dejavu-serif \ "
これらのパッケージは、/usr/share/fonts/truetype
以下にttfファイルをインストールするようになっているが、
Qt5が/usr/lib/fonts
にフォントファイルが配置されていることを期待しているため、フォントを見つけられないということらしい。
対策
ここの一連のスレッドを読むと、同じ問題に引っかかっている人が、 フォントのレシピにbbappendを作成して、インストール先を変更することで、問題を解決している。
# # This method from # https://lists.yoctoproject.org/pipermail/yocto/2016-October/032453.html # do_install() { install -d ${D}${libdir}/fonts/ find ./ -name '*.tt[cf]' -exec install -m 0644 {} ${D}${libdir}/fonts/ \; install -d ${D}${sysconfdir}/fonts/conf.d/ install -m 0644 ${WORKDIR}/30-dejavu-aliases.conf ${D}${sysconfdir}/fonts/conf.d/ } FILES_${PN}-sans = "${libdir}/fonts/DejaVuSans.ttf ${libdir}/fonts/DejaVuSans-*.ttf" FILES_${PN}-sans-mono = "${libdir}/fonts/DejaVuSansMono*.ttf" FILES_${PN}-sans-condensed = "${libdir}/fonts/DejaVuSansCondensed*.ttf" FILES_${PN}-serif = "${libdir}/fonts/DejaVuSerif.ttf ${libdir}/fonts/DejaVuSerif-*.ttf" FILES_${PN}-serif-condensed = "${libdir}/fonts/DejaVuSerifCondensed*.ttf" FILES_${PN}-mathtexgyre = "${libdir}/fonts/DejaVuMathTeXGyre.ttf"
bbappendは次のコマンドで作成すると適切な場所に空のファイルを作成しエディタで開いてくれるため簡単。
$ recipetool newappend meta-local ttf-dejavu -e
ここでは予めmeta-localというレイヤを作ってあることを前提としている。
meta-localも次のように作ることができる。
$ yocto-layer create local 10 $ bitbake-layers add-layer ./meta-local
ディレクトリ構成は手抜き。