https://oldwiki.archive.openwrt.org/zh-cn/doc/techref/luci2
一直以来OpenWrt都是采用Lua写的web管理界面LuCI,(开机速度慢不说,居然比不过腾达等弱路由器开机速度)。 LuCI需要使用多个Lua扩展(如 ubus
, luci.model.uci
, nixio.fs
, 等等)去存取系统信息和设置. 不幸的是这种解决方案在慢CPU和低内存的低配机器设备上是个灾难,此方案相当消耗资源且并不能很好的工作。
这导致开发了LuCI2, 一个不同架构的新的web管理节目。它不再使用Lua,而是使用静态HTML页面加JavaScript XHR方法。 这意味着从OpenWrt设备中下载后在客户端(浏览器)中构建HTML页面, 通过ubus存取各种系统数据(通过uhttpd-mod-ubus提供基于HTTP的接口API).
重要说明
如上所述, LuCI2通过ubus
和OpenWrt子系统通信(包括如network
、service
以及其它)。遗憾的是并非每个主要的OpenWrt工具都自己注册了ubus
,如LuCI2不能使用opkg
(安装包管理)。 LuCI2通过提供在附加ubus
名称空间的rpcd
插件解决了这个问题。前面说的opkg
它在ubus
中注册了一个新的luci2.opkg
路径来访问。
综上所述, LuCI2包括两个方面: 打包的HTML/CSS/JS文件 (htdocs
) 和一些在OpenWrt环境下运行的附加小工具。
在接下来的章节中,你会找到各种关于LuCI2开发帮助的细节。
菜单
首先需要知道的是浏览器接收到的关于LuCI2菜单并不固定写死在任何文件。代替的是通过ubus
使用luci.ui
路径和menu
方法。可以通过使用以下命令来查看:
ubus call luci2.ui menu '{ "ubus_rpc_session": "invalid" }'
内部的rpcd
插件分析在目录/usr/share/rpcd/menu.d
的所有文件,当前用户(基于传递的ubus_rpc_session
)不允许增加或者删除条目。