OpenWRT 之LuCI 入门开发

2024-08-29 12:18
文章标签 入门 开发 openwrt luci

本文主要是介绍OpenWRT 之LuCI 入门开发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

LuCI 基础篇

Controller 位于: /usr/lib/lua/luci/controller/ 下——定义模块的入口
Model 位于: /usr/lib/lua/luci/model/cbi/ 下——配置模块实际的代码

第一步:定义模块入口:

eg:

module("luci.controller.控制器名/路径", package.seeall)
function index()entry(路径, 调用目标, _("显示名称"), 显示顺序)end

控制器名/路径: 不带路径的控制器名默认存在于/usr/lib/lua/luci/controller/下,否则以controller/为根目录

entry表示添加一个新的模块入口,官方给出了entry的定义,其中后两项都是可以为空的:

entry(path, target, title=nil, order=nil)

path:如果这样写{“click”, “here”, “now”},那么就可以在浏览器里访问“http://192.168.x.1/cgi-bin/luci/click/here/now”来访问这个脚本。我们也可以根据需要按如下方式编写{“admin”, “一级菜单名”, “菜单项名”},系统会自动在对应的菜单中生成菜单项。比如想在“网络”菜单下创建一个菜单项,那么一级菜单名可以写为“network”。

target
调用目标分为三种,分别是执行指定方法Action、访问指定页面Views以及调用CBI Module

  • 第一种可以直接调用指定的函数,比如点击菜单项就直接重启路由器等等,比如写为call(“function_name”),然后在lua文件下编写名为function_name的函数就可以调用了。

  • 第二种可以访问指定的页面,比如写为template(“myapp/mymodule”)就可以调用/usr/lib/lua/luci/view/myapp/mymodule.htm文件了

  • 而如果要编写配置页面,那么使用第三种方法无非是最方便的,比如写为cbi(“myapp/mymodule”)就可以调用/usr/lib/lua/luci/model/cbi/myapp/mymodule.lua文件了。

title和order

module("luci.controller.LuoYeLuCI", package.seeall)function index()entry({"admin", "network", "LuoYeconfig"}, cbi("LuoYeCBI"), _("LuoYeTest"), 100)
end

第二步:配置CBI Module

1.首先要需要映射与存储文件的关系

m = Map("配置文件文件名", "配置页面标题", "配置页面说明")

第一个参数即为配置文件存储的文件名,不包含路径.
第二与第三个参数则是用在来页面上显示的

2.接下来需要创建与配置文件中对应的Section
Section分为两种,NamedSection和TypedSection,前者根据配置文件中的Section名,而后者根据配置文件中的Section类型 http://luci.subsignal.org/trac/wiki/Documentation/CBI

3.创建配置文件
文件需要存储在/etc/config(如果配置文件不存在的话,访问配置页面将会报错)
内容格式如下:

config loginoption username ''option password ''option ifname 'eth0'option domain ''

LuCI 页面修改

简单的文件配置,路由上路径主要是/usr/lib/lua/luci/下子目录:/controller//model/cbi//view/,或者根目录下的/www/中.可以在路上修改查看效果.
如果想要编译自定义LuCI页面的固件,请尝试修改如下OpenWRT源码结构路径内的LuCI文件.

xxx/package/feeds/luci/luci/luci/libs/web/root/etc/config/luci --- AA 版本pakages/feeds/luci/中
xxx\feeds\luci\luci\luci\libs\web\root\etc\config\luci --- AA 版本的feeds/luci文件夹中
xxx/feeds/luci/modules/base/root/etc/config/luci --- BB 版本中feeds中,bb版本open修改了luci配置文件路径,并且pakages/feeds路径中也没有luci配置文件了.不知道这个路径是不是正确的.
再者就是修改 xxx/dl/ 下的源码压缩包,或者 xxx/build_dir/$target/下源码

注意:如果在xxx/feeds 修改可能需要执行 ./scripts/feeds install luci 更新

主题Logo替换

源码路径:xxx/feeds/luci/luci/luci/themes/bootstrap/htdocs/luci-static/bootstrap/logo.jpg
路由路径:/www/luci-static/bootstrap/logo.jpg

Tips:
由于版本的更新,文件路径可能变更,此处列出的为BB版本的例子.如果找不到可以用命令手动在/feeds/中查找:find ./ -name logo.jpg.此处为bootstrap主题Logo,其他主题的Logo修改类似.

页面脚标信息

源码路径:xxx/feeds/luci/luci/luci/themes/bootstrap/luasrc/view/themes/bootstrap/footer.htm
路由路径:/usr/lib/lua/luci/view/themes/bootstrap/footer.htm
修改位置:

Powered by <%= luci.__appname__ .. " (" .. luci.__version__ .. ")" %><%=luci.version.distversion%>
status状态栏信息

源码路径:xxx/feeds/luci/modules/admin-full/luasrc/view/admin_status/index.htm
路由路径:/usr/lib/lua/luci/view/admin_status/index.html
修改位置:找到类似的代码段修改.

<%:System%><%:Hostname%><%=luci.sys.hostname() or "?"%>
<%:Model%><%=pcdata(model or "?")%>
<%:Firmware Version%>
<%=pcdata(luci.version.distname)%> <%=pcdata(luci.version.distversion)%> /
<%=pcdata(luci.version.luciname)%> (<%=pcdata(luci.version.luciversion)%>)<%:Kernel Version%><%=luci.sys.exec("uname -r")%>
<%:Local Time%>-
<%:Uptime%>-
<%:Load Average%>-

传送门:

  1. 官方文档–HowTo: Write Modules

这篇关于OpenWRT 之LuCI 入门开发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1117837

相关文章

基于Python开发PDF转PNG的可视化工具

《基于Python开发PDF转PNG的可视化工具》在数字文档处理领域,PDF到图像格式的转换是常见需求,本文介绍如何利用Python的PyMuPDF库和Tkinter框架开发一个带图形界面的PDF转P... 目录一、引言二、功能特性三、技术架构1. 技术栈组成2. 系统架构javascript设计3.效果图

Python FastAPI入门安装使用

《PythonFastAPI入门安装使用》FastAPI是一个现代、快速的PythonWeb框架,用于构建API,它基于Python3.6+的类型提示特性,使得代码更加简洁且易于绶护,这篇文章主要介... 目录第一节:FastAPI入门一、FastAPI框架介绍什么是ASGI服务(WSGI)二、FastAP

基于Python开发PDF转Doc格式小程序

《基于Python开发PDF转Doc格式小程序》这篇文章主要为大家详细介绍了如何基于Python开发PDF转Doc格式小程序,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 用python实现PDF转Doc格式小程序以下是一个使用Python实现PDF转DOC格式的GUI程序,采用T

使用Python开发一个图像标注与OCR识别工具

《使用Python开发一个图像标注与OCR识别工具》:本文主要介绍一个使用Python开发的工具,允许用户在图像上进行矩形标注,使用OCR对标注区域进行文本识别,并将结果保存为Excel文件,感兴... 目录项目简介1. 图像加载与显示2. 矩形标注3. OCR识别4. 标注的保存与加载5. 裁剪与重置图像

Android开发中gradle下载缓慢的问题级解决方法

《Android开发中gradle下载缓慢的问题级解决方法》本文介绍了解决Android开发中Gradle下载缓慢问题的几种方法,本文给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、网络环境优化二、Gradle版本与配置优化三、其他优化措施针对android开发中Gradle下载缓慢的问

使用Go语言开发一个命令行文件管理工具

《使用Go语言开发一个命令行文件管理工具》这篇文章主要为大家详细介绍了如何使用Go语言开发一款命令行文件管理工具,支持批量重命名,删除,创建,移动文件,需要的小伙伴可以了解下... 目录一、工具功能一览二、核心代码解析1. 主程序结构2. 批量重命名3. 批量删除4. 创建文件/目录5. 批量移动三、如何安

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

基于Python开发PPTX压缩工具

《基于Python开发PPTX压缩工具》在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,不便于传输和存储,所以本文将使用Python开发一个PPTX压缩工具,需要的可以了解下... 目录引言全部代码环境准备代码结构代码实现运行结果引言在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做