
说个实话很多人除了装机时见过一眼自己的开机引导界面之后几年里都不会再看第二次。麒麟系统的默认GRUB界面不算难看经典的深色渐变背景配上简单菜单信息清楚但跟“好看”没有半点关系。想把开机那几秒钟换成自己喜欢的图、公司品牌图或者一段极简纯色是一件技术含量不高但细节极多的事网上教程要么只给命令不给原因要么针对Ubuntu的路径照抄到麒麟上直接失效。这篇文章把我自己在麒麟系统上折腾GRUB背景图的完整过程写下来包括图片该怎么准备、两种生效配置怎么选、双系统机器会遇到什么特殊情况以及开机后没图时按什么顺序排查。内容适配不同基础的读者完全没接触过引导加载器的能照着做老手也能从里面捞几条省时间的经验。1. GRUB在启动链里的位置改的是开机画面不是桌面壁纸1.1 从按下电源键到看到登录窗口中间这几秒发生了什么很多第一次改GRUB背景的人有个误区以为开机画面是系统的一部分改了桌面壁纸就等于改了开机画面。实际上这两个东西相隔天远地远。按下电源键后机器先做硬件自检然后BIOS或UEFI找到启动设备读入引导加载器。麒麟系统默认用的引导加载器就是GRUBGrand Unified Bootloader的缩写它在这个时间点接管屏幕从文件系统里把内核镜像加载进内存再跳转到内核后续的事情才交给操作系统的启动流程。等到你看到麒麟桌面那应该是登录界面的时候GRUB早就退出画面了。所以GRUB背景图的本质是引导加载器自己在图形模式下绘制的一张图。它不经过X11或者Wayland这套桌面图形栈不读取你的桌面配置也不走任何系统服务。所有跟这张图相关的设置最终都要写进GRUB自己读取的菜单文件里也就是/boot/grub/grub.cfg。这个区别解释了为什么“桌面壁纸切得很顺但开机背景怎么改都不对”——你改错了地方。桌面壁纸归桌面环境管理开机背景归GRUB管理两者的配置文件完全不互通。1.2 默认界面为什么总是一副“程序员脸”麒麟系统的默认GRUB界面正常情况下是深色渐变底、白色文字菜单简洁但很朴素。GRUB默认不开图形输出的时候甚至干脆是一块纯色背景加一堆字符类似很久以前的DOS界面。设计成这样不是偷懒而是引导加载器面临的工作环境比完整的操作系统恶劣得多它必须在各种显卡驱动尚未加载的裸机环境下工作只能依靠主板固件提供的帧缓冲framebuffer来输出图像。这就是关键限制的来源GRUB能够调用的图形模式依赖硬件固件给它的那几种分辨率。它不像桌面系统那样可以随便拉一个分辨率让显卡驱动去适配针对特定显卡GRUB可能只拿到一小撮选项比如1366x768、1024x768、800x600。你准备了一张4K的图GRUB未必有能力按4K输出。明白这一层之后很多“怎么我的图显示不对”的困惑就会自动解除不是你步骤错了是这个引导加载器的工作机制决定的。改GRUB背景图本质上是在一个分辨率选项有限的裸机环境下把一张符合规范的位图正确加载并绘制出来。提示修改GRUB配置并不会损坏硬盘数据真正启动不了的时候用系统安装U盘进入救援模式也能把配置改回来。但“能救回来”不等于“不用备份”启动流程复杂时犯错的代价是浪费几十分钟而不是损失数据。所以刷配置前请先备份。2. 先把图片做成GRUB能懂的样子格式、色深与分辨率2.1 为什么选PNG而不是JPG格式背后是16位色深的现实GRUB 2支持不少图像格式包括PNG、JPEG、TGA。但实际做下来我会毫不犹豫地选PNG。原因是GRUB在图形模式下绘制图像时受到帧缓冲色深的限制输出效果远比不上你把图片放到桌面背景时看到的精细度。最直接的表现是大面积渐变区域会出现一道道肉眼可见的色带原本平滑的夜空渐变在开机画面上会变成一圈圈明显的色环。JPEG因为本身是有损压缩会在暗部产生块状噪点在GRUB的16位色深下这些噪点会被放大看起来脏兮兮的。PNG虽然是无损压缩在色深受限时仍然会有色带但至少不会附加一层压缩噪点。一句话总结JPG的压缩痕迹在低色深环境里藏不住PNG没这个问题。如果你的原始素材是JPG第一步不是直接用而是先转成PNG再做后续处理。2.2 分辨率你说了不算硬件视频模式说了算图片的分辨率应该跟什么对齐不是你的显示器分辨率而是GRUB在你这台机器上实际可用的视频模式。这是最容易踩的坑。查看可用视频模式的办法很简单。开机进入GRUB菜单界面后按c键进入GRUB命令行输入grub videoinfo屏幕上会列出当前机器支持的视频模式。比如某台核显笔记本可能只给出1366x768、1024x768、800x600这几项。看到列表后设置图片分辨率的最稳做法是选择其中最大的一个通常是你的屏幕物理分辨率。如果你不想每次重启都进GRUB命令去看也可以直接在系统里查。很多发行版装好之后/sys/class/drm/下面会反映出显卡支持的模式但那个列表掺杂了内核驱动能力跟GRUB实际拿到的固件模式不完全一致。实测下来还是GRUB命令行里videoinfo的结果最准确。图片分辨率本身限制在这几个方面过大的图片会让GRUB读取变慢启动阶段加载大文件时停顿感非常明显得不偿失。图片分辨率超过硬件能力时GRUB可能忽略它并回退到纯文本模式。分辨率不匹配时图片会被裁剪或拉伸构图直接毁掉。我常用的安全策略是准备一张1920x1080的PNG。这个尺寸在大多数机器上都能找到对应模式即使硬件只支持1366x768GRUB也会按比例缩放显示。当然缩放效果和它在桌面上的清晰度没法比。2.3 转换命令与肉眼验收标准拿到一张心仪的图先用图像处理工具做转换。命令大致长这样convert input.jpg -resize 1920x1080! -colorspace sRGB -depth 8 -strip bg.png注意1920x1080后面的感叹号表示强制缩放忽略原图宽高比。如果你不想让构图变形可以先去-resize填一个不带感叹号的尺寸等比缩放后再-extent扩展画布。转换之后对照下面几个标准验收画面中央区域不要放重要元素。GRUB菜单会叠加在这个位置文字和图片元素容易互相干扰。大面积纯色或者纹理简单的区域适合做菜单底色最省心。图片饱和度不要太高GRUB的色深渲染会把高饱和颜色弄得刺眼且断层严重。文件名不要用中文和空格。GRUB解析带空格的路径需要额外转义纯英文加数字最省事。关于色带问题我的经验是图片里越接近纯黑纯白区域越容易出现断层。如果想减少色带可以用图片处理软件做轻微的高斯模糊把颜色过渡摊开色带边界会柔和很多。3. 两种生效路径从配置变量到手写启动脚本3.1 路径A改GRUB_BACKGROUND变量最快最传统的做法是修改/etc/default/grub文件添加一个环境变量让GRUB的配置生成脚本知道背景图位置。具体操作先把图片复制到GRUB能读取的固定目录sudo cp bg.png /boot/grub/然后编辑/etc/default/grub在里面加一行GRUB_BACKGROUND/boot/grub/bg.png接着重新生成GRUB配置sudo update-grub这个命令会把/etc/default/grub、/etc/grub.d/目录下的脚本聚合重新生成/boot/grub/grub.cfg。执行之后看一下输出正常情况下会提示找到背景图比如Found background image /boot/grub/bg.png然后重启就能看到效果。但这里有个坑不同发行版对GRUB_BACKGROUND变量的支持程度不一样。麒麟系统基于Debian系配置生成脚本里有一套独立的主题检测逻辑它会优先检查系统自带的桌面壁纸目录而且对GRUB_BACKGROUND变量的处理方式在不同版本之间有过调整。我在一些机器上遇到过设置了变量但重启无效的情况原因就是生成的配置里根本没有写入background_image命令。提示如果你走路径A重启后没看到图不要反复重启验证浪费生命。直接跳到3.3的验证步骤看grub.cfg里到底有没有写入背景指令。3.2 路径B自定义启动脚本最稳稳定压倒一切的时候我推荐路径B自己在/etc/grub.d/下写一个专属脚本。这个目录下的所有可执行文件都会在运行update-grub时被依次执行最终结果拼装进grub.cfg。自己写脚本等于自己控制GRUB启动时的完整绘制逻辑绕开系统对GRUB_BACKGROUND的各版本差异。创建一个文件/etc/grub.d/10_custom_backgroundsudo nano /etc/grub.d/10_custom_background内容如下#!/bin/sh cat EOF insmod all_video insmod gfxterm insmod png set gfxmodeauto terminal_output gfxterm if background_image /boot/grub/bg.png; then set color_normalwhite/black set color_highlightyellow/black set menu_color_normalwhite/black set menu_color_highlightyellow/black else set color_normalwhite/black set color_highlightcyan/blue set menu_color_normalcyan/blue set menu_color_highlightwhite/blue fi EOF保存后给脚本加上可执行权限sudo chmod x /etc/grub.d/10_custom_background再跑一遍sudo update-grub这个脚本的核心是background_image命令。它的执行结果会被if分支捕获图片加载成功时用自定义文字配色加载失败时回退到默认蓝色配色避免出现“图片没加载成功还把文字颜色搞乱”的双重意外。解释一下脚本各段的作用insmod是加载GRUB模块由于我们不知道目标机器到底是核显还是独显all_video会把可能用到的显卡驱动模块都加载一遍代价极小但兼容性极好。gfxmodeauto让GRUB自己选一个合适的图形模式。terminal_output gfxterm是把输出从纯文本切换成图形模式这一步没有执行的话后面加载背景图没有意义。3.3 验证与回退无论走哪条路径都别直接重启先在系统里检查生成结果sudo grep -n background_image /boot/grub/grub.cfg能看到一行类似if background_image /boot/grub/bg.png; then说明背景指令已经写进启动配置了。如果没有这一行说明路径A在你这台机器上没生效老老实实换路径B。重启后如果效果不对回退方法也很简单。路径A就把/etc/default/grub里的GRUB_BACKGROUND那一行删掉路径B就把10_custom_background这个脚本删掉或改后缀名然后重新执行sudo update-grub或者在开机进GRUB菜单时按c进入命令行直接手动执行grub background_image /boot/grub/bg.png这个测试非常直观图片能不能加载、当前模式支不支持一眼就知道。如果手动执行都失败说明问题出在图片或硬件模式上不是配置路径的锅。4. 双系统与其他“意外环境”里的特殊处理4.1 多系统菜单图片有了一堆选项排版问题反而更突出装双系统的人不在少数麒麟配上Windows开机时GRUB会把两个系统都列在菜单里。这种情况下背景图能不能显示跟原理没有冲突但排版和视觉效果有新的讲究。首先是菜单条目变多。如果电脑还带厂商恢复分区Windows恢复环境也可能被GRUB识别成一个独立启动项菜单项可能多达三四个甚至更多。一张精心设计的背景图中央区域原本预留了给一行两行菜单的空间结果菜单多出来一截遮住图片主体部分观感立刻打折扣。其次是Windows引导项的文字格式。GRUB默认给Windows Boot Manager生成的菜单项很长如果图片本身带浅色文字或者高对比图案白色的菜单文字和背景可能糊成一片。我的建议是把菜单条颜色固定下来不要在背景图里强依赖颜色对比比如脚本中把menu_color_highlight设为醒目的深蓝色加亮字菜单在高亮与未选中状态之间拉开差距。另外如果你在Windows侧看到开机画面是正常的Windows logo不要紧张。那是Windows引导器自己的工作结果与GRUB背景图无关。只要在GRUB菜单选择Windows项之后界面由Windows自己的引导流程接管。反过来如果某次开机直接进了Windows没有经过GRUB菜单那多半不是背景图的问题而是启动顺序被BIOS/UEFI改了或者另一个系统的引导项被厂商的恢复分区覆盖了这种情况要去固件设置里检查启动项顺序。4.2 老硬件与独显帧缓冲模式少背景图可能直接“隐身”显卡驱动没有加载的GRUB阶段所有画面都依赖主板固件提供的帧缓冲模式。核显机器一般还好常见分辨率基本都在一些老独显或者比较新的独显在特定固件版本下可用视频模式可能非常有限好一点的能给出1024x768差的甚至只有800x600。这种机器上强行用1920x1080的图会怎么样GRUB会尝试加载图片但最终因为分辨率不匹配直接放弃回到纯文本模式你的自定义背景图就这么“隐身”了。排查时看到默认的纯文本界面别急着怀疑脚本写错了先检查视频模式。这种情况下的解法有两个一是把图片转成机器支持的分辨率比如1024x768二是在/etc/default/grub里设置GRUB_GFXMODE1024x768,800x600,auto让GRUB优先在列表里挑第一个能用的模式同时也兼容后续的自动模式。我接触过一些N卡和A卡混合交火的游戏本videoinfo列出的模式五花八门但实际显示输出经常不稳定。对这些机器最稳妥的不是追求满分辨率背景而是尽量让背景图低分辨率化。开机画面本来就是一闪而过的事清晰度损失的观感代价远小于重启后没有背景图的失落感。5. 开机没图的排查链路5.1 先问两句图片有没有加载文本模式是否已经接管遇到“开机没图”的情况我习惯先按一套固定顺序排查不瞎猜。第一个要区分的是现象开机后是“完全没有图形界面看到满屏字符菜单”还是“有图形界面但没有背景图只显示纯色底”。前者是GRUB根本没有进入图形模式后者是图形模式正常但图片加载失败。两种现象的问题根源完全不同。如果是满屏字符菜单说明gfxterm图形模块没生效或者帧缓冲模式不支持。检查点按顺序来grub videoinfo看是否有可用的图形模式。如果列表是空的说明当前固件没有提供帧缓冲支持背景图这条路走不通只能放弃图形化。如果列表正常就在GRUB命令行依次手动执行grub insmod all_video grub insmod gfxterm grub terminal_output gfxterm grub background_image /boot/grub/bg.png执行到background_image时可以看它返回什么。GRUB命令执行失败不会弹窗提示但background_image失败后后续配色逻辑会走else分支界面表现就是没有图。手动执行能确认到底是模块问题还是图片问题。5.2 找到“抢戏”的主题文件背景图不是越多越好另一种很隐蔽的情况是背景图在grub.cfg里确实存在生成的配置也正确但开机的画面里依然没有它。这种情况八成是主题theme文件抢了背景的绘制权。GRUB的主题机制和简单的background_image是两个层级。主题文件通过set theme指令加载主题内部会定义自己的背景图、字体、菜单框样式。一旦主题被启用它内部指定的背景优先级高于外部background_image设置你后写的背景命令要么被覆盖要么被后续绘制的主题背景盖住。检查方法grep -n theme /boot/grub/grub.cfg如果看到set theme这样的行说明当前使用了主题。麒麟系统在部分版本会默认带一套品牌主题主题里可能有自己的背景图。这时候有两条路一条是把主题文件里背景图换成你的图另一条是把主题禁用回到纯background_image方案。我个人偏向后者因为主题的自定义项太多一次改动牵扯字体、菜单框、选择器等多种资源排查面太大了。禁用主题只需要注释掉/etc/default/grub里的GRUB_THEME变量或者把/etc/grub.d/里相关脚本的可执行权限去掉然后重新update-grub。5.3 别忘了检查“看起来像没成功其实是成功了”这类最容易被误判背景图加载成功了但图片本身的配色和菜单文字叠在一起观感跟默认界面差不了太多。比如你选了一张深蓝色大背景图片GRUB菜单又是蓝底白字两者的边界感极弱很多人以为自己没改成功。我的验证技巧是把背景图里故意放一个非常规颜色的小色块在角落重启后如果能看到这个色块说明背景图完全正常剩下的只是视觉设计取舍。这个办法成本极低却能直接排除配置问题省下大量排查时间。6. 从一张背景图到GRUB主题进阶但不过度6.1 主题与背景的层级关系单张背景图是最原始的定制方式它能实现的开机效果也就停留在“换了一张壁纸”。如果你想要字体、菜单框、启动时的倒计时位置都变得协调绕不开GRUB主题。主题本质上是一个目录里面放着theme.txt描述文件、背景图、字体文件再用set theme指向这个目录。GRUB启动后会读取描述文件里的规则把背景、菜单、进度条全部按规则绘制。相比单张背景图主题把所有视觉元素的管理集中在一个配置文件里可维护性高得多。在主题文件里声明背景图的关键字段很简单desktop-image: /boot/grub/themes/custom/background.png但这只是冰山一角。一个完整主题还会包括title-text:标题文字、item的字体颜色、highlight的选择框样式等。想快速上手一个成本最低的做法是找一份现成的开源GRUB主题模板把它的图片路径替换成自己的背景图先跑通再逐步改细节。6.2 自制主题的骨架与颜色变量踩坑记录自制一个最简单主题只需要几个文件主题目录、theme.txt、PNG背景图。theme.txt的骨架大致如下desktop-image: bg.png title-text: terminal-font: DejaVu Sans Mono Regular 16 terminal-box: terminal_box_*.png boot_menu { top 60% left 50% width 40% item_font DejaVu Sans 16 item_color #dddddd selected_item_color #000000 selected_item_pixmap_style select_*.png }这部分看起来不长但坑都在细节item_font指定的字体名称和实际安装的GRUB字体名称必须严格一致写错一个字字体就消失selected_item_pixmap_style如果指向不存在的文件菜单选择框会直接空白相对路径都以主题目录为基准不要把背景图放出去再写相对路径。做过一轮之后我的体会是主题定制适合已经通过背景图走通整个流程、还想继续折腾的人。追求快速出效果的话单张背景图加自定义菜单颜色已经能覆盖绝大多数需求主题更像锦上添花而不是必选项。我自己用下来最稳定的一套组合是PNG格式、分辨率贴着硬件能力走、通过/etc/grub.d/脚本注入背景、同时在if else分支里把菜单颜色兜底写好。这套配置迁移到不同机器上从核显笔记本到老独显台式机都表现得很好。如果你也想把开机画面从“能用”变成“顺眼”照着这个链路走一遍大概率能少走不少弯路。