RPi Zero 使用 NetworkManager 管理网络连接

  • 前言
  • 一、准备工作
    • 1. 工具/材料
    • 2. 登录到树莓派并配置网络共享
    • 3. 安装必备工具
  • 二、安装 NetworkManager
    • 1. 建立虚拟终端
    • 2. 安装 NetworkManager
    • 3. 验证安装
    • 4. 处理冲突
    • 5. 启用服务并修改默认配置
    • 6. 重新配置网络
    • 7. 删除 `dhcpcd5`
  • 收尾

本文章为系列文章《Raspberry Pi Zero 单板配置手记》的第三篇,上一篇为《Raspberry Pi Zero 单板配置手记(二)登录到树莓派并共享网络》。
因个人需求,只对单板的树莓派 (不含显示器、摄像头等外设,此 Zero 版本也不含无线模块) 及各种基本系统配置进行叙述。

前言

前文中提到,通过 wpa_supplicant 进行网络连接的管理并不方便,想要临时切换连接到其他无线网络比较困难,因此我们将使用 NetworkManager 代替之。

本次操作需更换网络连接管理程序,会导致无线网络连接中断并无法自动重连,故而需按照本系列文章之篇二,通过 USB 连接树莓派。


一、准备工作

1. 工具/材料

  • 已经配置好的树莓派 Zero
  • USB-microUSB 数据线(供电/连接电脑用,至少能承载 1A 电流)
  • Linux 主机或安装有 putty/ssh 的 Windows 主机

2. 登录到树莓派并配置网络共享

通过 USB 登录,参考本系列文章之篇二。

3. 安装必备工具

树莓派系统中需提前安装以下工具

  • screen 用于建立虚拟终端(可用 tmux 代替,本文仅以 screen 为例)
$ sudo apt install --no-install-recommends -y \screen

二、安装 NetworkManager

1. 建立虚拟终端

虚拟终端有一个非常优秀的特点,那就是在远程连接意外中断时,虚拟终端可在后台继续运行。恰好可应用于本次场景之中。

$ screen -S network  # 新建一个 screen 虚拟终端会话

建立好虚拟终端后,我们可用如下方式对虚拟终端进行管理
脱离(切换到后台):Ctrl+A, Ctrl+D
新建:Ctrl+A, N
切换:Ctrl+A, Ctrl+A

在终端外,可用命令重新连接到虚拟终端

$ screen -r 会话名称  # 连接 (attach) 一个脱离的 (detached) 终端
$ screen -d -r 会话名称  # 强行使一个虚拟终端连接到当前终端

仅作示例,更多操作方法请按 Ctrl+A, ? 参考 screen 的帮助信息。本文中可能仅会用到一个 screen -d -r

2. 安装 NetworkManager

在之前创建的虚拟终端中安装 NetworkManager 及必要的依赖包

# 安装 NetworkManager,并在完成后 30 秒自动关闭树莓派
$ sudo apt install network-manager -y; echo Installation complete.; sleep 25; sudo systemctl disable network-manager; sleep 5; sync; sudo poweroff

由于未来可能还会用到一些相关软件包,这里就不加 --no-install-recommends 参数了。

若是通过 WiFi 连接到树莓派,则在操作过程中连接会中断,故而我们让其在安装完成后 30 秒自动关闭树莓派,然后之后可手动启动它,网络会自动重连,以避免连接中断后无法再次连接到树莓派。待树莓派重新启动,重新登录到树莓派。

若连接没有中断,则在提示“Installation complete.”时,按 Ctrl+C 终止后续操作。

3. 验证安装

输入命令验证安装成果

$ nmcli --version
nmcli tool, version 1.14.6

成功输出版本号,即说明安装成功。

4. 处理冲突

树莓派默认自带的 dhcpcd5 与 NetworkManager 冲突,后者默认使用 dhclient,而树莓派默认会自动启动 dhcpcd 服务,导致树莓派网络连接出现问题,如获取多个 IP 等。

停用 dhcpcd 服务

# 停用 dhcpcd 服务并在重启后生效。不能立即停止服务,否则与树莓派的连接将中断
$ sudo systemctl disable dhcpcd

目前我们已安装 NetworkManager,就无需再使用 wpa_supplicant,或者说,不使用它进行管理。

执行命令以停用 wpa_supplicant

# 重命名 wpa_supplicant.conf 使其失效
$ sudo mv /etc/wpa_supplicant/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant.conf.bak
# 取消 wpa_supplicant 服务的自动运行
$ sudo systemctl disable wpa_supplicant

不能卸载或彻底停用(mask)wpa_supplicant,NetworkManager 仍需要使用其管理网络接口,我们只是让 wpa_supplicant 让出主导权而已。

5. 启用服务并修改默认配置

设置 NetworkManager 服务的自启,不能立即运行服务,否则网络连接会立即中断

# 设置自启但不立即运行 network-manager 服务
$ sudo systemctl enable network-manager

NetworkManager 默认配置可能会让网络接口的 MAC 地址随机化,每次扫描时会更换一个 MAC 地址,并不方便管理。
修改 NetworkManager 的配置文件 /etc/NetworkManager/NetworkManager.conf,添加一个小节

[device]
wifi.scan-rand-mac-address=no

NetworkManager 默认不管理接口 usb0(通过 USB 与树莓派建立连接所需),这导致无法通过 USB 与树莓派连接。
在该配置文件中再添加一个小节以使其启用对 usb0 的自动管理。

[device-usb0]
match-device=interface-name:usb0
managed=1

以上的两个小节,可添加在默认配置文件中,也可以添加到独立的文件存于 /etc/NetworkManager/conf.d/ 目录中。

6. 重新配置网络

此时尚且不能启动 NetworkManager 服务,故我们先手动创建连接文件。

/etc/NetworkManager/system-connections/ 中创建一个新的文件 Test_Wifi.nmconnection

[connection]
id=Test_Wifi
type=wifi[wifi]
mac-address=XX:XX:XX:XX:XX:XX
ssid=Test_Wifi[wifi-security]
auth-alg=open
key-mgmt=wpa-psk
psk=Test_Password

其中,文件名及配置中的 Test_Wifi 替换为要连接的 WiFi 名称,配置中的 Test_Password 修改为 WiFi 密码,mac-address= 后填上所用网络接口的 MAC 地址(使用 ifconfig 查看)。若只存在一个无线网络接口,则可删除该项。

保存完毕后,重启树莓派

$ sync; sudo reboot

此时网络连接会中断,由于各种配置已设置好,稍后树莓派会重启,并通过 NetworkManager,自动连接配置好的网络。

连接好后,重新登录树莓派,利用 nmcli 删除现有连接并重新连接到无线网络,以使 NetworkManager 自动填充 Test_Wifi.nmconnection 连接配置文件的内容(不必需,但如此操作,可避免因手动创建的配置文件不完善而导致的问题)

$ screen  # 新建一个虚拟终端
# 在虚拟终端中执行以下命令
$ sudo nmcli c de Test_Wifi; sleep 5; sudo nmcli d w c Test_Wifi password Test_Password

WiFi 名称和密码中,任意一者有特殊符号或者含空格的,需用引号扩起来。

若树莓派上有不只一个网络接口,则可指定使用特定的网络接口进行连接,在虚拟终端中输入的命令改为

$ sudo nmcli c de Test_Wifi; sleep 5; sudo nmcli d w c Test_Wifi password Test_Password ifname wlan0  # 使用 wlan0 连接无线网络

执行命令时,会删除现有网络连接再重新连接,网络会中断并重新恢复。过一会儿再次登录树莓派即可。

若经过较长时间仍未连接到网络,需要断电并对 TF 卡分区中重新编写 /etc/NetworkManager/system-connections/Test_Wifi.nmconnection 文件,再重复上述操作,或排查问题所在。此文章便不再累述,可在下方评论区留言。

若无异常,则 NetworkManager 的安装与配置至此完成。

7. 删除 dhcpcd5

在配置好并使用 nmcli 命令确保没有问题后,可彻底删除 dhcpcd5 软件包以避免其他隐而未现的兼容性问题。或是将其彻底禁用(mask)。

# 彻底禁用 dhcpcd 服务
$ sudo systemctl mask dhcpcd
# 或者卸载 dhcpcd5 软件包
$ sudo apt purge dhcpcd5

收尾

安装并手动配置 NetworkManager 着实费了一番过程,不过安装好 NetworkManager 后,便可享受 nmcli 的强大功能。它底层仍利用 wpa_supplicant,但大大简化了各种操作步骤。

接下来是本系列文章的第四篇《Raspberry Pi Zero 单板配置手记(四)调整 TF 卡分区大小的不同方式》。

Raspberry Pi Zero 单板配置手记(三)使用 NetworkManager 管理网络连接相关推荐

  1. Raspberry Pi Zero 单板配置手记(四)调整 TF 卡分区大小的不同方式

    RPi Zero 调整 TF 卡分区大小的不同方式 本文章为系列文章<Raspberry Pi Zero 单板配置手记>的第四篇,上一篇为<Raspberry Pi Zero 单板配 ...

  2. Raspberry Pi 3安装配置Raspbian过程

    1. 前期准备 硬件 Raspberry Pi 3主板 5V 1A安卓充电器及数据线 Samsung 64GB UHS-1 Class10 TF存储卡 TF卡读卡器 网线 HDMI高清线(可无) 支持 ...

  3. 树莓派raspberry Pi 4B安装Ubuntu 20.04 LTS系统后如何连接WiFi

    项目过程中,要求树莓派安装Ubuntu系统,并且可以连接WiFi.在网上看了很多方法,测试过几种方法之后,发现只有通过第三种方法才能顺利连接WiFi,现在将自己的尝试过程和最终的解决方法做一个记录. ...

  4. Raspberry Pi的GStreamer配置

    硬件配置:Raspberry Pi3 + 罗技C310摄像头 使用摄像头作为图像/音频输入,3.5mm耳机插口提供音频输出 RPi将音频与视频传至Windows 如果使用3.5mm音频插口,先将音频输 ...

  5. Raspberry Pi树莓派raspi-config配置

    来源:http://www.waveshare.net/study/article-597-1.html 一.树莓派raspi-config设置 第一次使用树莓派的时候需要进行一些简单的配置,在终端运 ...

  6. Raspberry Pi的Mjpg-streamer配置

    系统配置为RPi3+罗技C310 首先使用 $ v4l2-ctl --list-formats $ v4l2-ctl --list-formats-ext 检查摄像头支持的格式. 一般摄像头会有两种视 ...

  7. win10下最新MySQL8.0安装与环境配置,Navicat图形化管理工具连接,完整详细可收藏

    文章目录 一.MySQL的卸载 二.MySQL的下载安装和配置 三.MySQL的开启和登录 四.MySQL图形化管理工具 一.MySQL的卸载 步骤1:停止MySQL服务 在卸载之前,先停止MySQL ...

  8. 系统备用服务器连接配置异常,网络配置的DNS服务老是异常网络连接老是异常...._网络编辑_帮考网...

    banyangwo 新兵答主 08-08 TA获得超过3262个赞 DNS 是域名系统 (Domain Name System) 的缩写,它是由解析器和域名服务器组成的.域名服务器是指保存有该网络中所 ...

  9. 魔百盒配置服务器信息,中国移动魔百盒网络连接图文教程

    本帖最后由 山阴路的夏天 于 2018-3-8 15:15 编辑 中国移动魔百盒网络连接图文教程 360se_picture.jpg (36.64 KB, 下载次数: 49) 2016-6-28 11 ...

最新文章

  1. 阿里不让多表join?我偏要!
  2. 【图灵】iOS技能书单——入门+进阶+精通
  3. SpringMVC @Transactional的陷井大坑引发No Session found for current thread
  4. Truncated SVD for faster dection
  5. linux 文件指针,Linux中文件描述符fd与文件指针FILE*互相转换实例解析
  6. Python 函数(一)
  7. 那些唱衰智能电视的砖家们可以闭嘴了
  8. 数学问题(二):质数、质因子
  9. settimeout在各个浏览器的最小时间
  10. 搭建Wpf框架(1) —— 管理系统-Wpf客户端框架2.0(OA,聊天,定时任务)
  11. 收费英超与中国球迷相互抛弃
  12. 魅族 刷机android 6.0,魅族mx6 flyme6
  13. 程序员出差如何高效工作?
  14. Java导出Excel每列求和,POI导出excel执行自动求和
  15. Android渠道包生成工具(支持V1、V2签名)
  16. 软件性能测试场景设计,性能测试场景设计杂谈
  17. C++编程笔记:使用WinHTTP实现HTTP访问(解决接收UTF8数据乱码问题)
  18. 棋和麦粒问题(C语言回调函数实现)
  19. airpods pro 使用电脑无法充电的问题
  20. 阿里云AMD服务器计算型实例规格族c6a实例CPU网络收发包云盘IOPS详解

热门文章

  1. linux 启用telnet命令行,linux系统打开telnet端口的方法
  2. Flood Fill算法总结
  3. java入门教学书,Java面试技巧合集
  4. ROS安装和 控制小海龟画圆
  5. 【原】Linux 桌面背景的存放位置
  6. 南理工计算机考研复试科目,2020南京理工大学计算机考研初试科目、参考书目、复试详情汇总...
  7. vue 实现 换一换 功能
  8. Android | ListView、RecyclerView 实现一键回到顶部
  9. [CF480E]Parking Lot
  10. [罗永浩与坚果:一支强弩的妥协]