2014年12月

wifidog在OpenWrt路由器上添加LuCI的模块

【一、LuCI配置界面开发的框架】

LuCI是OpenWrt上的Web管理界面,LuCI采用了MVC三层架构,同时其使用Lua脚本开发,所以开发LuCI的配置界面不需要编辑任何的Html代码,除非想自己单独去创建网页(View层),否则我们基本上只需要修改Model层就可以了。官方也有一个如何去创建模块的说明文档,虽然写的比较晦涩:
http://luci.subsignal.org/trac/wiki/Documentation/ModulesHowTo
要为LuCI增加一个新模块,首先需要创建两个文件,一个位于Controller(/usr/lib/lua/luci/controller/)下,定义模块的入口;另一个位于Model(/usr/lib/lua/luci/model/cbi/)下,为配置模块实际的代码。
首先我们定义模块的入口,在/usr/lib/lua/luci/controller/下创建一个lua文件,类似如下:

module("luci.controller.控制器名", package.seeall)

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

第一行说明了程序和模块的名称,比如在controller/目录创建一个mymodule.lua,那么就可以写成“luci.controller.mymodule”,如果你的程序比较多,可能分为好几个模块,那么可以在controller下再常见一个子目录,比如controller/myapp/,那么就可以写成“luci.controller.myapp.mymodule”。

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

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

第一项是访问的路径,不过路径是按字符串数组给定的,比如路径按如下方式写“{"click", "here", "now"}”,那么就可以在浏览器里访问“http://192.168.1.1/cgi-bin/luci/click/here/now”来访问这个脚本。而通常我们希望为管理员菜单添加脚本,那么我们需要按如下方式编写“{"admin", "一级菜单名", "菜单项名"}”,系统会自动在对应的菜单中生成菜单项。比如想在“网络”菜单下创建一个菜单项,那么一级菜单名可以写为“network”。

第二项为调用目标,调用目标分为三种,分别是执行指定方法(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无非是针对管理员菜单来的,可以参考其他的lua文件来决定编写的内容。

这里我们创建/usr/lib/lua/luci/controller/njitclient.lua文件,定义我们的入口,代码如下:

module("luci.controller.njitclient", package.seeall)

function index()
        entry({"admin", "network", "njitclient"}, cbi("njitclient"), _("NJIT Client"), 100)
        end

【二、 用Lua和UCI接口开发LuCI配置模块 】

njit-client:
为njit-client做好的Web配置界面也已经开源,地址: https://github.com/mayswind/luci-app-njitclient.
我们要做的实际上就是希望能将用户名、密码等信息存储在路由器文件中,同时路由器开机时能根据设定的配置自动运行njit-client,同时我们还希望能动态的禁用和启用njit-client等等。所以最方便的方式就是使用CBI Module,上一节我们也添加了这个调用,那么接下来我们就要根据上边写的路径来创建 /usr/lib/lua/luci/model/cbi/njitclient.lua文件。

开发LuCI的配置模块有很多种方式,比较基本的可以用SimpleForm,就跟开发普通的Web应用类似,当然最方便的还是使用UCI(Unified Configuration Interface,统一配置接口)的方式,因为使用UCI接口可以使得在LuCI中可以无需考虑配置文件如何存储和读取(这种方式也会自动创建“保存&应用”、“保存”以及“复位”三个按钮),同时在Bash文件中也可以非常方便的存储和读取。

对于使用UCI的方式,我们首先需要创建对应的配置文件(如果配置文件不存在的话,访问配置页面将会报错),格式即为linux配置文件的格式,文件需要存储在/etc/config,比如文件路径为“/etc/config/njitclient”,内容如下:

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

然后我们要在CBI Module的lua文件中首先需要映射与存储文件的关系,比如:

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

第一个参数即为配置文件存储的文件名,不包含路径,比如按上述创建的话,应该写为“njitclient”,而第二与第三个参数则是用在来页面上显示的,比如如下所示的图:
1.jpg

接下来需要创建与配置文件中对应的Section,Section分为两种,NamedSection和TypedSection,前者根据配置文件中的Section名,而后者根据配置文件中的Section类型,这里我们使用后者,代码如下。同时我们设定不允许增加或删除Section(“.addremove = false”),以及不显示Section的名称(“.anonymous = true”)。

s = m:section(TypedSection, "login", "")
s.addremove = false
s.anonymous = true

接下来我们需要创建Section中不同内容的交互(创建Option),常见的比如有Value(文本框)、ListValue(下拉框)、Flag(选择框)等等,详细的可以参考官方的文档: http://luci.subsignal.org/trac/wiki/Documentation/CBI

创建Option的过程非常简单,而且创建后系统会无需考虑读取以及写入配置文件的问题,系统都会自动处理。但是根据上述的要求,我们在应用配置以后可能希望启用、禁用或重新启动njit-client,所以我们还需要在页面最后判断用户是否点击了“应用”按钮,这里与编写asp网页等都是相同的,我们可以通过如下的代码判断是否点击了“应用”按钮:

local apply = luci.http.formvalue("cbi.apply")
if apply then
    --[[
        需要处理的代码
    ]]--
end

由于剩余的代码都非常简单,所以所以这部分的全部代码见下:

require("luci.sys")

m = Map("njitclient", translate("NJIT Client"), translate("Configure NJIT 802.11x client."))

s = m:section(TypedSection, "login", "")
s.addremove = false
s.anonymous = true

enable = s:option(Flag, "enable", translate("Enable"))
name = s:option(Value, "username", translate("Username"))
pass = s:option(Value, "password", translate("Password"))
pass.password = true
domain = s:option(Value, "domain", translate("Domain"))

ifname = s:option(ListValue, "ifname", translate("Interfaces"))
for k, v in ipairs(luci.sys.net.devices()) do
    if v ~= "lo" then
        ifname:value(v)
    end
end

local apply = luci.http.formvalue("cbi.apply")
if apply then
    io.popen("/etc/init.d/njitclient restart")
end

return m

其中Luci全部类库的函数定义和使用说明可以参考如下地址: http://luci.subsignal.org/api/luci/index.html

【三、在Bash文件中调用UCI接口】

上边我们已经完成了LuCI配置界面的开发,在配置界面中我们已经能读取并保存配置文件了。接下来我们要编写/etc/init.d/njitclient脚本,使程序最终能运行起来。关于UCI接口在脚本文件中的官方说明可以参考: http://wiki.openwrt.org/doc/devel/config-scripting
要使用UCI调用脚本,首先第一步需要读取配置文件,命令为“config_load 配置文件名”,比如我们可以这样读入刚才的配置文件:

config_load njitclient

接下来要遍历配置文件中的Section,可以使用“config_foreach 遍历函数名 Section类型”,例如我们可以这样:

config_foreach run_njit login

然后我们去编写名为“run_njit”的函数,在这个函数中,我们可以使用“config_get 变量名 Section名 Section参数名”获取变量的值,或者使用“config_get_bool 变量名 Section名 Section参数名”获取布尔型的值。所以全部的代码见下:

#!/bin/sh /etc/rc.common
START=50

run_njit()
{
    local enable
    config_get_bool enable $1 enable

    if [ $enable ]; then
        local username
        local password
        local domain
        local ifname

        config_get username $1 username
        config_get password $1 password
        config_get domain $1 domain
        config_get ifname $1 ifname

        if [ "$domain" != "" ]; then
            njit-client $username@$domain $password $ifname &
        else
            njit-client $username $password $ifname &
        fi

        echo "NJIT Client has started."
    fi
}

start()
{
    config_load njitclient
    config_foreach run_njit login
}

stop()
{
     killall njit-client
     killall udhcpc

    echo "NJIT Client has stoped."
}

【四、 编译开发的程序 】

如果按上述内容创建好上述4个文件,那么配置页面和程序就能在OpenWrt上运行起来了。但是如果要想把自己写的程序打包,还需要创建OpenWrt的Makefile来使用OpenWrt的SDK进行编译。

关于LuCI上配置Makefile的官方说明可以见这个地址: http://luci.subsignal.org/trac/wiki/Documentation/Modules

无非就是定义包的名称(PKG_NAME)、版本和生成次数(PKG_VERSION、PKG_RELEASE)、在menuconfig中的分类说明等(define Package/luci-app-njitclient)以及安装时进行的操作(define Package/luci-app-njitclient/install)等等。其中安装的文件分为三种,分别是配置文件、可执行文件以及其他数据文件,其中配置可执行文件时,会自动加入执行权限的,所以不需要额外进行处理。Makefile全部的代码见下:
include $(TOPDIR)/rules.mk

PKG_NAME:=luci-app-njitclient
PKG_VERSION=1.0
PKG_RELEASE:=1

PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)

include $(INCLUDE_DIR)/package.mk

define Package/luci-app-njitclient
SECTION:=luci
CATEGORY:=LuCI
SUBMENU:=3. Applications
TITLE:=NJIT 802.1X Client for LuCI
PKGARCH:=all
endef

define Package/luci-app-njitclient/description
This package contains LuCI configuration pages for njit8021xclient.
endef

define Build/Prepare
endef

define Build/Configure
endef

define Build/Compile
endef

define Package/luci-app-njitclient/install
$(INSTALL_DIR) $(1)/etc/config
$(INSTALL_DIR) $(1)/etc/init.d
$(INSTALL_DIR) $(1)/usr/lib/lua/luci/model/cbi
$(INSTALL_DIR) $(1)/usr/lib/lua/luci/controller

$(INSTALL_CONF) ./files/root/etc/config/njitclient $(1)/etc/config/njitclient
$(INSTALL_BIN) ./files/root/etc/init.d/njitclient $(1)/etc/init.d/njitclient
$(INSTALL_DATA) ./files/root/usr/lib/lua/luci/model/cbi/njitclient.lua $(1)/usr/lib/lua/luci/model/cbi/njitclient.lua
$(INSTALL_DATA) ./files/root/usr/lib/lua/luci/controller/njitclient.lua $(1)/usr/lib/lua/luci/controller/njitclient.lua
endef

$(eval $(call BuildPackage,luci-app-njitclient))

接下来在编译目录下的package目录下创建一个文件夹,如njitclient,然后将所有的文件按目录复制到该目录下即可。之后配置好OpenWrt的交叉编译环境后就可以使用OpenWrt SDK进行编译了,由于这类文章较多,故不再赘述,可以参考相关链接3及之后的文章。

本文章由 http://www.wifidog.pro/2014/12/30/wifidog-openwrt-luci.html 整理编辑,转载请注明出处

wifidog-openwrt如何自定义一个配置文件的设置界面

1.引言

OpenWRT中采用LuCI作为它的Web interface界面框架,采用Lua语言。在本文中将以一个简单的示例详细描述如何自定义开发一个界面,对一个配置文件进行操作。

2.Model与Controler

MVC的设计理念是进行LuCI开发的一个关键,什么是MVC请参看如下Blog:

http://www.cnblogs.com/gnuhpc/archive/2012/12/21/2827597.html

在LuCI中Controller的文件定义在固件中的/usr/lib/lua/luci/controller目录中,模版目录在/usr/lib/lua/luci/view目录下,而model则是在/usr/lib/lua/luci/model中。而model中有一个特殊的模块叫做CBI,被称为LuCI中最酷的功能,该模块的功能是方便的对一个配置文件进行修改。

3.示例

本文中的页面建立在LuCI界面的network下,不单独创建页面,因此无需写view,只用些controller和model就可以了。

1)首先创建一个controller

ccontroller/mycbi.lua

module("LUCI.controller.mycbi", package.seeall)

function index()
    entry({"admin", "network", "mycbi_change"}, cbi("mycbi-model/mycbimodule"), "Change My Conf", 30).dependent=false
end

解释一下关键代码:
1.jpg

在index()函数中,使用entry函数来完成每个模块函数的注册,官方说明文档如下:

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

path is a table that describes the position in the dispatching tree: For example a path of {"foo", "bar", "baz"} would insert your node in foo.bar.baz.
target describes the action that will be taken when a user requests the node. There are several predefined ones of which the 3 most important (call, template, cbi) are described later on on this page
title defines the title that will be visible to the user in the menu (optional)
order is a number with which nodes on the same level will be sorted in the menu (optional)
其中target主要分为三类:call,template和cbi。call用来调用函数,template用来调用已有的htm模版,而CBI模块则是使用非常频繁也非常方便的模块,包含的一系列lua文件构成界面元素的组合,所有cbi模块中的控件都需要写在luci.cbi.Map中,在cbi模块中定义各种控件,Luci系统会自动执行大部分处理工作。在cbi.lua文件中封装了所有的控件元素,例如复选框,下拉列表等。
2.jpg

2)创建model

#mkdir /usr/lib/lua/luci/model/cbi/mycbi-model

#vim /usr/lib/lua/luci/model/cbi/mycbi-model/mycbimodule.lua

m = Map("mycbi", "mycbi conf change interface")
s = m:section(TypedSection, "MySection")
s.addremove = true
s:option(Value, "username", "Name:")
key=s:option(Value, "password", "Password")
key.password=true;
return m

解释一下关键代码:
3.png

3)创建配置文件

#vim /etc/config/mycbi

config  'MySection'  'mycbi'

option 'username' 'youruser'
option 'password' 'yourpass'
  1. 测试

进入OpenWRT界面,登陆后就可以点击“网络”,如果是英文就点击network,可以看到我们添加的子页面入口:
4.png

点击后进入页面如下:
5.png

输入用户名密码:root/test,点击保存,后台查看配置文件已经被更改:
6.png

5.问题记录

1)首先,配置文件不能有任何后缀,否则页面加载后是空页面

2)如果出现500 错误,说明lua文件写的有问题,要么是路径错误,要么是语法错误,暂时没找到写日志的方法,可以用wireshark抓包看错误,如下:
7.png

6.参考文献

http://www.cnblogs.com/dwayne/archive/2012/04/18/2455145.html
http://www.cnblogs.com/dwayne/archive/2012/04/21/2460830.html

转自:http://www.cnblogs.com/gnuhpc/archive/2013/08/31/3293204.html

本文章由 http://www.wifidog.pro/2014/12/30/wifidog-openwrt%E9%85%8D%E7%BD%AE%E8%AE%BE%E7%BD%AE%E9%A1%B5%E9%9D%A2.html 整理编辑,转载请注明出处

Wifidog-刷OpenWRT标准版固件后安装LuCI的方法

刷OpenWRT标准版固件后安装LuCI的方法

一、与OpenWRT的路由器联机

用网线连接电脑的LAN口和路由器的LAN口,然后操作如下:

1.打开PuTTY,点树状列表中的“Session”项;
2.在Host Name (or IP address)文本框中输入“192.168.1.1”,在Port文本框中输入“22”;
3.在Connection type中选择“Telnet”,按下Open按钮,进入路由器的Linux终端,出现OpenWRT欢迎界面和root@OpenWRT:~#提示符;
注,以上可以使用Windows命令Telnet操作。

二、修改Root密码

1.在Linux终端中,输入“passwd root”,提示Changing password for root New passoword:的提示;
2.输入root用户的密码,输入过程没显示字符或掩码,输入完毕,回车,出现Retype password:的提示;
3.再一次输入root用户的密码,,输入过程没显示字符或掩码,输入完毕,回车,出现Password for root changed by root提示,表示更改root用户密码成功,为了安全,OpenWRT会把路由器的Telnet服务关闭,以后只能通过ssh协议和root用户密码登录路由器的Linux终端。

三、修改network配置连上互联网

再用一根网线,把路由器的WAN口与猫的Ethernet接口连接;

1.用WinSCP登陆路由器;
2.进入路由器的/etc/config目录,双击打开network文件;
3.修改“config interface 'wan'”项目为如下:

config interface 'wan'
option ifname 'eth1'
option _orig_ifname 'eth1'
option _orig_bridge 'false'
option proto 'pppoe'
option username '你的宽带账号'
option password '账号密码'

4.按Ctrl+S保存,或直接点保存图标,会再次出现提示窗口,按“否”按钮,显示上传提示;
5.再次打开network文件,确认修改成功;
6.按Ctrl+P打开PuTTY,登录路由器的Linux终端;
7.在提示符后输入“/etc/init.d/network restart”,等待一会,提示几行“'radio0' is disabled”等状态信息就表示重启完毕;
8.在提示符后输入“ping 8.8.8.8”,如果Ping通,表示已经成功接入互联网,按Ctrl+C可停止Ping操作;

四、安装Web管理界面LuCY

1.在打开PuTTY显示的路由器Linux终端中,输入“opkg update”,开始下载Packages.gz并更新;
2.输入“opkg install luci_trunk+svn9663-1_ar71xx.ipk”,安装LuCY主体,先开始自动下载各种关联库,下载完会自动安装配置,最后显示“Configuring luci.”;
3.输入“opkg install luci-i18n-chinese_trunk+svn9663-1_ar71xx.ipk”,安装LuCY简体中文语言;最后显示“Configuring luci-i18n-chinese.”;
4.输入“opkg install luci-theme-bootstrap_trunk+svn9663-1_ar71xx.ipk”,安装LuCY主题,最后显示“Configuring luci-theme-bootstrap.”;
5.输入“/etc/init.d/uhttpd enable”回车,打开uhttpd服务;
6.输入“/etc/init.d/uhttpd start”回车,让uhttpd自启动;
7.在电脑端的浏览器中输入“192.168.1.1”,可访问路由器就表示LuCY安装成功;
8.进入LuCY界面的System选项页;
9.点开Language and Style选项页;
10.在Language下接框中选择“chinese”,把语言改成中文;
11.在Design下下接框中选择“Bootstrap”,把主题改成Bootstrap;
12.按下“Save & Apply”,保存并应用;
13.按下“Logout”选项退出,即出现中文Bootstrap的登录界面。

五、其它要点

 在第四部分第2、3、4步可以先下载好这三个ipk包,用WinSCP放到路由器的/tmp目录,再用“cd /tmp”命令进入/tmp目录执行,这样可以避免连接错误。

离线批量ipk安装方法
1.下载*.ipk插件包;
2.用WinSCP上传a.ipk、b.ipk、c.ipk到/tmp下;
3.用PuTTY执行:

opkg update
cd /tmp
opkg install a b c

修改ipk包的软件源
/etc/opkg.conf文件记录着软件源,src/gz Packages后面地址就是软件源了,opk.conf文件代码如下:

#src/gz packages http://downloads.openwrt.org/snapshots/开发代码/版本/芯片/packages/
src/gz Packages ftp://a:a@192.168.1.100
dest root /                  
dest ram /tmp
lists_dir ext /var/opkg-lists
option overlay_root /overlay
dest plugin_root /plugin_root

查看已安装的ipk:

opkg list-installed

删除已安装的ipk:

opkg remove xxxx.ipk

显示文件:

cat etc/config/network

编辑文件:

vim etc/config/network

本文章由 http://www.wifidog.pro/2014/12/30/wifidog-openwrt-luci%E5%AE%89%E8%A3%85.html整理编辑,转载请注明出处

wifidog 实现无线认证

openwrt web管理luci界面修改
以前都没听过openwrt和luci,只接触过简单的php语言。由于工作原因,要修改下luci的界面,竟然用了我2天的时间才简单的了解了luci的用法。这里简单的和大家分享下。(就接触2天,本人又是菜鸟级别,高手直接略过吧)大家发现有什么错误就和我说下大家共同学习。我主要是想修改下open后台界面网页的内容。

具体怎么安装已经有人介绍过来了,我就不详细说了。下面说配置好之后,修改UI的做法。
在浏览器中输入:http://192.168.1.1/ 会自动跳到http://192.168.1.1/cgi-bin/luci 登陆默认root 密码是空。
默认的几个一级菜单都是在modules\admin-full\luasrc\controller\admin\ 这个目录下,
这个就类似于php的根目录了。/etc/config/这个目录下面的文件,个人观点是可以把它当做是php中的数据库连看待,这样反而更方便理解。
实际上luci界面提供的已经很全了,我们并没有多少必要要新建立页面,我们大多就是在已有的界面上添加一些内容。比如我们公司现在需要添加wifi的isolate和maxassoc这两项属性。就让我找了半天才找到
1.jpg

首先要找到network-wifi对应的文件,再找点击edit后页面对应的文件。
wifi-edit.jpg

network.lua这个文件里面就定义了network下面有哪些二级目录。

比如我要改wifi,我就看到有

if has_wifi and has_wifi.size > 0 then page = entry({“admin”, “network”, “wireless”}, arcombine(template(“admin_network/wifi_overview”), cbi(“admin_network/wifi”)), _(“Wifi”), 15) page.leaf = true page.subindex = true

这里面有cbi(“admin_network/wifi”)这条语句。知道的人就知道,不知道也没关系,想知道可以自己查下。

这时我们到目录\modules\admin-full\luasrc\model\cbi\admin_network\下面可以发现一个wifi.lua的文件,cbi的语句就是指向的这个文件。我们打开wifi.lua后,在———————- Interface ———————–这个下面地方添加

isolate = s:taboption(“advanced”, Flag, “isolate”, translate(“Separate Clients”),translate(“Prevents client-to-client communication”))

maxassoc = s:taboption(“advanced”, Value, “maxassoc”, translate(“Connection Limi”),translate(“Specifies the maximum number of clients to connect.”))

这样两条语句就可以了。进入network-wifi edit看下我们修改的效果

我们进入network-wifi之后选择一个无线网络点击edit后进入页面
example.jpg

在Interface Configuration下面的Advanced Settings下面可以进行修改之后点击Save & Apply

修改这两项是保存在什么地方呢?刚刚我说了,/etc/config/目录下相当于数据库的功能。

这时我们vi /etc/config/wireless可以查看到我们刚刚修改内容。

wireless-config.jpg

可以看到已经修改为我们刚刚调整的77了。

有的人想要添加新的页面和功能,可以看下下面的内容。

下面内容来源于chaochaoblog

要完成一个新模块并用到里面需要两个东西,

第一个我们先找到usr/lib/lua/LuCI/controller在里面建立一个文件夹,也就是我们的模块名称,就叫smustar吧

在smustar下面再写我们模块的主文件就叫smumodule.lua吧

参考官网,我们的模块写法应该是这样子的

module(“LuCI.controller.smustar.smumodule”, package.seeall)

function index()
entry({“admin”, “network”, “802.1x“}, cbi(“smustar-smumodule/netifaces”), “Network interfaces”, 30).dependent=false
end

第一句话是声明一下这个模块了,没什么可说的。

第二句话就是我们模块的主函数,其中呢要告诉它我们的入口,与其说入口,不如说就是告诉它是要admin登录才能用的,是在network这个菜单下,名字呢,叫做802.1x。模块执行的程序呢在smustar-smumodule/netifaces这里。

好了各位又郁闷了smustar-smumodule/netifaces是什么东西,这是我们要建立的另外一个文件,上面不是说要两个么

我们找到路径/usr/lib/lua/LuCI/module

在下面建立文件夹smustar-smmodule建立文件netfaces.lua

好了接下来就是要在netfaces.lua写我们的程序了,参考官网所说的这个什么LuCI最酷的地方,也就是修改config文件

不要说你不懂什么是config文件了,最简单的比如network。

我们在/etc/config下面建立一个配置文件叫smuset吧

那这就是一个config文件的写法

config ‘interface’ ‘smustar’

option ‘user’ ‘youruser’
option ‘pass’ ‘yourpass’

ok这个config文件就是这样子了接下来写netfaces.lua

m = Map(“smuset”, “smustar”) — We want to edit the uci config file /etc/config/smustar 这里是我们要配置的文件了,默认的路径它已经能够区别的,不用管了
s = m:section(TypedSection, “interface”, “smustar”) — Especially the “interface”-sections读出里面的interface区域来
s.addremove = true — Allow the user to create and remove the interfaces

s:option(Value, “user”, “youruser”)这个能就是一个input即一个输入框了读取的是smuset中的user项。youruser是提示语罗

key=s:option(Value, “pass”, “your password”)

key.password=true; 设置为星号的密码输入框

return m — Returns the map
好了文件就完成了,之后我们进入LuCI配置界面

在network下可以看到了802.1x选项

进入后有账号和密码输入框 改一下之后

save&apply一下,发现密码被修改了。我们的802.1x配置界面就做好了!

本文章由 http://www.wifidog.pro/2014/12/30/wifidog-%E8%AE%A4%E8%AF%81-1.html 整理编辑,转载请注明出处