OpenWrt自定义luci页面来修改配置文件

本文介绍了如何通过编写Lua脚本和配置文件,在OpenWrt路由器上创建一个自定义Luci界面,用于直接修改配置文件并自动重启服务。以Pdnsd为例,详细讲解了Luci的MVC架构,以及如何实现界面的增删改查功能,包括读取、保存配置文件和控制服务的启停。
摘要由CSDN通过智能技术生成

在使用OpenWrt路由器的过程中,经常需要根据需要改改配置文件然后重新启动服务什么的,一般的做法是SSH登录路由器后台,使用vi编辑器修改文件,然后使用/etc/init.d/xxxx restart 来重启服务,次数多了就会觉得很繁琐,光SSH输入密码就够麻烦的,所以不妨自己写一个luci界面在路由器web后台修改配置文件并完成重启这一系列操作。下面以Pdnsd为例进行介绍

首先看一下实现效果



要实现一个luci界面至少需要如下三个文件

A:  /etc/config/pdnsd
B : /usr/lib/lua/luci/controller/pdnsd.lua
C:  /usr/lib/lua/luci/model/cbi/pdnsd.lua


其中

A的作用是存储你在luci界面上的控件中填入的数值,比如用户名密码,是否可用,选择的选项等等,是一个uci配置文件,可以使用shell的uci命令进行读取

B的作用是通告OP系统你的自定义界面的显示位置,相邻排序,并指向C文件

C是最核心的文件,里面记录了你luci页面的控件布局,控件的显示内容,和控件触发事件的执行脚本

在创建每个文件之前,首先要了解一个概念,就是luci是MVC架构的,而且MVC的理念在luci上得到了最充分最明显的阐释,是理解MVC架构非常形象生动的例子,下面我就简单介绍一下luci的MVC架构。

首先请看下面的两个截图,这是两个不同OP的路由器安装同一个luci ipk安装包之后的界面,界面风格差别很大,不知道的还以为这是两个不同的软件。但其实不是,因为他们来源于同一个ipk安装包,不仅代码一模一样,里面控件的类型和数量也是一致的。而且执行效果也是一样的。


这上面左面应该是潘多拉固件或者DreamBox等等固件的截图,而右面是OP默认界面的原图,右面的加入了一些bootstrap样式。

那为什么同样的luci代码会产生如此风格迥异的界面,并且自动的适配路由器当前固件的风格呢,这就是luci使用lua脚本使用MVC架构的奥义了。同时我们也知道,luci的开发不是像网页一样使用html,css,js进行开发,而是使用lua脚本和uci接口,下面就来仔细介绍一下luci的简单开发过程。

首先我们创建上面必需的三个文件,做一个简单的界面


/etc/config/pdnsd

config arguments
由于这个文件是记录你配置好的参数的,由于我们现在并不需要记录什么参数,所以写个uci的开头就够,其中“arguments”是一个固定标志


/usr/lib/lua/luci/controller/pdnsd.lua

module("luci.controller.pdnsd", package.seeall)
function index()
        if not nixio.fs.access("/etc/config/pdnsd") then
                return
        end
        entry({"admin", "services", "pdnsd"}, cbi("pdnsd"), _("Pdnsd")).dependent = true
end
这个文件的含义是:首先检查有没有/etc/config/pdnsd文件,如果有就继续向下执行,没有就当什么都没有发生过

第一行中,固定格式是“luci.controller.我的项目名”,因为我们所有的lua文件和/etc/config下面的配置文件都是以pdnsd来进行命名的,所以应该填“luci.controller.pdnsd

倒数第二行是一个固定格式

entry(路径, 调用目标, _("显示名称"), 显示顺序)

路径:{"admin", "services", "pdnsd"} 意思是登录用户可见,“服务”主菜单下,“名字叫pdnsd的配置文件”,如果你想要放到“系统”菜单下,就把“services”改成“system”

  • 9
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
OpenWrt下,LuCI是一个由Lua实现的网页系统配置接口,用于管理和配置路由器。它是基于MVC框架的,开发者可以使用Lua脚本来编写新的功能页面LuCI的相关资料可以在官方说明文档和模块说明文档中找到。\[3\] 如果你在OpenWrt中没有安装luci,可能是因为默认编译的OpenWrt版本没有包含luci。你可以通过SSH远程访问路由器,但无法打开管理页面。这可能是因为你无法访问192.168.1.1这个地址,可能是由于连接被拒绝。\[2\] 如果你想学习OpenWrt下的LuCI,你可以参考上述提到的官方说明文档、模块说明文档以及一些参考博客。这些资料将帮助你了解Lua脚本的基本语法、UCI(Unified Configuration Interface)以及CBI(Configuration Binding Interface)等相关概念。\[3\] #### 引用[.reference_title] - *1* *2* [openwrt开发使用-增加luci](https://blog.csdn.net/lyn631579741/article/details/128244632)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [OpenwrtLuCI入门(一)](https://blog.csdn.net/qq_28812525/article/details/103870169)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值