🍓 第二章 购买、安装与设置
📄 一句话概括

树莓派的价值有一半在网络里——连上网它才能被远程操作、才能当服务器;网络由 NetworkManager 统一管理(对应三个工具:桌面图标、nmtui 菜单、nmcli 命令),Wi-Fi 连不上十次有八次是国家代码没设;至于蓝牙,桌面点图标或 bluetoothctl 六步,就能把键盘、音箱、手柄接上。

📝 本节和前面几节的关系

2-4 把系统调顺了,本节把对外的那条线接通。 本节是第二章的收束:买齐(2-1)→ 装好(2-2)→ 点亮(2-3)→ 调顺(2-4)→ 联网(2-5),五步走完,你手上就是一台可以被远程操作的完整小电脑。 本节还是计算机网络课与服务器课的实战验收:IP 地址、SSH、DNS、网关、端口这些词你都在前面学过,这次它们出现在你自己的机器上;1-5 里说的「无头模式」,也在这里真正落地。

一、上网的三种物理方式

方式 接口名 特点 建议
有线 eth0 最稳、最快、零配置(插上就能用) 第一次无头启动强烈推荐
无线 wlan0 方便、不用线;但涉及密码、国家代码等变量 熟练后日常使用
USB 网卡/手机共享 usb0 等 应急用(手机开热点共享) 临时救急

一句话判据:调试不通的时候,先插网线。 把「无线」这个变量去掉,问题范围立刻小一半——这和服务器课 9.7 讲的「排障要沿链路缩小范围」是同一套思路。

二、谁来管网络:NetworkManager

关键认知(老教程在这里会把你带偏):

早年的树莓派用 dhcpcd + wpa_supplicant.conf 那套机制管网络。从 Bookworm 起,系统改由 NetworkManager 统一管理网络,dhcpcd 已经被移除。所以:

  • 网上「改 /etc/dhcpcd.conf 设静态 IP」的教程——已经失效。
  • 网上「往 boot 分区放 wpa_supplicant.conf」的教程——已经不是被支持的正路。
  • 现在正确的工具是 nmcli(命令)和 nmtui(文字菜单界面)。

同一个网络,三个入口:

入口 长相 适合
桌面右上角图标 点一下看到 Wi-Fi 列表 有桌面,最直观
nmtui 蓝底文字菜单(像 raspi-config) 无头模式但不会敲长命令
nmcli 一行命令 熟练后最快、可写脚本

三、连 Wi-Fi 的三种姿势

姿势一:桌面点图标(最简单)

点右上角网络图标 → 选你的 Wi-Fi → 输密码 → 连上。就这样,没有坑。

姿势二:nmtui(文字菜单)

sudo nmtui

选「启用连接」→ 选 Wi-Fi → 输入 SSID 与密码。方向键操作,适合 SSH 里用。

姿势三:nmcli(命令,推荐记住)

# 1. 看无线网卡是否就绪
nmcli device status

# 2. 扫描周围 Wi-Fi
nmcli device wifi list

# 3. 连接(把名字和密码换成你的)
sudo nmcli device wifi connect "我的WiFi" password "我的密码"

# 4. 确认结果
nmcli connection show --active

成功的样子:nmcli connection show --active 会列出你刚连上的那条(类型 wifi、设备 wlan0)。

断开与重连:

nmcli connection down "我的WiFi"     # 断开
nmcli connection up "我的WiFi"       # 重连
nmcli device disconnect wlan0        # 直接断开设备

四、⚠️ Wi-Fi 最大的坑:国家代码

如果你搜不到自家 Wi-Fi,或者能搜到别的却搜不到自己的——第一个要查的就是国家代码。

为什么? 各国对无线频段的开放范围不同(服务器课/网络课 5.15 讲过 2.4G 只有 1/6/11 三个不重叠信道,5G 频段的开放状况各国差别更大)。系统必须知道「我在哪个国家」,才知道该开放哪些信道。

设置方法:

sudo raspi-config
# → 5 Localisation Options → WLAN Country → CN

或者用命令:

sudo raspi-config nonint do_wifi_country CN

症状对照表:

症状 最可能的原因
搜不到自己家的 Wi-Fi 国家代码未设(尤其是 5G 频段的网络)
有列表,但连上后上不了网 密码对但路由器没给 DHCP/或者上游断网
搜不到任何网络 无线被硬件禁用(rfkill),或用了 Lite 版但没配无线
反复掉线 信号太弱,或 2.4G 信道拥塞;插网线最省事

五、找到自己的地址

hostname -I          # 简洁:直接给出 IP(注意是大写 I)
ip a                 # 详细:看 wlan0 / eth0 那一行的 inet
nmcli device show wlan0 | grep IP4   # 只看 IP 相关

参考输出:

192.168.1.42
2: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> ...
    inet 192.168.1.42/24 brd 192.168.1.255 scope global wlan0

怎么读:192.168.1.42 是门牌号,/24 是掩码(网络课 5.1 讲的「IP 与掩码定网段」——/24 意味着同一个网段是 192.168.1.x)。

想让地址固定下来(免得每次找),两种现代做法:

做法 怎么做 推荐度
路由器 DHCP 地址保留 登录路由器,把树莓派的 MAC 绑定到一个固定 IP ✅ 最推荐——设置全在路由器上,树莓派端零配置
设备端配静态 IP 用 nmcli 给连接加静态地址 可用,但换网络环境要改回来

其实最省事的办法是记主机名:pi-lab.local(2-4 设的)。局域网里 主机名.local 会自动解析到它当前 IP,比记数字轻松得多。

六、远程连接的三种方式(以及一条红线)

方式 端口 你能得到什么 什么时候用
SSH 22 命令行 首选——轻、快、能写脚本
VNC 5900 图形桌面 需要点鼠标操作图形程序时
Raspberry Pi Connect — 官方远程访问服务(网页/浏览器即可,走官方中继) 想在外面也能连、又不想折腾网络配置

实用经验:绝大多数「我需要 VNC」的需求,其实只需要 SSH 敲一条命令就解决了。 先试 SSH,真需要图形界面再上 VNC。

🚨 一条安全红线:永远不要把 22/5900 端口直接转发到公网。 这两个端口是互联网上自动化扫描器盯得最紧的目标,暴露几小时内就会被反复尝试登录(服务器课 7.1 讲的口令攻击,在真实世界里就是这样发生的)。 要在外面访问,正确姿势是:走 VPN(把设备"搬"回家里网络),或走 SSH 隧道(服务器课 7.9 讲的「借公网挖一条加密隧道」),或直接用官方的 Raspberry Pi Connect。

七、蓝牙装置怎么接

桌面环境下,点右上角蓝牙图标就能搜索、配对——和手机一样简单。下面重点讲无头模式下的命令行方式。

bluetoothctl          # 进入蓝牙交互模式

进去后按这六步:

power on              # ① 打开蓝牙
agent on              # ② 启用配对代理
default-agent         # ③ 设为默认代理
scan on               # ④ 开始扫描(这时会刷出周围的设备地址)
                      #    找到你的设备,记下它的 MAC 地址,如 AA:BB:CC:DD:EE:FF
pair AA:BB:CC:DD:EE:FF      # ⑤ 配对
trust AA:BB:CC:DD:EE:FF     #    标记为可信(下次自动连)
connect AA:BB:CC:DD:EE:FF   # ⑥ 连接
scan off              #    连上后停止扫描
exit                  #    退出

常用辅助命令:

bluetoothctl devices          # 列出已配对的设备
bluetoothctl info AA:BB:...   # 看某个设备的详情
bluetoothctl disconnect AA:BB:... # 断开
bluetoothctl remove AA:BB:... # 忘记设备

三类常见设备与注意事项:

设备 说明
蓝牙键盘/鼠标 配对时通常要在键盘上敲一串数字再回车;有的键盘要求先输配对码
蓝牙音箱 连上后还要把音频输出切到它,否则声音还在别处(桌面点音量图标切换)
游戏手柄 多数能被识别;映射按键要另装工具,属于进阶

小坑:蓝牙和 Wi-Fi 都用 2.4G 频段,可能互相干扰。如果蓝牙总断,试试让树莓派用 5G Wi-Fi,或把设备靠近一点。

八、动手 Demo:一条条查过去

第一步:看网络全景

nmcli device status

参考输出与解读:

DEVICE  TYPE      STATE         CONNECTION
eth0    ethernet  connected     Wired connection 1
wlan0   wifi      connected     我的WiFi
lo      loopback  unconnected   --

connected = 通了;disconnected = 没通。

第二步:确认出口畅通(网络课 6.x 的「一跳一跳」实战)

ping -c 3 192.168.1.1        # ① 能通到路由器(局域网出口)吗
ping -c 3 8.8.8.8            # ② 能通到外网(用 IP,绕开域名解析)吗
ping -c 3 www.raspberrypi.com # ③ 域名能解析吗

这三条谁先失败,故障点就在哪一级——这就是下面第九节的排障法。

第三步:配一个蓝牙设备

bluetoothctl
power on
agent on
default-agent
scan on

等目标设备出现(比如 Device AA:BB:CC:DD:EE:FF 蓝牙音箱),记下地址,然后:

pair AA:BB:CC:DD:EE:FF
trust AA:BB:CC:DD:EE:FF
connect AA:BB:CC:DD:EE:FF
exit

看到什么算成功:

Connection successful

或退出后再验证:

bluetoothctl devices Connected

看到什么说明不对:

现象 原因
No default controller available 蓝牙没打开,或没装蓝牙服务
Failed to pair: org.bluez.Error.AuthenticationFailed 配对码没输对,或设备已被别的机器占用
配对成功但立刻断开 设备不支持自动重连,试试先 trust 再 connect

九、网络不通时的四步排障

按这个顺序查,每一步都指向一个具体的层级:

① ping 192.168.1.1     → 通不过?局域网/网卡/密码问题,还没出家门
② ping 8.8.8.8         → 通不过但①通?路由器到外网的问题(或路由器没网)
③ ping www.raspberrypi.com → ①②通但这里失败?DNS 解析问题
④ 用 IP 直连服务试试    → ③失败但用 IP 能连?100% 是 DNS

层级的含义:①是「我的网卡和局域网」、②是「路由器以外的世界」、③是「域名到 IP 的翻译」。先定位层级,再谈修法——不要一上来就重装系统。

DNS 出问题的常见解法:把手动 DNS 设为公共 DNS:

# 查看当前 DNS
nmcli device show wlan0 | grep DNS

十、30 秒实验

亲眼看到「DNS 在干活」。

ping -c 2 www.raspberrypi.com     # 第一条:它会先把域名翻译成 IP
nslookup www.raspberrypi.com      # 第二条:直接问 DNS,让它把翻译结果打给你

第一条输出里会有一行 PING www.raspberrypi.com (xxx.xxx.xxx.xxx)——括号里那个 IP 就是 DNS 翻译出来的。

这 30 秒你收获的是:域名和 IP 是两回事,中间有一个翻译官。看懂这一点,以后任何「网站打不开但 QQ 还能用」的现象,你都能立刻判断——那是 DNS 的问题(网络课 5.4 讲的 DNS,在这里落地)。

十一、常见误区

自测三问 1. 现在树莓派用什么管网络?连 Wi-Fi 的三个入口分别是什么?(**NetworkManager**;桌面右上角图标/`nmtui` 文字菜单/`nmcli` 命令) 2. 「搜不到自己家的 Wi-Fi」最常见的原因是什么?(**国家代码没设**,系统因此不开放对应信道——`raspi-config → 5 Localisation → WLAN Country → CN`) 3. 网络不通时的四步排查顺序是什么?(① `ping 网关` → ② `ping 8.8.8.8` → ③ `ping 域名` → ④ 用 IP 直连;**谁先失败,故障就在哪一级**)

相关笔记