解决Deepin中Grub字体太小问题

0x00 背景

最近重装了一下Deepin v20系统,发现开机时Grub菜单字体变小了,看着很不舒服,就尝试着寻找了下解决方法。

Grub配置文件路径是:/etc/default/grub,所以主要就是修改这个文件。该文件的默认内容为:

# Written by com.deepin.daemon.Grub2
DEEPIN_GFXMODE_ADJUSTED=1
GRUB_BACKGROUND=/boot/grub/themes/deepin-fallback/background.jpg
GRUB_CMDLINE_LINUX_DEFAULT="splash quiet"
GRUB_DEFAULT=0
GRUB_DISTRIBUTOR="`/usr/bin/lsb_release -d -s 2>/dev/null || echo UOS 20`"
GRUB_GFXMODE=3840x2160,1920x1080,1024x768,auto
GRUB_THEME=/boot/grub/themes/deepin-fallback/theme.txt
GRUB_TIMEOUT=5

修改这个文件后,使用update-grub命令更新Grub配置,然后重启电脑。

0x01 修改GRUB_GFXMODE配置

网上找到的比较多的解决方法是修改GRUB_GFXMODE配置,也就是修改Grub使用的分辨率:GRUB_GFXMODE=1024x768,从而让字变大。不过在我电脑上,只有1024x768这个分辨率能够生效,而且看起来字不仅偏大,背景图片也变模糊了。所以这种方法不算是特别好的解决方法。

0x02 增加GRUB_FONT配置

网上另一种解决方案是先通过grub2-mkfont命令生成较大一些的字体,然后修改GRUB_FONT配置,指向生成的字体文件路径。具体方法如下:

$ sudo grub-mkfont --output=/boot/grub/fonts/DejaVuSansMono36.pf2 --size=36 /usr/share/fonts/truetype/dejavu/DejaVuSansMono.ttf

然后增加配置:GRUB_FONT=/boot/grub/fonts/DejaVuSansMono36.pf2

不过这种方法也没有生效。后来发现是因为当GRUB_FONTGRUB_THEME同时存在时,会优先使用GRUB_THEME中的配置。

0x03 修改主题文件

Deepin中默认使用的Grub主题文件路径是:/boot/grub/themes/deepin-fallback/theme.txt。该文件文件如下:

#version:17
#lang:zh_CN.UTF-8
#themeInputDir:/usr/share/dde-api/data/grub-themes/deepin-fallback
#head end
title-text: ""
desktop-image: "background.jpg"
desktop-color: "#000000"
terminal-font: "Unifont Regular 16"
terminal-box: "terminal_box_*.png"
terminal-left: "0"
terminal-top: "0"
terminal-width: "100%"
terminal-height: "100%"
terminal-border: "0"
+ boot_menu {
    left = 15%
    top = 20%
    width = 70%
    height = 60%
    item_font = "Unifont Regular 16"
    item_color = "#cccccc"
    selected_item_color = "#0099ff"
    item_height = 24
    item_spacing = 12
    selected_item_pixmap_style = "select_*.png"
    scrollbar_thumb = "scrollbar_thumb_*.png"
    scrollbar_width = 6
    menu_pixmap_style = "menu_*.png"
}
+ label {
    left = 0
    top = 97%
    width = 100%
    align = "center"
    id = "__timeout__"
    color = "#99E53E"
    font = "Unifont Regular 16"
    text = "在 %d 秒内启动"
}
+ label {
    left = 0
    top = 94%
    width = 100%
    align = "center"
    color = "#99E53E"
    font = "Unifont Regular 16"
    text = "使用 ↑ 和 ↓ 键移动选择条,Enter 键确认,E 键编辑启动命令,C 键进入命令行"
}

可以看到,主题里使用的是Unifont Regular 16字体,看名字可以知道字体大小是16,在4K分辨率下看起来会比较小。所以只要生成大号的字体替换这里的配置就可以了。

生成大号字体的命令是:

$ sudo grub-mkfont --output=/boot/grub/themes/deepin-fallback/unifont-regular-36.pf2 --size=36 /usr/share/fonts/truetype/unifont/unifont.ttf

然后将主题文件中的Unifont Regular 16都替换为Unifont Regular 36,并重启电脑。可以看到,字体的确变大了。可以根据实际情况动态修改字体的大小。

0x04 结论

此方法理论上不仅可以用于Deepin系统,其它Linux系统应该也可以适用。

分享