Linux 上的 Wake-on-LAN(仅限本地网络)

本指南说明如何在硬件/固件层面已启用 Wake-on-LAN 后,在 Linux 上启用 Wake-on-LAN (WOL)

Linux 上的 Wake-on-LAN 仅适用于有线 Ethernet 连接。 通过 Wi-Fi 无法可靠工作。


支持的系统

本指南适用于大多数现代 Linux 发行版,包括:

仅适用于使用以下连接的系统:


前提条件

在继续之前,请确保:

如果 BIOS / UEFI 尚未配置,请先完成此步骤:

在 BIOS / UEFI 中启用 Wake-on-LAN

此阶段不需要 MAC 地址。


步骤 1:识别 Ethernet 接口

打开终端并运行:

ip link

查找活动的 Ethernet 接口。 常见名称包括:

忽略:

您将在后续步骤中使用此接口名称。


步骤 2:检查 Wake-on-LAN 支持

运行以下命令,将 INTERFACE 替换为您的 Ethernet 接口名称:

sudo ethtool INTERFACE

查找以下行:

Supports Wake-on: Wake-on:

示例:

Supports Wake-on: pumbg Wake-on: 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 在系统处于以下状态时可用:

要求:


步骤 6:验证(可选)

关闭系统后:

这表明网络接口仍在供电并监听。


常见问题和解决方案

Wake-on-LAN 重启后重置


从睡眠可以唤醒但从关机不行


接口名称变化