Arch Linux 配置 Wake-on-LAN:Realtek RTL8125 用 NetworkManager 持久唤醒
这次配置 WOL 的目标很明确:让这台 Arch Linux 主机在关机后仍能通过局域网 Magic Packet 唤醒。实际排查时,关键并不是把一条命令跑通,而是先确认真正负责唤醒的有线网卡,再把设置写进 NetworkManager 的连接配置,最后确认 PCI 设备在关机状态下仍允许唤醒。
当前这台机器的有线控制器是 Realtek RTL8125 2.5GbE,内核使用 r8169 驱动。最终采用 NetworkManager 的 802-3-ethernet.wake-on-lan=magic,没有手动写死 hidraw 一类会变化的设备编号,也没有为了应用设置主动断开当前网络。
0. 当前机器与目标参数
先把这次实机环境记下来,后面每一步的判断都基于这些结果:
目标不是让无线网卡参与 WOL,而是让 enp130s0 在关机后监听目的 MAC 为 8C:32:23:3B:46:F3 的 Magic Packet。
1. 先确认网卡、连接和驱动
第一步不要直接对默认网卡名执行配置。接口名、NetworkManager 连接名和 PCI 驱动是三个不同层次,先分别确认:
uname -a
cat /etc/os-release
ip -brief link
nmcli -t -f DEVICE,TYPE,STATE,CONNECTION device status
readlink -f /sys/class/net/enp130s0/device/driver
lspci -nnk | sed -n '/Ethernet controller/,+3p'这次得到的关键结果是:
enp130s0 UP 8c:32:23:3b:46:f3
wlp129s0f0 DOWN 2e:e1:b5:62:dc:b8
enp130s0:ethernet:connected:Wired connection 1
/sys/bus/pci/drivers/r8169
Realtek RTL8125 2.5GbE Controller [10ec:8125]因此后面的对象必须写成连接名 Wired connection 1、设备名 enp130s0,不能把无线接口的 MAC 当成唤醒地址。
2. 发现默认 WOL 没有被 NetworkManager 强制打开
查询连接配置:
nmcli -f connection.id,connection.interface-name,802-3-ethernet.wake-on-lan connection show 'Wired connection 1'原始结果为:
connection.id: Wired connection 1
connection.interface-name: enp130s0
802-3-ethernet.wake-on-lan: defaultdefault 不是“已经确认使用 Magic Packet”,而是把决定权留给驱动和系统默认值。为了让重启、重新连接后仍保持同一行为,需要把它改成明确的 magic。
这台机器当时没有安装 ethtool,所以没有把“驱动当前显示的 Wake-on 字段”误当成已验证结果。NetworkManager 已经提供了持久化入口,先用它完成配置;需要查看驱动能力时再额外安装 ethtool。
3. 用 NetworkManager 设置 Magic Packet
执行下面两条命令:
nmcli connection modify 'Wired connection 1' 802-3-ethernet.wake-on-lan magic
nmcli device reapply enp130s0第一条修改连接配置,第二条把新属性重新应用到当前设备。这里使用 device reapply,不执行 connection down/up,这样不会为了改 WOL 主动切断当前 SSH 或桌面网络。
重新读取配置确认结果:
nmcli -f connection.id,connection.interface-name,802-3-ethernet.wake-on-lan connection show 'Wired connection 1'connection.id: Wired connection 1
connection.interface-name: enp130s0
802-3-ethernet.wake-on-lan: magic这里的 magic 表示只响应标准 Magic Packet,不会因为普通广播或任意局域网流量就唤醒主机,是这次配置的最终 NetworkManager 参数。
4. 再确认 PCI 设备允许系统唤醒
NetworkManager 的连接配置正确,不代表 PCI 电源管理一定允许唤醒。直接读取网卡对应设备的开关:
cat /sys/class/net/enp130s0/device/power/wakeup本机返回:
enabled这个结果说明内核层的 PCI 唤醒开关已经打开。如果这里是 disabled,即使连接属性是 magic,关机后也可能没有任何反应,需要先处理电源管理或固件设置。
想同时确认驱动能力,可以安装并查询 ethtool:
sudo pacman -S ethtool
sudo ethtool enp130s0重点看 Supports Wake-on: 和 Wake-on: 两行。常见的 Magic Packet 标记是 g;如果驱动明确不支持 g,NetworkManager 的配置不会凭空增加硬件能力。
5. BIOS/UEFI 和关机状态的前置条件
WOL 需要主板在关机后继续给网卡提供待机电源。BIOS/UEFI 中通常要打开:
Wake on LAN或Resume by LANPower On By PCI-E关闭会切断 PCIe 待机供电的
ErP、Deep Sleep等选项
系统侧可以先用 systemctl poweroff 做一次完整关机测试。关机后网线必须仍插在这块 RTL8125 网卡上,交换机端口的链路灯通常也应保持亮起或闪烁。睡眠唤醒和 S5 软关机唤醒是两种电源状态,测试时要记录是在 suspend 还是 poweroff 后成功。
6. 从局域网发送 Magic Packet
在同一局域网的另一台 Linux 设备上安装 wakeonlan:
sudo pacman -S wakeonlan
wakeonlan -i 192.168.1.255 8C:32:23:3B:46:F3192.168.1.255 是本机当前 192.168.1.0/24 网段的广播地址,MAC 参数必须写有线网卡的 8C:32:23:3B:46:F3。不要把这个包直接暴露到公网;跨网段唤醒需要路由器支持定向广播或单独的 WOL 中继。
如果同网段广播被交换机过滤,可以先在发送端抓包确认是否真的发出了 102 字节左右的 Magic Packet,再尝试路由器支持的定向广播。抓包只用于确认发送端和网络路径,不能替代 BIOS 和网卡待机供电检查。
7. 常见失败点与本次排查结论
把无线 MAC 当成唤醒地址
本机无线接口是 wlp129s0f0,状态为未连接;WOL 目标是连接状态为 UP 的 enp130s0。有线和无线的 MAC 不同,必须以实际插网线的接口为准。
只改临时 ethtool 状态
sudo ethtool -s enp130s0 wol g 可以立即生效,但重新连接或重启后可能恢复默认。本次把 802-3-ethernet.wake-on-lan magic 写入 NetworkManager 连接,因此配置本身是持久的;ethtool 更适合用来读取能力和验证驱动结果。
只看到 NetworkManager 属性就认为一定能唤醒
连接属性、PCI power/wakeup、BIOS/UEFI 待机供电和交换机广播转发是四个独立环节。本机确认了前两项:连接值为 magic,PCI 唤醒为 enabled;剩下两项要在实际关机和发包时验证。
8. 最终复盘清单
# 连接和接口
nmcli -t -f DEVICE,TYPE,STATE,CONNECTION device status
nmcli -f connection.id,connection.interface-name,802-3-ethernet.wake-on-lan connection show 'Wired connection 1'
# PCI 唤醒开关
cat /sys/class/net/enp130s0/device/power/wakeup
# 可选:驱动能力
sudo ethtool enp130s0
# 同网段发送
wakeonlan -i 192.168.1.255 8C:32:23:3B:46:F3这次最终配置没有修改 IP、网关或路由,也没有安装常驻服务;WOL 的核心只涉及有线连接的唤醒属性、PCI 电源开关、固件待机供电和 Magic Packet 的目的 MAC。把这几个层次分开检查后,后续复盘时可以很快判断问题是在 NetworkManager、驱动、BIOS 还是局域网广播路径。