linux配置wol需三步协同:先用ethtool确认并临时启用网卡magic packet支持(wol g),再通过systemd服务或nmcli modify ignore持久化设置防覆盖,最后确保bios开启wake-on-lan且系统处于s5/s3状态。

Linux 配置网卡支持 Wake-on-LAN(WOL)不是单靠一个命令就能完成的事,它需要硬件支持、内核驱动配合、系统级持久化设置三者协同。核心思路是:先确认并启用网卡的 WOL 硬件能力,再防止 NetworkManager 或系统重启后将其重置,最后确保 BIOS/UEFI 和电源管理不阻断该功能。
确认网卡是否支持并临时启用 WOL
WOL 是网卡固件级功能,必须由 ethtool 操作:
- 查网卡名(如
ip -br a | grep UP),常见为enp0s31f6、eno1、eth0等 - 运行
sudo ethtool,重点看两行:
Supports Wake-on: 若含g(magic packet),说明支持;
Wake-on: 若为d,表示当前禁用 - 临时启用(仅本次开机有效):
sudo ethtool -s wol g - 验证:
sudo ethtool | grep "Wake-on:"应输出Wake-on: g
让 WOL 设置重启后依然生效
单纯用 ethtool 设置会在重启或 NetworkManager 重载连接时丢失,需持久化:
-
推荐方式:systemd 服务
创建/etc/systemd/system/wol-enable.service:[Unit] Description=Enable Wake-on-LAN for eth interface After=network.target [Service] Type=oneshot ExecStart=/sbin/ethtool -s wol g RemainAfterExit=yes [Install] WantedBy=multi-user.target
启用:sudo systemctl daemon-reload && sudo systemctl enable --now wol-enable - 替代方式(旧式网络配置):
若使用/etc/network/interfaces,在对应 iface 段加:post-up /sbin/ethtool -s wol g
阻止 NetworkManager 覆盖 WOL 设置
NetworkManager 默认可能在连接启停时重置网卡参数,需显式禁止:
- 查当前有线连接名:
nmcli connection show --active | grep ethernet - 设为 ignore(告诉 NM 不要干预 WOL 状态):
sudo nmcli connection modify "有线连接 1" 802-3-ethernet.wake-on-lan ignore - 重启连接生效:
sudo nmcli connection down "有线连接 1" && sudo nmcli connection up "有线连接 1"
配套必要检查项
缺一不可,否则即使软件配置正确也无法唤醒:
- BIOS/UEFI 中开启 WOL:进入设置 → Power Management → 找到 “Wake on LAN”、“PME Event Wake Up” 或 “Resume by PCI/PCI-E Device”,设为 Enabled
-
确保机器处于软关机状态(S5)或休眠(S3):WOL 无法唤醒完全断电(拔电源)或 ACPI S4(hibernate 到磁盘)状态;建议测试时用
sudo systemctl suspend或sudo systemctl poweroff(非 halt) - 物理层连通性:网线必须插稳,部分主板要求使用特定端口(如板载千兆口),且交换机/路由器需允许广播包(UDP port 7/9)通过(一般默认允许)
- (可选)发送测试包:
sudo apt install wakeonlan && wakeonlan aa:bb:cc:dd:ee:ff











