Grup 字体修改

2025年7月13日 · 1902 字 · 4 分钟

在高分辨率下让 GRUB 菜单字体变大:完整排查与解决方案

1️⃣ 发现问题

最近在一台 3200x2000 高分辨率屏幕的设备上安装 Linux,并通过 GRUB 引导系统时,发现 GRUB 菜单虽然能正常显示,但字体小到几乎无法辨认

调整分辨率并没有解决根本问题,要么字体依然极小,要么需要牺牲分辨率(降低分辨率影响桌面体验)。因此需要寻找一个在保持高分辨率下,让 GRUB 菜单字体变大的优雅方案


2️⃣ 分析原因

在 GRUB 中,影响菜单字体大小的因素主要有两个:

1️⃣ 分辨率(GRUB_GFXMODE)

  • 高分辨率会导致默认 8x16 的 GRUB 字体显示得极小。
  • 虽然可以通过降低分辨率解决字体过小的问题,但这并非最佳方案。

2️⃣ GRUB 加载的字体(*.pf2)

  • GRUB 菜单显示使用的字体文件是 .pf2 格式,不是普通的 TTF/OFT 字体。
  • 默认使用的 unicode.pf2 文件字号较小。
  • 可以使用 grub-mkfont 将自己喜欢的字体转换为更大字号的 .pf2 文件,供 GRUB 使用。

因此,如果我们希望在高分辨率下让字体变大,而不牺牲分辨率,最佳方案是: ✅ 使用 grub-mkfont 制作大字号字体,替换 GRUB 默认字体,保持高分辨率同时让菜单字体变大可读。


3️⃣ 如何解决

步骤总结:

✅ 使用 grub-mkfont 从自己喜欢的字体(如 MapleMono-Italic)生成大字号 .pf2 文件。 ✅ 配置 GRUB 使用新生成的大字号字体文件。 ✅ 更新 GRUB 配置并重启测试效果。


配置细节:

  • 分辨率确认: 在 GRUB 命令行(启动时按 c)输入:

    videoinfo
    

    查看当前支持的分辨率,确认可以使用 3200x2000。

  • 字体选择: 我使用了:

    /home/ban/.local/share/fonts/MapleMono-Italic.ttf
    

    作为生成大字号 GRUB 字体的来源。

  • 字号选择: 常用字号为 32、40、48、64,通常建议使用 48 或 64,在高分辨率下更清晰。


附:完整自动化配置脚本

以下是可直接保存执行的自动化脚本:

#!/usr/bin/env bash
set -e

echo "=== GRUB 大字体配置自动化脚本 (MapleMono-Italic) ==="

# 指定用户字体路径
FONT_SRC="/home/ban/.local/share/fonts/MapleMono-Italic.ttf"

# 检查 grub-mkfont 是否可用
if ! command -v grub-mkfont &>/dev/null; then
    echo "❌ 未检测到 grub-mkfont,请先安装 grub-pc-bin"
    exit 1
fi

# 检查字体是否存在
if [ ! -f "$FONT_SRC" ]; then
    echo "❌ 未找到字体文件: $FONT_SRC"
    echo "请确保已正确安装 MapleMono-Italic.ttf 于 ~/.local/share/fonts/"
    exit 1
fi

# 用户输入字号
echo "请选择字号大小(常用:32, 40, 48, 64)"
read -rp "输入字号大小(默认 48): " SIZE
SIZE=${SIZE:-48}
if ! [[ "$SIZE" =~ ^[0-9]+$ ]]; then
    echo "❌ 字号输入不合法"
    exit 1
fi

# 创建字体目录
sudo mkdir -p /boot/grub/fonts

# 生成字体文件
FONT_DST="/boot/grub/fonts/MapleMonoItalic${SIZE}.pf2"
echo "正在生成字体文件: $FONT_DST"
sudo grub-mkfont -s "$SIZE" -o "$FONT_DST" "$FONT_SRC"
echo "✅ 字体文件已生成: $FONT_DST"

# 修改 /etc/default/grub
GRUB_CFG="/etc/default/grub"
LINE="GRUB_FONT=${FONT_DST}"

if grep -q "^GRUB_FONT=" "$GRUB_CFG"; then
    echo "检测到已存在 GRUB_FONT,正在替换..."
    sudo sed -i "s|^GRUB_FONT=.*|$LINE|" "$GRUB_CFG"
else
    echo "GRUB_FONT 未设置,正在追加..."
    echo "$LINE" | sudo tee -a "$GRUB_CFG" >/dev/null
fi

echo "✅ 已更新 $GRUB_CFG"

# 更新 grub
echo "正在更新 grub..."
sudo update-grub
echo "✅ grub 更新完成"

# 提示重启
read -rp "是否立即重启以生效?(y/N): " CONFIRM
if [[ "$CONFIRM" =~ ^[Yy]$ ]]; then
    echo "正在重启..."
    sudo reboot
else
    echo "请重启后查看 GRUB 字体效果。"
fi

使用方式:

1️⃣ 保存为:

setup_grub_big_font.sh

2️⃣ 赋予执行权限:

chmod +x setup_grub_big_font.sh

3️⃣ 执行:

./setup_grub_big_font.sh

4️⃣ 按提示选择字号,重启验证 GRUB 字体是否变大。


🩶 总结

✅ 高分辨率下 GRUB 字体小的问题,本质是默认字体字号太小导致。 ✅ 使用 grub-mkfont 结合自定义字体和大字号可在保持高分辨率下让 GRUB 菜单字体变大、可读性更好。 ✅ 使用自动化脚本快速生成和配置,节省重复操作时间,便于快速迁移和批量配置。


如果你也有高分屏 Linux 设备,希望在 GRUB 中体验更舒适的字体大小,不妨尝试以上方法,让你的启动界面也拥有更舒适的可读性与美感。


PS. 增加一个修改 grup 背景的脚本。

#!/usr/bin/env bash
set -e

echo "=== GRUB 背景图片配置脚本 ==="

# 支持的图片扩展名(小写)
SUPPORTED_EXT="png tga jpg jpeg"

# 让用户输入图片路径
read -rp "请输入背景图片完整路径(支持png/tga/jpg/jpeg): " IMG_PATH

# 校验文件是否存在
if [ ! -f "$IMG_PATH" ]; then
    echo "❌ 文件不存在:$IMG_PATH"
    exit 1
fi

# 获取文件扩展名(小写)
EXT="${IMG_PATH##*.}"
EXT="${EXT,,}"

# 检查是否支持格式
if ! echo "$SUPPORTED_EXT" | grep -qw "$EXT"; then
    echo "❌ 不支持的图片格式:.$EXT"
    echo "仅支持格式:$SUPPORTED_EXT"
    exit 1
fi

# 目标目录和文件名
TARGET_DIR="/boot/grub"
TARGET_IMG="${TARGET_DIR}/background.${EXT}"

# 复制图片到目标目录
echo "正在复制图片到 $TARGET_IMG ..."
sudo cp "$IMG_PATH" "$TARGET_IMG"
sudo chmod 644 "$TARGET_IMG"
echo "✅ 图片复制完成"

# 修改 /etc/default/grub 配置
GRUB_CFG="/etc/default/grub"
LINE="GRUB_BACKGROUND=\"$TARGET_IMG\""

if grep -q "^GRUB_BACKGROUND=" "$GRUB_CFG"; then
    echo "检测到已有 GRUB_BACKGROUND,正在替换..."
    sudo sed -i "s|^GRUB_BACKGROUND=.*|$LINE|" "$GRUB_CFG"
else
    echo "未检测到 GRUB_BACKGROUND,正在追加..."
    echo "$LINE" | sudo tee -a "$GRUB_CFG" >/dev/null
fi

echo "✅ 已更新 $GRUB_CFG"

# 更新 grub 配置
echo "正在更新 grub ..."
sudo update-grub
echo "✅ grub 更新完成"

# 询问是否重启生效
read -rp "是否立即重启以查看效果?(y/N): " CONFIRM
if [[ "$CONFIRM" =~ ^[Yy]$ ]]; then
    echo "正在重启..."
    sudo reboot
else
    echo "请手动重启后查看 GRUB 背景效果。"
fi