记录:排查create_ap偶发无法开启自发AP的问题

2024-01-14 14:20

本文主要是介绍记录:排查create_ap偶发无法开启自发AP的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景说明
系统: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的驱动已经挂载

  • ifconfigiwconfig看下网卡是否还在,系统能否识别到
    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模式。。。

在这里插入图片描述

这篇关于记录:排查create_ap偶发无法开启自发AP的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Python Dash框架在数据可视化仪表板中的应用与实践记录

《PythonDash框架在数据可视化仪表板中的应用与实践记录》Python的PlotlyDash库提供了一种简便且强大的方式来构建和展示互动式数据仪表板,本篇文章将深入探讨如何使用Dash设计一... 目录python Dash框架在数据可视化仪表板中的应用与实践1. 什么是Plotly Dash?1.1

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

如何解决mysql出现Incorrect string value for column ‘表项‘ at row 1错误问题

《如何解决mysql出现Incorrectstringvalueforcolumn‘表项‘atrow1错误问题》:本文主要介绍如何解决mysql出现Incorrectstringv... 目录mysql出现Incorrect string value for column ‘表项‘ at row 1错误报错

电脑win32spl.dll文件丢失咋办? win32spl.dll丢失无法连接打印机修复技巧

《电脑win32spl.dll文件丢失咋办?win32spl.dll丢失无法连接打印机修复技巧》电脑突然提示win32spl.dll文件丢失,打印机死活连不上,今天就来给大家详细讲解一下这个问题的解... 不知道大家在使用电脑的时候是否遇到过关于win32spl.dll文件丢失的问题,win32spl.dl

如何解决Spring MVC中响应乱码问题

《如何解决SpringMVC中响应乱码问题》:本文主要介绍如何解决SpringMVC中响应乱码问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC最新响应中乱码解决方式以前的解决办法这是比较通用的一种方法总结Spring MVC最新响应中乱码解