背景说明:
系统:Xubuntu16.04;内核:4.14;无线网卡:EDIMAX EW-7822UAC
关于无线网卡的驱动安装和create_ap配置参考博文:Xubuntu16.04系统中使用EDIMAX EW-7822UAC无线网卡开启5G自发AP
目录
- 问题记录
- 排查过程
- 解决办法
问题记录
最近新买了一个EDIMAX EW-7822UAC无线网卡,安装了驱动,配置了create_ap,设置了5g的AP模式,当时无线网卡可以正常发射5g WIFI,外部设备也可以正常连接。今天我重启设备之后,突然就搜不到WIFI,赶紧排查了下驱动、网卡、createa_ap服务是否正常:
lsmod
:查看驱动挂载
$ lsmod | grep 88
8821au 2142208 0
cfg80211 643072 1 8821au
kvm_intel 217088 0
aesni_intel 188416 0
hid 114688 3 i2c_hid,usbhid,hid_penmount
可以看到8821au的驱动已经挂载
ifconfig
和iwconfig
看下网卡是否还在,系统能否识别到
ifconfig(Interface Configuration)是一个用于配置和显示网络接口的命令。
iwconfig(Wireless Configuration)是一个用于配置和显示无线网络接口的命令。
可以看到无线网卡也被正确识别了- 查看create_ap服务是否正常:
systemctl status create_ap
先给出之前正常启动AP模式的create_ap服务状态,如下图:
但当搜不到WIFI后,此时再查看create_ap服务状态,如下图:
显示当前的假设是5G信号频率,信道超过了14,这就很奇怪了,因为要开启5G,我create_ap配置文件中设置的是165信号,iw list
查看当前网卡是支持165信道的。
既然日志说了超过14信道,那就修改下/etc/create_ap.conf
配置文件,信道改成8试下,改完后重启了下create_ap,再次查看create_ap服务状态,如下图:
此时create_ap日志又显示警告指出你的适配器不完全支持AP虚拟接口,这就有问题了。。。
排查过程
- 插拔无线网卡实时监控系统的内核消息:
dmesg -wH
- 查看create_ap服务的日志:
journalctl -u create_ap
- 查看create_ap程序状态,发现cpu占用率为0,说明create_ap未启动或被阻塞住了
htop -p `pgrep create_ap
- 根据create_ap的服务状态,可以看到通过指令启动:
/usr/bin/create_ap --config /etc/create_ap.conf
- 查看
/usr/bin/create_ap
,发现create_ap是由shell脚本所写,剩下的就是代码debug了,根据/usr/bin/create_ap --config /etc/create_ap.conf
输出的终端信息,在/usr/bin/create_ap中增加打印信息,不断运行调试,最终发现服务未启动的原因是卡在了一个while循环里面,如下:
具体是卡在了networkmanager_iface_is_unmanaged
函数里面,继续查看这个函数
networkmanager_iface_is_unmanaged( ) {is_interface "$1" ll return 2networkmanager_knows_iface "$1" l| return 0(nmcli -t -f DEVICE,STATE d 2>&1 | grep -E "^$1:unmanaged$" > /dev/null 2>&1) || return 1
}
$1
表示无线网卡名称,结合while循环中的内容可知,只有当networkmanager_iface_is_unmanaged
函数中匹配到无线网卡的状态是"unmanaged"状态,才会退出while循环。
- 至此 create_ap 服务未启动的原因已经找到,是当前无线网卡的状态不对,可通过
nmcli -t -f DEVICE,STATE d
指令来查看,(这个指令是用于显示网络设备的状态。具体来说,-t选项表示使用制表符作为字段分隔符,-f选项指定要显示的字段,DEVICE表示设备名称,STATE表示设备的状态。因此,这个指令将会以制表符分隔的格式显示网络设备的名称和状态。)
root@bossdog-2177018234:~# nmcli -t -f DEVICE,STATE d
enp1s0:connected
enp2s0:connecting (getting IP configuration)
wlx08beac134a56:disconnected
lo:unmanaged
# 上面这些信息是使用nmcli命令获取的网络设备状态。具体来说,它显示了四个网络设备的状态:
# enp1s0:已连接
# enp2s0:正在连接(正在获取IP配置)
# wlx08beac134a56:已断开连接
# lo:未受管控
# 其中,enp1s0表示有线网络接口1,enp2s0表示有线网络接口2,wlx08beac134a56表示无线网络接口,lo表示本地环回接口。这些状态信息显示了每个网络设备的连接状态和管理状态。
-
可以看到,当前无线网卡wlx08beac134a56的状态是disconnected未连接的状态,而不是unmanaged未受管控的状态,需要查一下原因。
查询资料可知:
wlx08beac134a56显示为disconnected,而不是unmanaged。这是因为disconnected表示无线网卡已经被管理,但当前未连接到任何网络。
unmanaged状态表示网络设备未由NetworkManager管理。这通常发生在用户手动配置网络设备或者使用其他网络管理工具的情况下。
因此,区别在于disconnected表示设备已被NetworkManager管理,但当前未连接到任何网络;而unmanaged表示设备未由NetworkManager管理。 -
最终问题转化为如何让无线网卡不被
NetworkManager
管理
解决办法
如何让无线网卡不被NetworkManager
管理
- 查询相关资料,要将当前的无线网卡设备设置为未由NetworkManager管理,可以使用以下命令:
sudo nmcli dev set wlx08beac134a56 managed no
这条命令告诉NetworkManager停止管理指定的无线网卡设备。将"wlx08beac134a56"替换为你的无线网卡设备名称。执行此命令后,NetworkManager将不再管理该设备,而设备将变为未受管控状态。
执行上面命令后会在/etc/NetworkManager/NetworkManager.conf
文件的在[keyfile]
部分下方生成一个配置项。
PS:但实际操作后发现重启设备之后无线网卡还是被NetworkManager管理了,于是改用无线网卡的MAC地址。
操作:
将/etc/NetworkManager/NetworkManager.conf里面的文件在[keyfile]部分下方添加一行unmanaged-devices=mac:<无线网卡的MAC地址>
,其中<无线网卡的MAC地址>是要设置为不被管理的无线网卡的MAC地址。可以使用ip addr
命令查找无线网卡的MAC地址,或者ifconfig查看MAC地址。重新启动NetworkManager服务sudo systemctl restart NetworkManager
,以使更改生效。
最终问题解决,只要无线网卡处于未受管控的状态,则create_ap可以正常启动AP模式。。。