麒麟系统自定义开机GRUB背景图:从启动原理到配置实战

发布时间:2026/10/13 12:52:09
麒麟系统自定义开机GRUB背景图:从启动原理到配置实战
1. 项目拆解一次引导界面的定制需求说真的好好的系统在那跑着为什么非要去动开机那个界面这事我一开始也问过自己。直到有一次给一台国产化办公机器做交付用户那边提了个很实际的要求开机菜单和默认的英文引导界面看着太“生硬”想换成单位统一的宣传背景图顺便把菜单文字也调成顺眼的样式我才真正把麒麟系统这套GRUB定制逻辑从头到尾捋了一遍。先聊清楚一个概念麒麟系统这里主要指基于Linux内核深度定制而成的国产操作系统日常使用中跑的是内核、桌面环境和办公套件那一整套。而GRUB是什么呢它是系统启动阶段负责加载内核的引导管理器电脑通电后BIOS或UEFI固件交接控制权GRUB在这个时候弹出菜单、等你选择要启动哪个系统或者倒计时结束自动拉起默认内核。麒麟系统开机时那个深色背景、列出几个启动项的菜单界面就是GRUB的工作舞台。所以“自定义开机GRUB背景图”这句话翻译过来其实是改掉GRUB菜单界面那张默认壁纸让整个引导界面贴合使用场景。它解决的痛点很直接——企事业单位批量部署的机器如果都能显示统一的品牌标识开机体验会更成套有些内网机器还要在引导界面放上操作提示或责任人联系电话方便出问题时第一时间找到维护人。除此之外个人用户纯粹看着默认壁纸腻了想换一张自己喜欢的图片也是一个相当普遍的折腾理由。引用一句我常跟同事说的话能正常启动只是及格线启动过程让用户感到舒服、有归属感那是另一层追求。你别说GRUB这东西不重要人在按下电源键后的前十几秒就形成了一个“这机器到底靠不靠谱”的第一印象一个干净协调的引导界面比桌面壁纸更能留住这种印象。这篇文章的完整操作路径适用于麒麟系统常见的各版本分支其中细节我会用实操时的真实情况来讲解核心思路在其他Linux发行版上也通用。本文适合对系统有基本命令行操作能力、想给机器做形象定制或批量交付调优的读者也欢迎纯新手带着一台不重要的测试机边看边试。2. 前期准备搞明白GRUB配置体系的来龙去脉在动手换图之前千万别急着去找配置文件一顿乱改。引导这块出问题不像桌面环境出错那么好恢复桌面起不来你还能进命令行GRUB要是配置坏了开机可能直接卡在引导残留界面或者掉进grub rescue壳子那才叫真麻烦。所以先搞清楚麒麟系统里GRUB这套体系是长什么样的才能做到心里有底。2.1 GRUB配置里的关键目录和文件麒麟系统跟大多数Linux发行版一样使用GRUB 2作为默认引导程序它的配置体系可以简单分成两层。第一层是静态模板层目录在/etc/grub.d/里面装着生成引导菜单各大板块的脚本——有负责系统入口的、有负责内存检测的、有负责自定义条目的还有一个重要的00_header文件负责装载整体样式的头部配置。第二层是动态生成层系统通过执行update-grub命令把模板脚本和/etc/default/grub里的变量组合、运算最终生成一个巨型的/boot/grub/grub.cfg文件这个文件才是引导时真正被读取的最终配置。打开/boot/grub/grub.cfg开头部分你会看到类似这样的片段set default0 set timeout5 load_video set gfxpayloadkeep insmod gfxterm insmod png insmod jpeg terminal_output gfxterm这几行就是决定“背景图能不能正常显示”的先决条件。insmod png和insmod jpeg分别加载了PNG和JPEG图片格式的GRUB驱动模块terminal_output gfxterm把输出模式从枯燥的字符终端切换成图形终端。只有这些模块被加载、终端处于图形模式后续设置的背景图才不是一张“被印在字符串上的摆设”。另一件跟主题直接挂钩的事是麒麟系统默认通常启用了一套GRUB主题。所谓主题就是一组可以整体定义背景图、菜单框、字体颜色和位置信息的资源包。主题文件一般被安装在/boot/grub/themes/目录下每个主题对应一个子目录目录里包含主题描述文件theme.txt以及背景图、字体文件这些素材。你可能会问既然麒麟默认已经有主题了我直接替换里面的背景图文件不就行了答案是——分情况。如果系统用的主题本身就引用了固定的图片路径那替换同路径文件后更新配置确实有效但更通用的做法是加一条独立的背景图设置这不会跟主题颜色布局产生耦合后续回滚也更方便。我接下来讲的思路两种方式都会涉及让你在不同版本里都能顺畅落地。2.2 图画规格怎么选才不会翻车背景图能不能显示得漂亮图片规格是第一个硬门槛。很多人第一步就栽在这兴冲冲找了一张4K壁纸放进去结果重启发现GRUB界面还是黑的或者只显示一个小角标为什么GRUB的图形驱动能力跟桌面环境完全是两码事它不负责缩放兼容性也远远不如桌面系统。显示背景图时GRUB会尽量以原生分辨率把图片呈现出来遇到尺寸不匹配的情况不同版本的行为还不一样有的直接不显示、有的居中截取、有的干错弄成平铺拉伸变成抽象画。所以说最稳妥的做法是提前把图片处理成跟目标机器的屏幕分辨率一致或者至少做到等比例分辨率。这里给几个实用建议图片格式优先选PNG其次JPG别用BMP和WebP。GRUB 2内置模块对PNG和JPG的支持最成熟BMP在某些老版本下也能显示但体积大、还容易遇到色深问题。分辨率方面你可以先运行xrandr或在显示设置里看一下屏幕原生分辨率。办公机器常见的1920x1080对应图片做1920x1080如果机器是1366x768的老屏幕你就准备1366x768。没有确切信息时保守选1024x768也行反正GRUB显示出来会很清晰。有一个非常容易被忽略的点GRUB在图形模式下显示PNG时对某些不常见的色深支持不好。建议用绘图工具导出时选择24位色深或32位色深的标准PNG不要用16位色或带特殊Alpha通道的版本。文件大小别太夸张几十MB的壁纸就别放进引导区了。引导分区一般空间不大而且GRUB在启动早期读取一个超大图片会把启动速度拖慢一截。正常压到2MB以内属于安全范围。在这个环节我用的工具是系统自带的绘图软件操作也不复杂打开目标图片按快捷键调出缩放面板输入目标分辨率应用导出时选PNG格式并确认位深度在合理范围就完成了。如果你手头只有在线图片也可以在浏览器中通过开发者工具查看原图地址下载后本地同样处理没必要专门装一堆重型软件。2.3 备份永远不要跳过的一步下面提到的任何操作都需要root权限如果你平时用的是普通用户请在命令前自行加sudo。很多教程上下文不写这点容易让新手在后面几个步骤卡住这里先统一提个醒。在动GRUB配置之前备份成本实在太低、收益又极高没理由不做。你要备份的无非两个东西当前的GRUB配置文件和原来的背景图素材。命令行下三条命令就够cp /etc/default/grub /etc/default/grub.bak cp /boot/grub/grub.cfg /boot/grub/grub.cfg.bak cp -r /boot/grub/themes /boot/grub/themes.bak如果后面操作出了问题一条拷贝命令就能把系统恢复到修改前的状态。我见过不少人省略备份结果改坏之后只能翻资料、进live盘抢救耗时几小时就为省那几秒钟命令不值当。顺便说后续万一要应急恢复如果GRUB还能显示菜单开机时按e键进入编辑模式手动指定正确的引导根分区也能进系统再恢复备份文件。3. 方案选型直接换图和写变量哪条路更适合你背景图的设置方式在实操层面大致可以分成两派一派是“替换派”直接把系统默认主题里的背景图片文件用新图片覆盖另一派是“变量派”在/etc/default/grub里定义GRUB_BACKGROUND变量的路径让GRUB生成配置时把背景设置写进最终的grub.cfg。两派各有适用场景我分别讲一下。3.1 替换派简单直接但要认准主题路径先找到当前生效的主题目录。麒麟系统的GRUB配置里主题路径通常写在/etc/default/grub的GRUB_THEME变量中也可以在生成的grub.cfg里搜索theme关键字。实操里我见过两种常见路径/boot/grub/themes/kylin//boot/grub/themes/starfield/进入主题目录后你会看到类似background.png、theme.txt、font.pf2这样的文件。替换派的做法就是把自己的图片复制为background.png覆盖老文件。cp /path/to/your-custom.png /boot/grub/themes/kylin/background.png然后重新生成GRUB配置update-grub这个方案的优点是理解成本低、没有任何多余的耦合项缺点则是你等于把主题唯一的图片资源换了样万一以后想换回官方默认还得靠之前备份的原图恢复。另外要注意有些主题目录里的背景图文件名不叫background.png而是background.jpg或者干脆叫kylin.png务必先看清theme.txt里desktop-image那行写的是什么路径再决定覆盖哪个文件。3.2 变量派不碰原主题灵活可控如果不希望改动主题原始结构只在最终生成的配置里追加背景设置那就用GRUB_BACKGROUND变量。修改/etc/default/grub文件在里面新增或取消注释一行GRUB_BACKGROUND/boot/grub/custom_background.png这里建议不要把自定义图片随便放在/home下因为GRUB早期阶段读取的是引导分区内容有些分区格式和路径在初始环境里不一定可读。放在/boot/grub/下最保险与GRUB同处一个分区避免跨分区读取的潜在问题。修改后依然执行update-grub执行完毕你可以顺手查一下生成的配置文件确认背景设置生效grep -n background /boot/grub/grub.cfg正常会看到类似set color_normal...、background_image ...的相关行。变量派的好处是逻辑清晰切换图片时只要改路径指向更新后就好缺点嘛某些版本下如果默认主题还在加载GRUB_BACKGROUND可能与主题内置的背景互相覆盖谁生效取决于加载顺序。遇到这种情况最简单的处理方式是直接走替换派或者在主题描述文件里把背景图那一项改成空置。3.3 我推荐的综合方案在我做过的实际定制里用得最顺手的是这么一套组合拳第一图片放到/boot/grub/下文件名改成有辨识度的名字比如company_bg.png避免跟默认资源混在一起。第二在/etc/default/grub里显式声明GRUB_BACKGROUND。第三如果发现这样设置后背景还是没有生效再去查看当前主题的theme.txt定位到desktop-image配置项把它改成指向同一个背景图路径。这个方案可以说是双保险既绕开了主题内置图片的路径强依赖又能在主题正常加载的前提下把背景图干干净净地替换掉。下面实战章节我会沿着这套思路把每个命令拆开讲清楚。4. 实操整条链路走一遍含命令和现场检查这节是全文的主干按部就班照做即可。我会把每一步的意图和常见坑点同步交代保证你既能照着敲又知道自己在干什么。4.1 目标机器信息的采集开工前先确认几件事拿着确定的信息再动手比你盲改强得多。第一步确认屏幕分辨率。在麒麟桌面环境里打开终端输入xrandr | grep *输出里的1920x1080、1366x768这类数字就是当前分辨率记下来。多显示器环境就主要看主显示器因为GRUB阶段通常只认主输出。第二步确认GRUB是否处于图形模式。检查/etc/default/grub里GRUB_TERMINAL有没有被设置成console如果是即便你设置了背景图终端也只会以纯字符模式展示背景图无法呈现。正常情况这一项是注释状态或设为gfxterm。第三步找到正在生效的主题目录。执行cat /etc/default/grub | grep GRUB_THEME如果输出为空就在grub.cfg里找grep -n set theme /boot/grub/grub.cfg记录主题路径后面可能用到。4.2 图片准备与放置我现在以1920x1080分辨率为例走一遍。在/home当前用户目录下新建一个工作文件夹把选中的图片放进去用系统绘图工具调整分辨率。导出时文件名我建议起得简短些不要用中文名和空格——GRUB的字体加载对非ASCII路径支持参差不齐中文路径在早期引导阶段很容易变成乱码或直接找不到文件没必要冒这个险。我通常起名为custom_bg.png。导出完毕后用管理员权限把它复制进/boot/grub/sudo cp /home/你的用户名/图片目录/custom_bg.png /boot/grub/顺手给一个合理的文件权限sudo chmod 644 /boot/grub/custom_bg.png644权限的意思是文件所有者可读写、其他用户可读GRUB读取它没有任何障碍。有些教程会省掉这一步但万一你未来设置了什么奇怪的umask复制出来的文件权限是600那除了root谁都读不了GRUB自然也就显示不了背景。4.3 配置文件的修改用编辑器打开/etc/default/grub需要root权限在文件里找个位置加一行GRUB_BACKGROUND/boot/grub/custom_bg.png顺手检查同一文件里有没有GRUB_TIMEOUT这一项它是开机菜单倒计时秒数。默认可能是5秒或10秒如果你希望开机过程更利落可以改成3秒但注意不要在批量部署的机器上把时间设得太短——普通用户还没看清菜单就自动进系统了万一想手动选其他启动项会手忙脚乱。保存文件后执行配置更新sudo update-grub这条命令的本质是运行grub-mkconfig按照/etc/default/grub设置的变量和/etc/grub.d/下的模板脚本重新生成grub.cfg。输出内容里你会看到类似“正在生成 grub 配置文件”的滚动信息留意有没有error或not found字样正常情况应当在最终生成完毕后退出码为0。4.4 验证与测试别直接重启了事能不能别改完就马上重启很多人就是吃了这个亏——手一快重启发现界面不对又得重新开机进系统捣鼓。稳妥的验证流程是这样的先确认配置文件里真的写入了背景图指令sudo grep -n background_image\|GRUB_BACKGROUND /boot/grub/grub.cfg如果有内容输出说明背景设置已经进入了实际生效的配置。然后如果你想在重启前预览GRUB界面的实际效果可以借助grub-emu或者虚拟机。麒麟桌面环境自带的软件中心能搜到grub-emu它可以在当前系统内模拟GRUB界面。但说实话它模拟的字体渲染跟真实固件启动还有差异我的习惯是直接用一台不重要的测试机做真实重启验证真机测试才是最终标准。真实重启后留意三个点一是背景图是否完整显示不花屏二是菜单文字是否清晰可读、没有被背景图颜色“吃掉”三是进系统这个动作是否顺畅没有明显变慢。只要这三个点都正常这次定制就成功了。如果重启后背景图没出现不要急先看下面这节问题排查。4.5 其他可选项把启动菜单文字也调顺手背景图搞定后顺带做点锦上添花的事很值得。比如菜单文字的默认颜色有时候跟背景图撞色导致字体看不清。调整方法是在/etc/default/grub里追加GRUB_COLOR_NORMALwhite/black GRUB_COLOR_HIGHLIGHTblack/white这两行的格式是“前景色/背景色”含义分别是普通菜单项的白字黑底和选中项的黑字白底。实际调色时你可以用white、black、yellow、cyan等基础色值组合甚至支持#RRGGBB格式。我建议选跟背景图对比度高的配色千万别选跟背景融为一体的颜色不然菜单项就得靠猜了。还有一个高可选用的参数GRUB_MENU_PICTURE这个是非标准变量官方文档里不一定有但某些改版GRUB支持它。我不建议在通用教程里依赖它因为它太不通用。我们还是用标准GRUB_BACKGROUND最靠谱。5. 把图片写进主题当变量法不生效时的替补方案如果你按照变量法设置完重启后发现GRUB界面连图都不显示很大概率是因为麒麟系统的GRUB默认走的是主题加载逻辑主题本身的desktop-image指定了它自己的背景图且加载顺序覆盖了变量设置。这时候就需要直接改主题文件了。先切换到主题目录cd /boot/grub/themes/kylin ls -l这里你会看到theme.txt文件用编辑器打开它搜索“desktop-image”或“desktop_color”关键字。典型的主题文件里会有类似这样的内容desktop-image: background.png desktop-color: #000000desktop-image指定背景图相对主题目录的文件名desktop-color是底色兜底。现在把theme.txt里的图片引用改掉desktop-image: /boot/grub/custom_bg.png注意这里可以直接写绝对路径也可以写相对路径但绝对路径更保险。保存后重新执行update-grub生成配置再重启验证。如果主题加载很妖怎么改都不显示还有个终极大招把主题整个停用。在/etc/default/grub里注释或删除GRUB_THEME这一行同时保留GRUB_BACKGROUND变量。这样一来GRUB会退回无主题状态此时GRUB_BACKGROUND就能独自掌控背景显示了。代价就是你丢失了主题提供的菜单美化——比如高亮框、字体渲染风格都没了。但换来的是背景图百分之百可控。我一般只在客户要求特别简单的场景下才用这招正常还是优先保住主题。6. 常见问题与排查实录定制GRUB背景图这活儿问题主要集中在图片本身、配置路径、引导模式三个方面。我按自己踩过的坑整理成表格方便你对照现象可能原因解决方案背景图不显示界面一片黑或只有字符终端处于console模式检查GRUB_TERMINAL改为gfxterm后重新生成配置背景图显示但分辨率不对偏小或拉伸图片分辨率与屏幕不一致用绘图工具按屏幕原生分辨率重新导出修改后没有任何变化主题加载顺序覆盖了变量设置改用主题内替换或停用主题菜单文字看不清文字颜色与背景图撞色设置GRUB_COLOR_NORMAL和GRUB_COLOR_HIGHLIGHT背景图能显示但很模糊图片本身分辨率过低换用更高分辨率素材建议不低于屏幕分辨率图片扩展名是PNG但GRUB报不支持文件实际编码格式不规范用绘图工具重新导出为24位或32位标准PNG引导变慢背景图文件过大压缩图片到2MB以内或改用JPG格式找不到theme.txt主题目录选错用grep从grub.cfg里反查真实theme路径update-grub报错配置文件语法错误回看/etc/default/grub里有没有写错的变量名或多余的引号下面挑几个典型问题展开聊聊。6.1 我的一次真实翻车路径带中文导致引导异常有次在给某单位的一体机做定制时需求方发来的图片名称是“企业文化背景图.png”我当时想也没想就复制进了/boot/grub/顺手在配置里写了中文路径。结果update-grub跑完重启后GRUB界面显示成一片空白连菜单项都变透明了。后来排查发现GRUB的字体加载器在读取中文字符路径时产生了乱码导致主题字体和背景都没正常加载。我赶紧重启进系统把文件名改成qiyewenhua_bg.png配置里同步改掉重新生成配置问题才消失。这事给我的教训是引导区里能不用中文就不用中文命令行、配置文件、文件名一律ASCII稳。6.2 猜分辨率不如查分辨率另一回是在一台外接显示器上做验证屏幕是2560x1440但我准备的图是1920x1080结果GRUB背景居中显示四周留出黑边虽说不影响使用但观感很差。后来我用xrandr查了真实分辨率重新出图后就完美铺满了。这里额外提醒一下GRUB初始阶段的默认分辨率不一定等于桌面分辨率有些主板UEFI固件传参保守会给GRUB一个比较低的分辨率比如1024x768。这种情况下就算你放了1920x1080的图GRUB也只会在能力范围内展示。如果你发现无论如何都铺不满可以在GRUB启动菜单里按c进入命令行输入videoinfo查看当前固件支持的分辨率列表再决定图片该怎么做。6.3 更新内核后配置被覆盖了这个问题很隐蔽值得单独说如果你修改了/etc/default/grub后忘了执行update-grub那等你下次更新内核、系统自动帮你重新生成grub.cfg时你的背景设置可能被“顺带”包含进去——如果设置写对了的话。反过来如果你手动改了grub.cfg而没有改/etc/default/grub那么系统一旦执行update-grub你的手动修改就会丢失因为grub.cfg本身就是动态生成的它不是让你手工维护的文件。所有持久化的自定义项务必写在/etc/default/grub变量里或/etc/grub.d/的脚本中。这是GRUB配置体系的基本原则绕过它等于跟系统对着干。7. 经验总结这条流程还能怎么延伸说回文章开头那个需求背景图定制看着是小事但整套处理思路其实能延伸到不少相关场景最后分享几个我常用的延伸玩法供你按需取用。7.1 批量部署时的背景定制企事业单位批量采购的机器往往有几十上百台一台台手动改配置肯定不现实。这时候思路要换成“无人值守脚本统一素材包”你做一次完整的背景替换然后把修改后的/etc/default/grub和背景图压缩成一个包写一个小脚本批量推送后在每台机器上解压、覆盖、执行update-grub。注意批量前先在测试机上跑一遍素材确认分辨率适配、颜色对比度达标不然一个错误配置会铺到所有机器那才是真正的灾难。7.2 从背景图到完整GRUB主题如果你不满足于只换一张图想连菜单框、字体、位置都定制那就去研究一下主题目录里的theme.txt。里面可以定义面板、组件、字体大小、对齐方式。麒麟系统自带的主题本身就是一个起点在它基础上改比从零写主题文件容易得多。改完别忘了对theme.txt做备份这玩意儿语法敏感少个引号都能让整个主题失效。7.3 顺带定制系统启动动画GRUB界面搞定后系统内核加载完、桌面环境起来之前麒麟系统还会显示一个开机动画或logo。这个环节由plymouth负责它的配置跟GRUB是两套东西但定制逻辑类似改图片、改主题、重新生成initramfs。如果你要把开机体验整套统一GRUB背景、plymouth动画、桌面壁纸三件套要一起定制整体效果才协调。讲到这里这一整套“麒麟系统自定义开机GRUB背景图”的操作就算是通透了。说白了GRUB背景图定制不是个花哨事它考验的是你对引导配置体系的理解够不够扎实以及遇到问题时能不能冷静地把链路一步步排查清楚。希望这篇文章能让你少走一些我走过的弯路改图时一次成功。要是你还折腾出什么新鲜玩法欢迎按自己的实践路子继续深入——系统定制这行的乐趣总是藏在动手之后。