菜单

插件系统

相关源文件

Ventoy插件系统提供了一个灵活的框架,可以在不修改其核心代码的情况下扩展和自定义Ventoy的功能。本文档将解释插件系统的架构、组件和用法。

有关Plugson Web界面具体信息,请参阅Plugson Web界面。有关详细的插件配置选项,请参阅插件配置

概述

插件系统允许用户修改Ventoy行为的各个方面,从启动菜单的外观到自动化安装过程。插件通过一个中央JSON文件(ventoy.json)进行配置,该文件可以手动编辑,也可以通过更用户友好的VentoyPlugson Web界面进行编辑。

架构

插件系统组件

来源:Plugson/src/Web/ventoy_http.c Plugson/www/index.html

上图说明了插件系统组件如何交互

  1. VentoyPlugson Web界面与其HTTP服务器通信
  2. AJAX API读写ventoy.json配置文件
  3. 各种插件类型在此文件中定义
  4. 插件通过GRUB影响启动过程的不同部分

固件特定配置

来源:Plugson/src/Web/ventoy_http.h32-42

插件可以根据启动固件类型进行不同的配置。每种插件类型都可以为不同的固件类型(通用、legacy BIOS、UEFI等)设置特定选项,从而根据启动环境精确自定义行为。

插件类型

Ventoy支持13种插件类型,每种类型在Plugson/src/Web/ventoy_http.h44-61中定义的plugin_type枚举中。

插件类型目的配置示例
控制Ventoy行为的全局设置菜单超时、搜索路径、键盘布局
主题启动菜单外观自定义背景图片、颜色、字体
菜单别名菜单项的自定义名称重命名复杂的ISO文件名
菜单提示菜单项的工具提示为操作系统镜像添加描述
Menu 类菜单项的分类按类型分组操作系统
自动安装操作系统安装的自动化提供安装应答文件
持久化实时系统的持久化存储保存Linux实时环境的更改
注入启动期间文件注入添加驱动程序或配置文件
Conf Replace配置文件替换替换启动配置文件
密码密码保护保护菜单项或菜单
镜像列表镜像显示自定义过滤或排序ISO文件
Auto MemdiskMemdisk处理为特定文件使用Memdisk
DUD驱动更新磁盘支持为Linux添加驱动程序更新

来源:Plugson/src/Web/ventoy_http.h67-73 Plugson/www/index.html101-174

常见插件类型详解

Control Plugin (控制插件)

Control插件配置Ventoy的全局行为设置。它由data_control结构定义,位于Plugson/src/Web/ventoy_http.c549-565

关键配置选项包括

  • VTOY_MENU_TIMEOUT: 设置启动菜单超时秒数
  • VTOY_DEFAULT_SEARCH_ROOT: 指定搜索ISO文件的子目录
  • VTOY_DEFAULT_KBD_LAYOUT: 设置键盘布局
  • VTOY_MENU_LANGUAGE: 设置菜单语言
  • VTOY_WIN11_BYPASS_CHECK: 启用/禁用Windows 11硬件检查绕过

来源:Plugson/www/plugson_control.html Plugson/src/Web/ventoy_http.c567-601

Theme Plugin (主题插件)

Theme插件自定义启动菜单的外观。它由data_theme结构定义。

关键配置选项包括

  • file: 主题文件路径
  • gfxmode: 图形模式(分辨率)
  • display_mode: 背景图片的显示方式
  • serial_param: 串口控制台的参数

来源:Plugson/www/plugson_theme.html

Password Plugin (密码插件)

Password插件为菜单项添加密码保护,由data_password结构定义。

关键配置选项包括

  • file: 密码文件路径
  • type: 密码类型(明文、MD5、加盐MD5)
  • bootpwd: 启动项的密码

来源:Plugson/www/plugson_password.html

VentoyPlugson Web界面

VentoyPlugson是用于管理Ventoy插件的基于Web的界面。它被实现为一个HTTP服务器,提供Web UI并公开用于读写插件配置的AJAX API。

该界面包括

  • 列出所有插件类型的侧边栏菜单
  • 每个插件类型的配置页面
  • 所有插件选项的表单字段
  • 输入的验证
  • 配置更改的预览
  • 多语言支持

来源:Plugson/www/index.html Plugson/www/static/js/vtoy.js

配置格式

插件配置存储在名为ventoy.json的JSON文件中。文件结构遵循以下模式:

其中

  • plugin_type是13种插件类型之一(例如,controltheme
  • firmware是固件类型之一(legacyuefiia32aa64mips
  • 选项和值取决于具体的插件类型

来源:Plugson/src/Web/ventoy_http.c95-97

实现细节

插件系统的实现包含几个关键组件

  1. 数据结构:每种插件类型都有一个相应的数据结构来存储其配置(例如,data_controldata_theme等),在Plugson/src/Web/ventoy_http.h中定义。

  2. HTTP服务器:VentoyPlugson应用程序包含一个基于civetweb库的嵌入式HTTP服务器,该服务器服务Web UI并处理API请求。

  3. AJAX API:HTTP服务器公开了一个AJAX API,用于读写插件配置。此API在Plugson/src/Web/ventoy_http.c中定义,并由Web UI中的JavaScript代码使用。

  4. JSON解析/生成器:插件系统包含用于解析和生成JSON数据的功能,这些数据用于读写ventoy.json文件。

  5. 启动集成:启动过程通过读取ventoy.json文件并应用配置的设置来与插件系统集成。

来源:Plugson/src/Web/ventoy_http.c Plugson/src/Core/ventoy_util.h

插件与启动过程的集成

插件通过以下步骤与Ventoy启动过程集成

  1. Ventoy启动并加载GRUB引导加载程序
  2. GRUB加载Ventoy GRUB模块
  3. 模块读取ventoy.json文件
  4. 插件设置根据固件类型应用
  5. 启动菜单通过主题、别名、类和其他UI插件进行渲染
  6. 处理用户交互(包括密码检查)
  7. 所选操作系统在应用任何适用的修改后启动

这种集成允许插件影响启动过程的各个方面,从菜单外观到操作系统行为。

来源:Ventoy系统架构图提供

插件配置示例

这是一个包含多个插件配置的ventoy.json文件的示例

此示例展示了

  • 一个适用于所有固件类型的控制插件配置
  • 一个特定于UEFI固件的主题配置
  • 一个适用于所有固件类型的密码配置
  • 特定ISO文件的菜单别名

结论

Ventoy插件系统提供了一种强大而灵活的方式来扩展和自定义Ventoy的功能。凭借13种不同的插件类型和对多种固件配置的支持,用户可以在不修改核心代码的情况下根据自己的特定需求定制Ventoy。

有关使用Plugson Web界面的更多详细信息,请参阅Plugson Web界面。有关每种插件类型的全面配置选项,请参阅插件配置