商城首页欢迎来到中国正版软件门户

您的位置:首页 >Ubuntu如何配置具体的系统网络接口在低功耗模式下的唤醒策略

Ubuntu如何配置具体的系统网络接口在低功耗模式下的唤醒策略

  发布于2026-08-11 阅读(0)

扫一扫,手机访问

可以先执行sudo ethtool | grep -i "wake-on"确认当前状态:Wake-on: d表示已禁用,g表示已启用;随后再用sudo ethtool -s wol g进行临时开启。需要注意的是,这种方式重启后通常不会保留,若想长期生效,还得配合systemd服务或udev规则来做持久化。

Ubuntu如何配置具体的系统网络接口在低功耗模式下的唤醒策略

如何用 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 -s  wol g

为什么 systemd 服务启用后 wol g 仍不持久?

常见错误是服务没在正确时机运行:网卡可能尚未完成初始化,ethtool 就执行了,结果被内核忽略。不能只依赖 WantedBy=multi-user.target

正确做法是让服务等待网卡就绪:

  • 使用 After=network-pre.targetWants=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 -s wol 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/grubGRUB_CMDLINE_LINUXsudo update-grub && sudo reboot
  • USB-C/雷电扩展坞上的有线网卡通常不支持 S5 唤醒:即使 ethtool 显示 g,BIOS 也开了,Magic Packet 发出去也没响应 —— 这是硬件限制,非软件可解

真正稳定的 WOL,必须三者同时满足:BIOS 允许 PCIe 唤醒 + 内核驱动暴露 WOL 控制 + ethtool 成功写入 wol g。少一个,wakeonlan 命令就只是发了个没人收的包。

本文转载于:https://www.php.cn/faq/2972528.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注