Ventoy 主题插件
当你第一眼看到Ventoy的时候,你是什么感觉?不是很漂亮对吧?现在你可以定制你自己的主题了!
Ventoy 的启动菜单是基于 grub2 的,所以所有 grub2 的主题都可以应用在 Ventoy上面。
这个网站上收集了很多非常漂亮的 grub 主题 —— GRUB Themes - Gnome-look.org
- Json 配置参数
推荐使用 VentoyPlugson 工具进行配置,无需手动创建、编辑json文件。请参考 VentoyPlugson
关于 ventoy.json 的位置以及相关说明,请首先参考 插件入口 (*必读)
在镜像分区 /ventoy/ventoy.json
中定义了一个 theme
结构用于描述关于主题的配置参数。
注意你不需要对这里列出来的每一项都做配置,可以只对其中的一项或几项做特殊配置,其他的会使用默认值.
{ "theme": { "file": "/ventoy/theme/blur/theme.txt", "gfxmode": "1920x1080", "display_mode": "GUI", "serial_param": "--unit=0 --speed=9600", "ventoy_left": "5%", "ventoy_top": "95%", "ventoy_color": "#0000ff", "fonts": [ "/ventoy/theme/blur/Hack-12.pf2", "/ventoy/theme/blur/Hack-14.pf2", "/ventoy/theme/blur/Hack-16.pf2" ] } }
关键字 | 类型 | 说明 |
---|---|---|
file |
STRING/STRING ARRAY |
theme.txt 文件的全路径。可以是1个字符串,也可以是字符串数组,例如:"file": [ "/ventoy/theme1/theme.txt", "/ventoy/theme2/theme.txt", "/ventoy/theme3/theme.txt", "/ventoy/theme4/theme.txt" ]当设置为数组时,可以通过 default_file 选项来控制启动时使用哪个主题,也可以随机选择。同时最新版本的 Ventoy 在启动后还可以通过菜单在这些主题之间进行切换,请参考下面的 主题切换。 |
default_file |
INTEGER |
注意该选项只有在 file 是一个数组的时候才有效。其值为一个整数,默认值为0,含义如下:0 : 表示启动时随机选择某个主题生效。(此为默认值)1 : 表示启动时选择第1个主题生效。2 : 表示启动时选择第2个主题生效。3 : 表示启动时选择第3个主题生效。...... |
resolution_fit |
INTEGER |
注意该选项只有在 file 中设置了多个(大于1个)文件、同时 default_file 设置为 0 时才有效,其他情况下无效。含义如下:0 : 不过滤。(此为默认值)1 : 过滤。关于这个选项的详细解释,请参考下面的 resolution_fit 选项说明 |
gfxmode |
STRING |
可选的,可以不设置。grub2 的 gfxmode 参数,默认为 "1024x768" 也可以使用 "max" 这个值,用来在启动时自动选择最大分辨率。 |
display_mode |
STRING |
可选的,可以不设置。菜单显示模式,可以设置为 GUI CLI serial serial_console 默认为 GUI GUI和CLI 分别对应图形模式和文本模式。在有极个别的机器上Ventoy的背景菜单无法显示,或者显示后菜单移动极其缓慢,这种情况可以默认设置为文本模式。 不过,不管GUI还是CLI都是基于VGA显示设备的,如果你的机器上只有串口,你可以设置为 serial 当然,如果既有串口也有VGA设备,则也可以设置为 serial_console 注意:如果菜单名称(文件名)里有中文的话,在文本或serial模式下是无法显示的。 |
serial_param |
STRING |
可选的,可以不设置。只在 display_mode 设置为 serial 或 serial_console 时才生效这个参数用来配置串口的端口号以及波特率等参数,--unit=0 对应 com1 --unit=1 对应 com2 详细描述请参考 https://www.gnu.org/software/grub/manual/grub/grub.html#serial |
ventoy_left |
STRING |
可选的,可以不设置。ventoy版本信息的 X 位置, 默认为 "5%" |
ventoy_top |
STRING |
可选的,可以不设置。ventoy版本信息的 Y 位置, 默认为 "95%" |
ventoy_color |
STRING |
可选的,可以不设置。ventoy版本信息的颜色, 默认为 "#0000ff" |
fonts |
STRING ARRAY |
可选的,可以不设置。数组中的每一项代表一个字体文件的全路径,Ventoy在启动时会依次加载这些字体文件。 |
- 文本模式 <==> 图形模式 切换
默认情况下 Ventoy 是图形模式,但在个别比较特殊的机器上可能会有显示问题,比如花屏、卡顿之类的。这种情况下你可以切换为文本模式。
Ventoy 文本模式和图形模式在功能上是一样的,只是图形模式更漂亮一点,再有就是文本模式中文会显示为 ?? 问号。
有以下几种方式可以切换显示模式:
- 通过
F5 Tools-->Screen Display Mode-->Force Text Mode
菜单切换。这个是一次性的,每次启动都需要重新设置 - 通过按
F7
快捷键来切换。这个和方法1效果是一样的,更方便一些。反复按可以在文本模式和图形模式之间来回切换。 - 通过本文中的主题插件设置,这样可以把默认模式切换成文本模式,不需要每次都切换。
- 主题切换 (1.0.62+)
如果设置了多个主题,则可以通过 F5 Tools --> Theme Select
菜单切换主题(立即生效),如下图所示。
不过需要说明的是,通过这个菜单选择的主题只针对当前启动的环境有效,不会保存,因此下一次启动还是会根据 default_file
固定选择或者是随机选择某个主题。
- resolution_fit 选项说明 (1.0.86+)
我们知道主题中的背景图片、图标、文字等的显示效果和分辨率关系很大。同一个主题在一个分辨率下显示的比较漂亮,但换一个分辨率可能效果就不好了。
如上图所示,Ventoy 支持设置多个主题,启动后可以通过菜单切换。我们可以为不同的分辨率设置不同的主题,比如:
"file": [ "/ventoy/themes/theme_800x600/theme.txt", "/ventoy/themes/theme_1024x768/theme.txt", "/ventoy/themes/theme_1600x900/theme.txt" ]
我们还可以为不同分辨率中的每一种分辨率分别设置多个主题。比如:
"file": [ "/ventoy/themes/theme_800x600_1/theme.txt", "/ventoy/themes/theme_800x600_2/theme.txt", "/ventoy/themes/theme_800x600_3/theme.txt", "/ventoy/themes/theme_1024x768_1/theme.txt", "/ventoy/themes/theme_1024x768_2/theme.txt", "/ventoy/themes/theme_1024x768_3/theme.txt", "/ventoy/themes/theme_1600x900_1/theme.txt", "/ventoy/themes/theme_1600x900_2/theme.txt", "/ventoy/themes/theme_1600x900_3/theme.txt" ]
如果我们把默认分辨率改成了 1600x900,那么就可以把这里的 /ventoy/themes/theme_1600x900_1/theme.txt
设置为默认主题就行了
(即 default_file
设置为 7)。
到这里看起来一切都很完美。但是这里有个问题,就是我们默认认为我设置的分辨率在所有设备上都是支持的。但有些特殊的显示器可能不是这样。
比如,Ventoy 默认的分辨率是 1024x768 但有一些机器上可能不支持这个分辨率,这时它启动后会选择一个其他的分辨率使用。
这种情况下,我们默认设置的主题在这种分辨率下可能显示效果很差。当然此时可以通过菜单调整一下,按照当前分辨率选择一下对应主题就行了。
但是这个毕竟是手动的操作,能不能上来就按照分辨率自动选择一个主题呢?
这个就是 resolution_fit 选项设置的初衷。
首先你必须设置了多个主题,同时默认主题 default_file
必须设置为0,即随机选择,resolution_fit 选项才有效。
此时,Ventoy 会过滤出符合当前分辨率的那些主题文件,在这些符合当前分辨率的主题文件内随机选择,而不是像原来那样在所有主题文件中随机选择。
当然如果你符合分辨率的主题过滤完就剩1个,那就肯定选择它了。因此,如果你像下面这样设置:
{ "theme": { "file": [ "/ventoy/themes/theme_800x600/theme.txt", "/ventoy/themes/theme_1024x768/theme.txt", "/ventoy/themes/theme_1600x900/theme.txt" ], "resolution_fit": 1 } }
那么就可以达到启动时是哪种分辨率就选择哪种主题的效果。Ventoy 如何过滤呢?按照主题文件的全路径中是否包含 AAAxBBB 字符串来判定。(注意 x 必须是小写字母)
比如,当前分辨率是 1600x900,则对应的主题文件路径中必须包含 1600x900 字符,
可以在目录名中包含,比如 /ventoy/themes/theme_1600x900/theme.txt
也可以在文件名中包含,比如 /ventoy/themes/themeA/theme_1600x900.txt
另外,如果设置了 resolution_fit
选项,在通过 F5 Tools --> Resolution Configuration
菜单调整当前分辨率时,
Ventoy 会立刻跟随新的分辨率选择一个新的主题。
- 热键提示
为了能正常显示热键提示,你需要把下面这几个 hbox 的定义添加到新的 theme.txt 文件中。你也可以修改里面的位置和颜色属性。
+ hbox{ left = 30% top = 95% width = 10% height = 25 + label {text = "@VTOY_HOTKEY_TIP@" color = "blue" align = "left"} } + hbox{ left = 90% top = 5 width = 10% height = 25 + label {text = "@VTOY_MEM_DISK@" color = "red" align = "left"} }
- Ventoy 版本信息
默认情况下,在界面的左下角会显示Ventoy的版本信息,比如 1.0.10 UEFI www.ventoy.net
这个信息是在代码中固定实现的,你可以通过 ventoy_left/ventoy_top/ventoy_color 变量来调整它的位置和颜色。
如果你想完全删除它,我鼓励你去阅读Ventoy的源代码,修改之后重新编译。我想这也是开源的意义所在。
- 分别针对不同的 BIOS 模式设置不同的主题
theme 支持多模式,可以分别针对 x86 Legacy BIOS、IA32 UEFI、x86_64 UEFI 和 ARM64 UEFI 模式分别设置不同的主题,甚至可以有的使用图形模式,另一些使用文本模式。
详细说明请参考 多模式选项
- 主题示例
https://gbatemp.net/threads/medicat-usb-a-multiboot-linux-usb-for-pc-repair.361577/