Ubuntu如何配置具体的系统网络接口在低功耗模式下的唤醒策略
可以先执行sudo ethtool | grep -i "wake-on"确认当前状态:Wake-on: d表示已禁用,g表示已启用;随后再用sudo ethtool -s wol g进行临时开启。需要注意的是,这种方式重启后通常不会保留,若想长期生效,还得配合systemd服务或udev规则来做持
可以先执行sudo ethtool

如何用 ethtool 查看并设置网卡 Wake-on-LAN 状态
Ubuntu 默认不启用关机状态下的网络唤醒,即使 BIOS 已开启 WOL,系统启动后仍需手动配置网卡的 wol(Wake-on-LAN)标志。关键不是“能不能唤醒”,而是“ethtool 输出里 Wake-on 字段是否为 g”。
先确认接口名:
ip -br a | grep UP
再查支持与当前状态:
sudo ethtool| grep -i "wake-on|supports wake"
Supports Wake-on: pumbg→ 表示硬件支持 Magic Packet(g)等模式Wake-on: d→ 当前禁用;Wake-on: g→ 已启用 Magic Packet 唤醒- 若输出含
not supported或字段全为空,说明驱动/固件未暴露该能力,ethtool -s强制设wol g会失败
启用命令(仅临时生效):
sudo ethtool -swol g
为什么 systemd 服务启用后 wol g 仍不持久?
常见错误是服务没在正确时机运行:网卡可能尚未完成初始化,ethtool 就执行了,结果被内核忽略。不能只依赖 WantedBy=multi-user.target。
正确做法是让服务等待网卡就绪:
- 使用
After=network-pre.target和Wants=network-pre.target,确保在网卡驱动加载后、地址配置前执行 Type=oneshot+RemainAfterExit=yes防止 systemd 认为服务已退出而不再管理- 避免写死
ExecStart=/sbin/ethtool -s eth0 wol g,应改用udev规则或接口名通配(见下条)
推荐服务文件 /etc/systemd/system/wol@.service(带实例模板):
[Unit] Description=Enable Wake-on-LAN for %I After=network-pre.target Wants=network-pre.target [Service] Type=oneshot ExecStart=/sbin/ethtool -s %I wol g RemainAfterExit=yes [Install] WantedBy=multi-user.target
启用时指定接口:
sudo systemctl enable wol@enp3s0.service
systemd-sleep 脚本能否控制休眠时网卡行为?
不能直接“唤醒网卡”,但能干预休眠前后的状态。重点在于:Linux 休眠(suspend)时网卡默认断电,post 阶段恢复供电后,NetworkManager 会自动重连,但 WOL 配置不会自动重载。
如果你发现挂起后唤醒,ethtool 显示 Wake-on: d,说明内核重置了该标志。此时应在 post 阶段补回:
- 脚本路径必须是
/lib/systemd/system-sleep/下可执行文件(如/lib/systemd/system-sleep/wol-restore) - 脚本中需判断是否为
post且接口存在,再执行ethtool -swol g - 注意:不要在
pre阶段禁用 WOL,否则关机后无法被 Magic Packet 唤醒
简单可靠写法:
#!/bin/sh if [ "$2" = "suspend" ] && [ "$1" = "post" ]; then ip link show enp3s0 >/dev/null 2>&1 && /sbin/ethtool -s enp3s0 wol g fi
BIOS、驱动、内核参数三者缺一不可
WOL 在 Ubuntu 上失效,80% 情况不是配置问题,而是底层链路断裂。最容易被忽略的是:
- BIOS 中 WOL 设置名称不统一:可能是 “PME Event Wakeup”、“Resume by PCI/PCI-E Device”、“ErP Ready”(需关)、或 “Deep Sleep” 相关选项 —— 必须确认对应网卡插槽的 PCIe 设备被允许唤醒
- 某些 Realtek/Intel 网卡需加载特定驱动参数:例如
r8169驱动对部分 RTL8111 卡默认禁用 WOL,需加内核启动参数r8169.enable_wol=1,写入/etc/default/grub的GRUB_CMDLINE_LINUX后sudo update-grub && sudo reboot - USB-C/雷电扩展坞上的有线网卡通常不支持 S5 唤醒:即使
ethtool显示g,BIOS 也开了,Magic Packet 发出去也没响应 —— 这是硬件限制,非软件可解
真正稳定的 WOL,必须三者同时满足:BIOS 允许 PCIe 唤醒 + 内核驱动暴露 WOL 控制 + ethtool 成功写入 wol g。少一个,wakeonlan 命令就只是发了个没人收的包。

































