flowchart LR
M["2012款 Mac Pro 开机"] --> A["deepin GRUB:黑屏,键盘却有效"]
M --> B["Ventoy 的 GRUB:菜单与主题正常"]
M --> C["rEFInd:正常"]
style A fill:#e6482e,color:#fff
style B fill:#40c057,color:#fff
style C fill:#40c057,color:#fff
flowchart LR
subgraph S1["修复前:黑屏"]
A1["GRUB 启动"] --> A2["图形终端直接接管画面"] --> A3["菜单画好了,却永远刷不上屏"]
end
subgraph S2["修复后:正常"]
B1["GRUB 启动"] --> B2["先输出一行 echo 给文本屏垫场"] --> B3["图形终端接管后菜单正常显示"]
end
style A3 fill:#e6482e,color:#fff
style B3 fill:#40c057,color:#fff
以下操作在 deepin V25 桌面终端执行(会要求输入密码):
1. 新建一个引导配置片段,让 GRUB 在切图形画面前先输出一行文字:
pkexec tee /etc/grub.d/00_a_earlyecho << 'SCRIPT'
#!/bin/sh
# Workaround for Savannah bug #65503: gfxterm shows no output
# unless something was printed to the text console before it.
cat << 'EOF'
echo "Loading bootloader..."
EOF
SCRIPT
pkexec chmod 755 /etc/grub.d/00_a_earlyecho
修复deepin V25的GRUB在2012款Mac Pro中显示异常的问题
浣软科技 HuanSoft · 燕戏竹林
deepin 生态共建组成员
前言
手里有台 2012 款 Mac Pro(MacPro5,1),装了 deepin V25。开机引导时遇到一个怪现象:
也就是说系统没坏,引导没坏,唯独 deepin 的 GRUB 菜单"有画面但看不见"。
实在受不了每次盲按回车,我妥协装了 rEFInd——引导是正常了,但 rEFInd 有个烦人的弊端:它每次都现场扫描引导分区来找内核,系统升级、内核换版之后,缺省启动项可能就悄悄变了(选中旧内核、甚至选中不该选的条目),又得翻它的配置文件去修。引导层多维护一套配置,纯属无谓消耗。与其长期伺候 rEFInd,不如回头把 GRUB 黑屏研究明白。
最近这个问题彻底查清楚了,结论先放这里:
同一个 BIOS、同一块显卡、同样是 GRUB——为什么只有 deepin 的黑屏?带着这个问号开始排查。
排查过程:四步排除法
第一步:怀疑分辨率
抓取 deepin 的 grub.cfg 发现菜单分辨率被写死成了显示器的原生分辨率 1280x1024(deepin 桌面服务根据显示器 EDID 自动写的)。而这台老 Mac 的显卡走的是苹果老 EFI 固件独有的 UGA 显示协议——它不支持中途切换分辨率,任何与"固件当前画面"不一致的请求都会失败。
把分辨率改成
auto(即使用固件当前画面)后重启:依然黑屏。改对了一个问题,但不是全部。第二步:怀疑主题
菜单背景、中文字体这些"皮肤"(gfxmenu 主题)在某些硬件上渲染出问题会导致整块黑。去掉主题、只留朴素图形菜单:依然黑屏。主题排除。
第三步:验证文本模式是否活着
给 GRUB 配置强制"纯文本终端"模式(
GRUB_TERMINAL=console),完全不碰图形画面。重启——蓝底白字的文字菜单出现了,键盘操作一切正常!这一步很关键:说明 GRUB 本体、显示硬件、键盘链路全都是好的,问题精确锁定在"图形终端(gfxterm)接管之后画面不上屏"。
第四步:定位上游缺陷
带着"2.12 图形菜单黑屏、老硬件"这两个关键词检索,命中了 GRUB 官方缺陷库的 Savannah bug #65503:
echo治好了自己的 ThinkPad,也有人发现开启调试输出(它会顺带先打一堆日志)同样能治好,两个现象互相印证了机理。修复方法
原理一张图说清——修复只是给图形接管"垫"一行字:
以下操作在 deepin V25 桌面终端执行(会要求输入密码):
1. 新建一个引导配置片段,让 GRUB 在切图形画面前先输出一行文字:
文件名以
00_a开头是为了让它排在所有配置片段的最前面(这行 echo 必须出现在图形接管之前)。2. 把菜单分辨率固定为"固件当前画面"(本机 UGA 唯一可行的模式),并覆盖 deepin 桌面服务写死的分辨率:
3.(本机显卡环境需要)指定 GRUB 使用苹果老 EFI 的 UGA 显示驱动:
4. 重新生成 GRUB 菜单并检查:
三个关键行都应该存在,且
echo那一行的行号必须小于terminal_output gfxterm。5. 把 deepin 的引导项设为第一启动(rEFInd 保留作后备):
(编号以你自己
pkexec efibootmgr -v的输出为准,0000 是 deepin、0001 是 rEFInd。)重启,你会先看到一行 "Loading bootloader..." 闪过,然后——deepin 的主题图形菜单正常显示。
后记
三点说明,避免误解和后顾之忧:
▸ 万一需要回退:如何一键恢复原样
万一 GRUB 又黑屏进不去系统:开机时按住 Option (Alt) 键,在苹果启动选择器里选 rEFInd,即可照常进入系统再排查。
▸ 将来上游修复后:如何优雅退出本方案
只需删除垫场脚本并重新生成配置(另两项对现代硬件无害,可留):
判断标准:
grub --version不再是 2.12 系列,或社区不再复现该问题时,即可清理。参考资料:
deepin,友你更好!