|
|

楼主 |
发表于 2026-4-16 12:04
|
显示全部楼层
关于linux脚本GUI界面的说明
linux shell下面用脚本语言写界面,有什么好的方案?
1、zenity,原生图形界面 (GUI)
它专为脚本而生,可以直接创建信息框、文件选择器、进度条等标准 GTK 对话框。优点是语法非常简单,占用内存极低(约 8MB)。例如,创建文件选择对话框的代码是 zenity --file-selection。
它是 GNOME桌面环境默认安装的工具,对基于GTK的桌面系统如GNOME/XFCE支持较好,KDE 桌面用户则可以使用功能对等的 kdialog。主要依赖文件5MB,在已经安装了GTK桌面(如GNOME、XFCE)的系统上,这些依赖已经存在,安装 zenity 只需下载几百KB,增量占用微乎其微。
缺点:使用命令行参数,无法定制布局;每次操作后窗口会自动关闭。
2、gtkdialog,原生图形界面 (GUI)
gtkdialog本质上是一个让 Bash 脚本可以直接调用 GTK+ 库来绘制界面的工具。你不需要学习 C 语言或 Python,只需要用一种简单的 XML 格式来描述界面,gtkdialog 就能把它渲染成一个真正的图形窗口。它基于GTK2或GTK3。
它的核心依赖是 libgtk-3-0(约 10-20 MB),再加上 libcairo、libglib、libpango 等一系列库。对于一个纯命令行系统,安装它们可能需要额外拉取 50-100 MB 甚至更多的依赖包。
veket里面的安装工具Yapi、grub4dosconfig、grub2config等就是用的shell+gtkdialog4方案。
缺点:需要花费一定时间掌握XML定义界面布局;依赖文件大概50MB,旧的系统不一定有依赖支持,依赖文件可能需要联网下载,没有网络条件下比较麻烦;gtkdialog 的命运和GTK的版本紧密相关,它依赖于较老的GTK2或GTK3库,而最新的GTK4已经正式弃用了GtkDialog(对话框)这个类,GTK4里面自定义对话框请直接用 GtkWindow,把它设置为模态(Modal),然后往里面自由地放置布局和控件,设计上采用了区别于GTK2/3的异步(Asynchronous)模式。这意味着gtkdialog在未来可能面临维护停滞、兼容性风险,新系统上安装也可能越来越麻烦。从技术选型的长期性来看,这是个不小的隐患。旧版本用gtkdialog写的程序代码,在GTK4系统中不能直接运行,需要进行修改。
3、封装函数库
如果你希望代码更简洁,并希望自动适配底层可用的图形或终端工具。
easybashgui:一个 Bash 函数库,它提供了一套统一的函数。你的脚本只需调用这些函数,easybashgui 会自动检测系统环境,并选择 zenity、dialog、kdialog 等作为后端来执行。
4、yad,原生图形界面 (GUI)
yad 是zenity的“增强版”。它支持更复杂的表单布局、图标列表和多列数据展示,非常适合构建更灵活的工具。
veket里面的安装工具FrugalPup就是调用的yad写的。
缺点:在大多数传统的X11桌面(GNOME, XFCE, KDE的X11模式)下,它都能稳定工作。非标准环境(如Wayland)可能需要额外配置,yad 的某些功能(特别是文件选择对话框)可能会失灵,需要额外安装 xdg-desktop-portal 后端或通过环境变量强制使用X11后端来解决。yad的依赖文件,安装它们可能需要额外拉取 50-100 MB 甚至更多的依赖包,无网络环境下比较麻烦。
5、Web 技术驱动
如果熟悉 HTML/JavaScript,或者需要构建一个界面相对复杂的配置工具,可以考虑用 Web 技术来开发界面。
shell-ui:它允许你通过 shell start 命令一键启动一个本地 Web 服务,然后在浏览器中进行脚本的管理和操作,支持 Node.js、Shell、Python 等多种脚本。
BigBashView:这个工具允许你使用 HTML、CSS 和 JavaScript 来构建前端界面,而后台的业务逻辑继续由 Bash 脚本处理,实现了前后端分离。
ventoy在linux的方案就采用了该方案,只要你的操作系统有浏览器,基本上都可以用来启动veket。
缺点:需要掌握较多前后端技术栈,架构相对重,需要依赖浏览器。
=============================
而我的SX_veket_install_for_linux是基于linux原生BASH的shell编程,所涉及的命令都是linux原生自带,不需要你输入任何命令,没有依赖问题,不需要联网安装任何依赖,对于32位旧版本的veket18,64位新版本veket20/22/24/26以及未来的版本,理论上应该都能够完美兼容,通杀,写菜单速度极快,不存在GUI界面存在的文件依赖、浏览器前后端依赖等问题,是非常稳定、健壮的方案。
|
|