Linux 上的 Wake-on-LAN(仅限本地网络)
本指南说明如何在硬件/固件层面已启用 Wake-on-LAN 后,在 Linux 上启用 Wake-on-LAN (WOL)。
Linux 上的 Wake-on-LAN 仅适用于有线 Ethernet 连接。 通过 Wi-Fi 无法可靠工作。
支持的系统
本指南适用于大多数现代 Linux 发行版,包括:
- Ubuntu
- Debian
- Fedora
- Arch Linux
- Linux Mint
- Raspberry Pi OS
仅适用于使用以下连接的系统:
- 有线 Ethernet
- 支持 Wake-on-LAN 的网卡
前提条件
在继续之前,请确保:
- 已在 BIOS / UEFI 中启用 Wake-on-LAN
- 电脑已通过 Ethernet 连接
- Linux 已检测到 Ethernet 接口
如果 BIOS / UEFI 尚未配置,请先完成此步骤:
→ 在 BIOS / UEFI 中启用 Wake-on-LAN
此阶段不需要 MAC 地址。
步骤 1:识别 Ethernet 接口
打开终端并运行:
ip link
查找活动的 Ethernet 接口。 常见名称包括:
eth0enp3s0enp0s25
忽略:
lo- Wi-Fi 接口(
wlan0、wlpXsY) - VPN 或虚拟接口
您将在后续步骤中使用此接口名称。
步骤 2:检查 Wake-on-LAN 支持
运行以下命令,将 INTERFACE 替换为您的 Ethernet 接口名称:
sudo ethtool INTERFACE
查找以下行:
Supports Wake-on: Wake-on:
示例:
Supports Wake-on: pumbg Wake-on: d
含义:
g= 魔术数据包唤醒(必须)d= 已禁用
如果 Supports Wake-on 下未列出 g,则网卡不支持 Wake-on-LAN。
步骤 3:启用 Wake-on-LAN
启用 Wake-on-LAN(魔术数据包):
sudo ethtool -s INTERFACE wol g
验证更改:
sudo ethtool INTERFACE
输出应显示:
Wake-on: g
这将在操作系统层面启用 Wake-on-LAN。
步骤 4:使设置持久化(重要)
在许多 Linux 系统上,Wake-on-LAN 设置在重启后会重置。
您必须使配置持久化。
选项 A:NetworkManager(大多数桌面系统)
创建或编辑调度脚本:
sudo nano /etc/NetworkManager/dispatcher.d/99-wol
添加以下内容:
#!/bin/sh
if [ "$2" = "up" ]; then /usr/sbin/ethtool -s INTERFACE wol g fi
将 INTERFACE 替换为您的 Ethernet 接口名称。
使脚本可执行:
sudo chmod +x /etc/NetworkManager/dispatcher.d/99-wol
选项 B:systemd 服务(通用方法)
创建 systemd 服务:
sudo nano /etc/systemd/system/wol.service
添加:
[Unit] Description=Enable Wake-on-LAN After=network.target
[Service] Type=oneshot ExecStart=/usr/sbin/ethtool -s INTERFACE wol g
[Install] WantedBy=multi-user.target
将 INTERFACE 替换为您的 Ethernet 接口名称。
启用服务:
sudo systemctl enable wol.service
步骤 5:电源状态注意事项
Linux 上的 Wake-on-LAN 在系统处于以下状态时可用:
- 关机 (S5)
- 睡眠 (S3)
- 休眠(如果支持)
要求:
- Ethernet 网线必须保持连接
- 系统必须保持通电
步骤 6:验证(可选)
关闭系统后:
- 检查 Ethernet 端口指示灯
- 它们应保持亮起或闪烁
这表明网络接口仍在供电并监听。
常见问题和解决方案
Wake-on-LAN 重启后重置
- 设置不是持久化的
- 使用 NetworkManager 调度脚本或 systemd 服务
从睡眠可以唤醒但从关机不行
- BIOS 可能不支持从 S5 状态 WOL
- 查找 WOL from S5 或 Shutdown Wake-On-LAN
- 在 BIOS/UEFI 中禁用深度睡眠选项
接口名称变化
- 现代 Linux 使用可预测的接口名称
- 使用
ip link验证接口名称 - 相应更新脚本