更改默认的Grub字体后,没有框字符


13

我已经能够通过使用以下命令更改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,并且我尝试仅将带有选项的ascii字符转换--range=0x0-0x7f,但是似乎没有一个使它完美地工作。我感觉这是因为我生成的字体比默认字体大,因此无法使用默认字形。

我将尝试查看是否可以使用较小的字体来工作,但这是我想要更改字体的原因之一。


1
试试BURG,它非常好,并且有很多主题
Extender

但是OP想要更改字体-而不是主题GRUB。不相关。
WindowsEscapist

Answers:


8

理论上 grub-mkfont允许传递多种字体。在这种情况下,您可以同时传递一个指向Unifont的链接或覆盖范围更广的其他字体。产生的Grub字体将是两种输入字体覆盖率的组合。

注意:Grub引导时字体加载器的最新性能改进意味着Grub字体文件中的字形必须以特定的升序排列,但是很遗憾,同时没有对该grub-mkfont实用程序进行更改!现在这是一个错误:

  • 错误#729470 “ grub-mkfont输出grub无法使用的字体(字体字符不是升序:0 <= 0)”

顺便说一句,如果您感兴趣的话,发现此bug的原因是进行了一些实验,这些实验涉及调查在Grub引导菜单中使用Ubuntu字体家族开发中的Ubuntu Mono字体,并且遇到的问题与您刚刚遇到的问题完全相同!


1
我会让它休息,直到他们将Ubuntu Mono字体加载到grub中-不管怎么说,这就是我最初的追求:)非常感谢。
LasseValentini 2011年

9

基本上,您要使用range运算符来限制新grub字体包含的字符。如果您不使用范围运算符,那么您将从目标字体中获取所有字形,包括错误或不正确的box元素。

例如:

grub-mkfont -s 16 --range=0x0-0x7f -o /boot/grub/grubfont.pf2 font.tty

将生成仅包含ASCII字符的字体,您的字体中没有的任何字体应优雅地衰减为默认字体,因此框和箭头应来自默认字体。请访问此网站以获取更多信息:

http://grub.enbug.org/gfxterm


1
那是有道理的,但是我仍然有奇怪的字形,也许是因为根本没有加载Unicode字体?我将尝试将默认字体设置回,然后再试一次。
LasseValentini

1
也许您应该先加载控制台字体,然后再加载仅ttf ascii字体。
Martin Owens -doctormo- 2010年

1
您是否尝试加载多种字体?Unicode字体/usr/share/grub/unicode.pf2应包含所需的方框和箭头字符。您应该能够一个接一个地使用loadfont加载字体,直到获得理想的效果。
Martin Owens -doctormo-

5

IIRC我在使用所有字形时遇到了您所描述的内容:


(来源:xrmb2.net

也许这是一个问题grub-mkfont,也许与字体有关,我不知道。:(

对我有用的是:

  1. 使用gbdfed产生从控制台字体(如“/usr/share/consolefonts/Lat15-VGA16.psf”)的“BDF”文件:文件>导入>控制台字体,那么文件>另存为...
  2. 仅使用转换ASCII字符grub-mkfont

    grub-mkfont --output=out.pf2 --range=0x0-0x7f out.bdf

1
看来我的主要问题是我想使用OpenType字体(ttf),而不是为控制台设计的字体。我已经尝试过使用ttf文件进行上述操作,但对这个特定问题没有帮助。非常感谢您对类似问题的解决方案:)。
LasseValentini

3

如果使用-v标志运行grub-mkfont,它将显示给您多少个字形。如果您得到的数量超过一千,则边框字符应该在其中。限制范围只会使情况变得更糟。DejaVuSansMono字体正确显示所有字符,并且在.pf2中有3000多个字形。许多其他字体使箭头向右,但边框向右。


2

使用unicode字体。效果几乎很好(例如arialuni.ttf,根据需要显示所有字符)。我的问题是字符间距稍大...我测试的每种字体都会发生这种情况。


1

你可以得到这个通过加载正确显示两者的默认字体和所需的字体。

然后,将字体设置为所需的字体。

当找不到该框的字符时,还将同时加载常规字体作为默认字体,并提供所需的字符。


0

我知道这个线程是古老的,但是我今天正在阅读它,并且想出了另一个尚未提供的答案...所以这里是:

如果更改字体后GRUB中出现奇数字符,那是因为这些字符在用于创建.pf2文件的.ttf文件中不存在。

用于创建边框的字符为:

  • U + 2501
  • U + 2503
  • U + 250F
  • U + 2513
  • U + 2517
  • U + 251B

.ttf文件中的其他常见丢失字符是箭头,这些箭头是:

  • U + 2191
  • U + 2193

您可以使用FontForge(开源软件)从.ttf文件中复制并粘贴这些字符,该文件中包含要尝试使用的.ttf文件中没有的字符。用FontForge生成新的.ttf之后,可以使用grub-mkfont创建具有所有适当字符的.pf2文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.