3. LuCI界面定制

LuCI界面定制 学习卡片

任务说明

本案例目标是在OpenWrt网关的LuCI管理界面中实现三项定制:更换默认主题、调整首页布局、添加自定义菜单项。最终效果为:登录后看到新主题风格,首页显示自定义欢迎信息,侧边栏出现指向自定义页面的菜单入口。

实现方案

LuCI基于Lua + MVC架构,主题与布局文件位于/www/luci2/(OpenWrt 21.02+)或/usr/lib/lua/luci/(旧版本)。本案例以OpenWrt 22.03+(LuCI 2)为例,通过修改主题CSS、编辑首页模板、新增控制器与视图三个步骤完成定制。所有操作均在已运行的OpenWrt设备或开发环境中执行。

1. 更换主题

LuCI默认主题为bootstrap,系统同时内置material主题。通过uci命令切换主题,并验证登录页面变化:

# 查看当前主题
uci get luci.main.mediaurlbase
# 输出示例: /luci-static/bootstrap

# 切换为material主题
uci set luci.main.mediaurlbase=/luci-static/material
uci commit luci

# 重启uhttpd使生效
/etc/init.d/uhttpd restart

验证方法:浏览器访问http://<网关IP>/cgi-bin/luci,登录后观察界面配色与图标风格是否变为Material Design风格(卡片式布局、浮动按钮)。若需恢复默认,执行uci set luci.main.mediaurlbase=/luci-static/bootstrap并commit。

2. 自定义首页布局

首页内容由/www/luci2/view/admin_status/index.htm控制。在原有状态信息上方插入欢迎横幅。先备份原文件,再编辑:

# 备份
cp /www/luci2/view/admin_status/index.htm /www/luci2/view/admin_status/index.htm.bak

# 编辑文件,在 <h2> 标签之前插入欢迎块
vi /www/luci2/view/admin_status/index.htm

在文件顶部<%+status/overview%>行之前插入以下HTML片段:

<div style="background:#2e7d32;color:#fff;padding:12px 16px;border-radius:4px;margin-bottom:16px;">
  <strong>欢迎使用企业网关</strong> — 系统运行正常,今日流量统计请查看右侧图表。
</div>

验证方法:刷新首页,确认绿色欢迎横幅出现在系统状态卡片上方,文字清晰可见。

3. 添加自定义菜单项

LuCI菜单由控制器(Controller)注册。创建/usr/share/luci/menu.d/luci-app-mycustom.json定义菜单结构,再创建对应的Lua控制器与视图文件。

步骤1:创建菜单定义文件

cat > /usr/share/luci/menu.d/luci-app-mycustom.json << 'EOF'
{
    "admin/mycustom": {
        "title": "自定义工具",
        "order": 90,
        "action": {
            "type": "view",
            "path": "mycustom/overview"
        }
    }
}
EOF

步骤2:创建控制器(处理页面请求)

mkdir -p /usr/lib/lua/luci/controller/admin
cat > /usr/lib/lua/luci/controller/admin/mycustom.lua << 'EOF'
module("luci.controller.admin.mycustom", package.seeall)

function index()
    entry({"admin", "mycustom"}, alias("admin", "mycustom", "overview"), _("自定义工具"), 90).dependent = false
    entry({"admin", "mycustom", "overview"}, template("mycustom/overview"), _("概览"), 1)
end
EOF

步骤3:创建视图模板

mkdir -p /usr/share/luci/menu.d/../view/mycustom
cat > /usr/share/luci/view/mycustom/overview.htm << 'EOF'
<%+header%>
<h3>自定义工具概览</h3>
<p>此页面由自定义菜单项加载。当前系统时间:<%= os.date("%Y-%m-%d %H:%M:%S") %></p>
<p>CPU负载:<%= luci.sys.exec("cat /proc/loadavg | awk '{print $1}'") %></p>
<%+footer%>
EOF

步骤4:清理LuCI缓存并重启服务

rm -rf /tmp/luci-indexcache /tmp/luci-modulecache
/etc/init.d/uhttpd restart

验证方法:刷新LuCI页面,左侧菜单底部出现“自定义工具”项,点击后显示概览页面,包含当前系统时间与CPU负载值。

SVG:LuCI定制架构与数据流

浏览器 HTTP请求 (登录会话) uhttpd Web服务器 端口80/443 LuCI核心 Lua MVC框架 路由分发 HTTP CGI 主题层 /luci-static/material/ CSS/JS/图标资源 uci set luci.main.mediaurlbase 布局层 admin_status/index.htm 首页模板修改 自定义欢迎横幅 菜单层 menu.d/luci-app-mycustom.json controller/admin/mycustom.lua view/mycustom/overview.htm OpenWrt系统 uci配置 /etc/config/luci /proc/loadavg 系统信息 图:LuCI定制涉及主题、布局、菜单三层,最终由uhttpd提供Web服务

验证与判定标准

完成上述修改后,按以下步骤验证:

  1. 主题验证:登录页面和主界面配色变为Material风格(绿色主色调、卡片阴影),且页面底部显示“Powered by LuCI”版本信息不变。
  2. 布局验证:首页顶部出现绿色欢迎横幅,文字内容与插入的HTML一致,无乱码。
  3. 菜单验证:左侧导航栏底部出现“自定义工具”菜单,点击后进入新页面,页面显示当前系统时间和CPU负载值(如0.05),证明Lua脚本正确执行。
  4. 持久性验证:执行/etc/init.d/uhttpd restart后所有定制仍然生效,说明配置已写入flash。

若菜单未出现,检查/tmp/luci-indexcache是否已清除,或执行logread | grep luci查看是否有Lua语法错误。