Ubuntu Learning Notes
事情的起因是我按照教程运行搭载在JetsonNano上的ubuntu系统,发现系统无法连接wifi,于是查找资料试图解决。当我最后解决问题整理完这篇笔记之后我在脑海中构建了我的思考过程,发现解决这个问题其实也只需四到五步的推理,但是事实总是如此,为了这几步的解决步骤,我花了两个下午两个晚上,这么一想其实我的效率还可以更高点,下次我从早上开始学习思考,再遇到类似的未知领域的问题是不是一天就能想出来呢?我陷入了好奇之中。
$$
\sum_{i=0}^n i^2 = \frac{(n^2+n)(2n+1)}{6}
$$
1 网络拓扑结构的理解
1.1 输入ifconfig,查看网络信息
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.0.16 netmask 255.255.255.0 broadcast 192.168.0.255
inet6 fe80::4320:3860:46:8803 prefixlen 64 scopeid 0x20<link>
ether 48:b0:2d:5b:dc:56 txqueuelen 1000 (Ethernet)
RX packets 18660 bytes 1886816 (1.8 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 20777 bytes 6823167 (6.8 MB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 150 base 0xe000
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 2505 bytes 180228 (180.2 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 2505 bytes 180228 (180.2 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
rndis0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 6a:64:62:35:cd:69 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
usb0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 6a:64:62:35:cd:6b txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlan0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.9.1 netmask 255.255.255.0 broadcast 192.168.9.255
inet6 fe80::1acc:18ff:fe9b:24a4 prefixlen 64 scopeid 0x20<link>
ether 18:cc:18:9b:24:a4 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 1 overruns 0 frame 0
TX packets 315 bytes 74205 (74.2 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
1.2 理解命令行的基本内容
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536lo:网卡名称为 lo,代表本地回环接口。flags=73<UP,LOOPBACK,RUNNING>:表示该接口卡的状态标志,其中:UP:接口卡已启用。LOOPBACK:接口卡为本地回环接口。RUNNING:接口卡正在运行。
mtu 65536:接口卡的最大传输单元 (MTU) 大小为 65536 字节。
inet 127.0.0.1 netmask 255.0.0.0inet 127.0.0.1:接口卡的 IPv4 地址为 127.0.0.1,它是本地回环地址,用于在本机内部进行通信。netmask 255.0.0.0:子网掩码为 255.0.0.0,表示回环地址的范围。
inet6 ::1 prefixlen 128 scopeid 0x10<host>inet6 ::1:接口卡的 IPv6 地址为 ::1,它是本地回环地址的 IPv6 版本。prefixlen 128:IPv6 地址的前缀长度为 128。scopeid 0x10<host>:接口卡的作用域 ID,表示本地主机。
loop txqueuelen 1 (Local Loopback)loop:接口类型为回环接口。txqueuelen 1:发送队列长度为 1。(Local Loopback):本地回环接口。
RX packets 2505 bytes 180228 (180.2 KB)RX packets 2505:接收数据包的数量为 2505。bytes 180228:接收数据的字节数为 180228 字节(180.2 KB)。
RX errors 0 dropped 0 overruns 0 frame 0RX errors 0:接收错误的数量为 0。dropped 0:丢弃的接收数据包数量为 0。overruns 0:接收数据超出缓冲区的次数为 0。frame 0:帧错误的数量为 0。
TX packets 2505 bytes 180228 (180.2 KB)TX packets 2505:发送数据包的数量为 2505。bytes 180228:发送数据的字节数为 180228 字节(180.2 KB)。
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0TX errors 0:发送错误的数量为 0。dropped 0:丢弃的发送数据包数量为 0。overruns 0:发送数据超出缓冲区的次数为 0。carrier 0:载波错误的数量为 0。collisions 0:碰撞的数量为 0。
2 检测是否有WIFI网络
输入sudo nmcli devide wifi list,检测是否有wifi信号,若无,优先检测硬件情况,查看网卡的插拔情况是否正常,若正常,排除硬件问题,进行下一步。
3 排查软件方面的网络配置情况
检查无线适配器状态: 确保无线适配器已启用
sudo nmcli radio wifi on #sudo nmcli radio wifi off #关闭无线网络刷新Network Manager: 刷新Network Manager以确保其了解当前网络状态
sudo service network-manager restart验证无线配置: 仔细检查
wlan0的无线配置。确保无线接口使用以下命令正确配置:sudo nmcli dev show wlan0扫描Wi-Fi网络: 手动触发Wi-Fi扫描
sudo nmcli device wifi rescan检查Wi-Fi网络列表: 扫描后,使用以下命令检查可用的Wi-Fi网络:
sudo nmcli device wifi list查看Network Manager日志: 检查Network Manager日志是否有错误或相关信息:
journalctl -xe | grep NetworkManager更新Network Manager: 确保您的Network Manager 已更新至最新版本:
sudo apt-get update sudo apt-get upgrade检查驱动程序问题: 验证无线适配器的驱动程序是否已安装并正常工作。
sudo lshw -C network
一般来说假如前三步都没问题,第四步手动扫描wifi时出现报错,例Error: Scanning not allowed while unavailable or activating.这个错误表明在无线网络设备不可用或正在激活时,无法执行扫描操作。则缩小范围,检测设备是否正常启动。
4 查看系统中的各种网络设备及其状态
4.1 输入nmcli device,确保无线网络设备处于可用状态。
eth0 ethernet connected Wired connection 1 #以太网设备,已连接,使用有线连接1。
l4tbr0 bridge unmanaged -- #桥接设备,未受 NetworkManager 管理。
dummy0 dummy unmanaged -- #虚拟设备,未受 NetworkManager 管理。
rndis0 ethernet unmanaged -- #以太网设备,未受 NetworkManager 管理。
usb0 ethernet unmanaged -- #以太网设备,未受 NetworkManager 管理。
lo loopback unmanaged -- #回环设备(loopback),未受 NetworkManager 管理。
wlan0 wifi unmanaged -- #无线设备,未受 NetworkManager 管理。
根据这些信息,wlan0 设备当前处于未受 NetworkManager 管理的状态,可能是由于之前在配置文件中指定了 unmanaged-devices=interface-name:wlan0。
4.2 配置文件将 wlan0 设备纳入 NetworkManager 的管理
配置文件并删除或注释掉相关配置行以将 wlan0 设备纳入 NetworkManager 的管理,可以按照以下步骤进行操作:
打开终端,并使用合适的文本编辑器(如 nano、vim 等)以管理员权限打开 NetworkManager 主配置文件。在大多数 Linux 发行版上,该文件位于
/etc/NetworkManager/NetworkManager.conf。例如,在终端中输入以下命令打开文件:
sudo vim /etc/NetworkManager/NetworkManager.conf将managed=false
改成managed=true在文本编辑器中,查找包含
unmanaged-devices的行。该行可能类似于unmanaged-devices=interface-name:wlan0。请注意,可能还有其他设备也被列为未受管理。要删除这一行配置,请将其完全从文件中删除。要注释掉这一行,可以在行的开头添加一个井号
#。示例:
# unmanaged-devices=interface-name:wlan0保存更改(在 nano 编辑器中按下
Ctrl + O,然后按下Enter),然后关闭编辑器(在 nano 编辑器中按下Ctrl + X)。重新启动 NetworkManager 服务,以使更改生效。可以使用以下命令:
sudo systemctl restart NetworkManager显示当前系统中的网络连接配置信息,查看已连接的网络
nmcli connection show
5 解决系统每次重启都会重置配置文件
系统在重启后自动生成了 unmanaged-devices=interface-name:wlan0 这段语句,可能是因为 NetworkManager 在重启时读取了默认的配置文件,并将之前的更改覆盖掉了。
为了解决这个问题,你可以尝试以下方法:
创建一个 NetworkManager 配置文件片段:创建一个新的配置文件片段,其中包含你希望保留的配置项。在这个片段中,删除或注释掉
unmanaged-devices=interface-name:wlan0这一行。例如,你可以创建一个名为/etc/NetworkManager/conf.d/99-custom.conf的文件。使用以下命令创建并编辑配置文件片段:
复制代码sudo nano /etc/NetworkManager/conf.d/99-custom.conf在编辑器中添加以下内容:
复制代码[keyfile] unmanaged-devices=none保存更改(在 nano 编辑器中按下
Ctrl + O,然后按下Enter),然后关闭编辑器(在 nano 编辑器中按下Ctrl + X)。重新启动 NetworkManager 服务:
复制代码sudo systemctl restart NetworkManager
这样,当 NetworkManager 重启时,它将读取新的配置文件片段,并应该不再生成 unmanaged-devices=interface-name:wlan0 这段语句。
注意:确保新创建的配置文件片段位于 /etc/NetworkManager/conf.d/ 目录中,这样 NetworkManager 在读取配置时会包含这个目录下的所有配置文件。






