别再忍受千篇一律的开机画面:Ventoy主题定制完整指南
【免费下载链接】VentoyA new bootable USB solution.项目地址: https://gitcode.com/GitHub_Trending/ve/Ventoy
每次插上U盘开机,看到的都是同一张蓝底白字的GRUB菜单?其实Ventoy支持自定义主题——你只需在U盘的ventoy目录里改一份ventoy.json、放一个theme.txt,就能把启动菜单的背景、配色、布局、状态信息全部换成自己的样式。无论你是个人装机还是给团队批量做启动盘,都能用这套方法让每一块U盘都有统一的专属界面,全程不需要重新编译任何东西。
默认菜单的三个槽点
如果你已经用过Ventoy,大概率也有同感:
- 背景是一张固定的仓库内默认背景图,换成任何设备都是同一个样子;
- 快捷键提示、内存磁盘状态这些有用信息混在角落,颜色大小全靠出厂设置;
- 给同事分发的U盘和自家的长得一模一样,分不清哪块是测试盘。
好消息是:Ventoy的主题系统直接复用GRUB2的theme.txt语法,所以"换皮肤"这件事在Ventoy里是一次性投入——主题文件做好一次,之后U盘怎么拷贝、系统怎么重装,菜单都一直是你的样式。
三件套:主题由哪些文件决定
动手之前,先搞清楚一次开机时主题是怎么被加载的。整个链条只有三个角色,都放在U盘的ventoy目录里:
| 角色 | 位置 | 作用 |
|---|---|---|
| 配置文件 | ventoy/ventoy.json | 用theme字段指定主题文件路径、显示模式和配色 |
| 主题定义 | ventoy/下任意位置的theme.txt | 标准GRUB主题语法:背景、菜单框、文字颜色、布局 |
| 素材文件 | 与 theme.txt 同目录的图片 | 背景图、菜单边框(menu_*.png)、选中条、滚动条等 |
加载顺序很简单:grub.cfg先读ventoy.json里的theme.file;只要这个变量非空就加载你指定的主题,否则回退到出厂的themes/ventoy/theme.txt。也就是说,你不需要删除或修改任何出厂文件,加一个文件就能覆盖默认主题。
另外,display_mode这一项决定菜单以什么形态显示,不同场景用不同值:
| display_mode | 适用场景 |
|---|---|
| GUI | 普通桌面、笔记本,图形化菜单(主题美化只在这种模式下生效) |
| CLI | 纯文本终端,服务器机房常见 |
| serial / serial_console | 串口输出,无显示器的工控机、旧服务器 |
最省事的三步上手流程
跟着做,三步之后你的U盘就会带上自己的菜单。
第1步:建一个主题目录。在U盘根目录的ventoy下新建mytheme文件夹,放入theme.txt和一张背景图(推荐1024x768的PNG,与出厂主题同规格)。
第2步:写一个最小可用的 theme.txt。只保留这几行,启动即可生效:
desktop-image: "background.png" title-text: "我的启动盘" title-color: "#ffffff" + boot_menu { left = 10% width = 80% top = 30% height = 50% item_color = "#ffffff" selected_item_color = "#f2f2f2" }第3步:在 ventoy.json 里指向它。如果U盘上还没有这个文件,新建一个;有则在theme字段中修改file指向:
{ "theme": { "file": "/ventoy/mytheme/theme.txt", "display_mode": "GUI", "ventoy_color": "#0000ff" } }改完插入开机验证:背景换成你的图、标题变成你写的字,说明整条链路已经通了。这一步完成后,你就拥有了一个可以随意改色的"底版"主题。
想直接抄作业的话,仓库里就带着一份完整的官方主题可参考,包含边框、选中条、滚动条全套素材:
- 默认主题目录:INSTALL/grub/themes/ventoy/
- 插件示例主题:INSTALL/plugin/ventoy/theme/
- ventoy.json 完整示例(含主题、图标、别名等全部字段):INSTALL/plugin/ventoy/ventoy.json
进阶:让菜单开口说话
底版通了之后,两个玩法最能提升质感。
1. 状态行自动更新。theme.txt 支持一组@VTOY_...@占位符,启动时会被替换成实时信息,用hbox+label摆进任意位置即可:
+ hbox { left = 30% top = 95% width = 10% height = 25 + label {text = "@VTOY_HOTKEY_TIP@" color = "blue" align = "left"} }常用占位符一览:
| 占位符 | 显示内容 | 适合放在哪 |
|---|---|---|
@VTOY_HOTKEY_TIP@ | 快捷键提示 | 屏幕底部 |
@VTOY_MEM_DISK@ | 内存磁盘状态 | 屏幕底部 |
@VTOY_GRUB2_MODE@ | 当前加载模式 | 底部偏右 |
@TIMEOUT_NOTIFICATION_SHORT@ | 倒计时提示 | 进度条 text 字段 |
2. 用百分比做响应式布局。所有坐标都写%而不是像素,同一块U盘在1024x768的办公显示器和2K笔记本上都能正常排布:
| 写法 | 效果 |
|---|---|
left = 5% | 距离左边界5%,任何分辨率下比例不变 |
top = 95%-25 | 百分比加偏移,精细微调行距 |
width = 80% | 菜单框始终占屏幕宽度的八成 |
专业提示:菜单边框遵循9-patch命名规则——把所有边框图片统一命名为
menu_开头(menu_n、menu_s、menu_ne……),再在 theme.txt 里写menu_pixmap_style = "menu_*.png",GRUB会自动拼出可拉伸的边框。改主题时只需替换同名图片,一行配置都不用动。
顺手加上:按发行版显示菜单图标
如果你的U盘里混着Ubuntu、Deepin、RHEL的ISO,可以让菜单按"发行版"自动分类并挂上图标。素材就放在主题目录的icons子文件夹里(官方示例有 ubuntu.png、deepin.png、red-hat.png),然后在ventoy.json里做名字映射:
"menu_class": [ { "key": "ubuntu", "class": "ubuntu" }, { "key": "deepin", "class": "deepin" }, { "dir": "rhel", "class": "red-hat" } ]规则很直白:ISO文件名或所在目录名匹配key/dir,就归入对应的class,菜单项前显示icons/<class>.png。这一步完成后,一长串ISO列表会按系统分组、各带各的图标,找盘效率肉眼可见地提升。
四个高频翻车现场
❓ 现象一:改完重启,菜单还是默认样子。可能原因:路径大小写、文件没放对位置。Ventoy明确要求ventoy目录和ventoy.json文件名必须全小写,theme.file写的是相对U盘根目录的绝对路径(以/开头)。解决办法:对照检查大小写,把file改成/ventoy/mytheme/theme.txt这种形式再试。
❓ 现象二:菜单出来了,背景却是黑的。可能原因:theme.txt 引用的背景文件名和实际文件名对不上,或图片不在同目录。解决办法:确认desktop-image里的文件名与素材完全一致(含大小写),图片必须放在 theme.txt 同一目录下,格式用PNG最稳。
❓ 现象三:小屏上菜单溢出,大屏上又挤在中间。可能原因:布局写了死像素。解决办法:所有 left/top/width/height 换成百分比,精细调整用"百分比±偏移"的写法(如top = 95%-25),然后在两个不同分辨率的机器上各开一次机验证。
❓ 现象四:状态行位置是空的,一个字符都不显示。可能原因:占位符拼写错误,或该行所在容器宽度太小被裁掉。解决办法:逐字符核对@VTOY_HOTKEY_TIP@这类写法,并确认 hbox 的width足够容纳文字。
动手前最后看一眼清单
ventoy目录与ventoy.json全小写theme.file是/ventoy/开头的绝对路径- 背景图、theme.txt 在同一目录
- 百分比布局已在两种分辨率下验证
现在就把你的背景图丢进ventoy/mytheme/,三分钟后开机就能看到属于自己的菜单。延伸参考:
- 主题加载逻辑源码:INSTALL/grub/grub.cfg
- 默认主题全套素材:INSTALL/grub/themes/ventoy/theme.txt
- 插件示例配置(theme/menu_class/menu_alias 全字段):INSTALL/plugin/ventoy/ventoy.json
【免费下载链接】VentoyA new bootable USB solution.项目地址: https://gitcode.com/GitHub_Trending/ve/Ventoy
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考