我已经能够通过使用更改 Grub 的默认字体
grub-mkfont -s 16 -o /boot/grub/grubfont.pf2 font.tty
然后将以下行添加到 /etc/default/grub:
GRUB_FONT=/boot/grub/grubfont.pf2
而且当然
sudo update-grub
新字体确实出现了,一切都出现了(记得选择等宽字体)。但是,“框”字符(条目周围)永远不会正确显示。我猜大多数字体根本没有那个字符集。有什么办法可以添加这些字符吗?甚至可以从默认的 unicode.pf2 字体中复制它们?如果这不可能,你知道有这些字符的字体吗?
更新:
我尝试了很多不同的方法,例如从 ttf 转换为 bdf,然后再转换为 pf2,并且我尝试使用 option 仅转换 ascii 字符--range=0x0-0x7f
,但它们似乎都无法使其完美运行。我有一种感觉,这是因为我生成的字体比默认字体大,因此无法使用默认字形。
我会尝试看看是否可以使用较小的字体,尽管这是我想更改字体的原因之一。
基本上你想要做的是使用范围运算符来限制你的新 grub 字体包含的字符。如果您不使用范围运算符,那么您将从目标字体中获取所有字形,包括错误或不正确的框元素。
例如:
grub-mkfont -s 16 --range=0x0-0x7f -o /boot/grub/grubfont.pf2 font.tty
将生成仅包含 ASCII 字符的字体,您的字体没有的任何字体都应该优雅地衰减为默认字体,因此框和箭头应该来自默认字体。请参阅此网站以获取更多信息:
http://web.archive.org/web/20100429235139/http://grub.enbug.org/gfxterm
理论上
grub-mkfont
允许传递多种字体。在这种情况下,如果您可以同时传递指向Unifont或其他覆盖范围更广的字体的链接。生成的 Grub 字体将结合两种输入字体的覆盖范围。注意:最近对 Grub 启动时字体加载器的性能改进意味着 Grub 字体文件中的字形必须按特定的升序排列,但不幸的是,该
grub-mkfont
实用程序并未同时进行更改!现在这是一个错误:顺便说一句,如果您有兴趣,这个错误是因为在 Grub 启动菜单中调查使用Ubuntu Font Family开发中的Ubuntu Mono字体的实验发现的,并且遇到了与您刚刚遇到的完全相同的问题!
IIRC 我在使用所有字形时遇到了您所描述的内容:
(来源:xrmb2.net)
也许这是一个问题
grub-mkfont
,也许它与字体有关,我不知道。:(什么对我有用:
gbdfed
”文件(例如“/usr/share/consolefonts/Lat15-VGA16.psf”):文件>导入>控制台字体,然后文件>另存为...grub-mkfont
:grub-mkfont --output=out.pf2 --range=0x0-0x7f out.bdf
如果您使用-v标志运行grub-mkfont ,它将显示您获得了多少字形。如果你得到一千多个,边框字符应该在那里。限制范围只会让事情变得更糟。DejaVuSansMono 字体正确显示所有字符,并且在 .pf2 中有超过 3000 个字形。许多其他字体的箭头是正确的,但不是边框。
使用 unicode 字体.. 这几乎可以正常工作(例如 arialuni.ttf,根据需要显示所有字符).. 我的问题是字符间距稍大......我测试的每种字体都会发生这种情况。
您可以通过加载默认字体和所需字体来使其正确显示。
然后,将字体设置为所需的字体。
当找不到框的字符时,也加载的常规字体将作为默认字体,并提供所需的字符。
我意识到这个线程很古老,但我今天正在阅读它并想出了另一个尚未提供的答案......所以这里是:
如果您在更改字体后在 GRUB 中得到奇怪的字符,那是因为这些字符在您用于创建 .pf2 文件的 .ttf 文件中不存在。
用于创建边框的字符是:
.ttf 文件中其他常见的缺失字符是箭头,它们是:
您可以使用 FontForge(开源软件)从 .ttf 复制和粘贴这些字符,其中包含的字符包含到您尝试使用的 .ttf 中,但没有。使用 FontForge 生成新的 .ttf 后,您可以使用 grub-mkfont 创建包含所有适当字符的 .pf2 文件。