在BIOS中启用Wake-on-LAN并禁用ErP/EuP节能,用ethtool启用网卡wol g,通过systemd/udev持久化配置,再用etherwake发送魔术包——这四个环节协同运作,缺一不可。很多人只盯着某一层折腾,结果关机后怎么唤都唤不醒,最后发现是其他层面掉了链子。

要在麒麟操作系统中实现关机后通过局域网信号触发开机,必须让主板BIOS提供待机电压、网卡硬件支持Magic Packet监听、Linux内核授权低功耗状态下的网络中断响应,并绕过NetworkManager对网卡参数的覆盖。这四个环节缺一不可,任意一层失效都会导致唤醒失败。
第一步:在BIOS中启用Wake-on-LAN并禁用节能限制
主板必须在S5(完全关机)状态下仍向网卡提供+3.3V AUX电压,否则网卡无法监听魔术包。很多用户跳过此步直接配置系统,结果反复验证都失败——这是最常见的翻车原因。
1、关机后按下电源键,同时连续敲击Delete或F2键,进入BIOS设置界面。
2、切换至Advanced(高级)或Power Management(电源管理)选项卡。
3、查找并启用以下任一选项:Wake on LAN、PME Event Wake Up、Resume by LAN、Power On By Onboard LAN。
4、【必须操作】若存在ErP Ready、EuP 2013或Deep Sleep Control等选项,一律设为Disabled。启用这些节能模式会切断PCIe设备待机电压,WOL必然失效。
5、按F10保存并退出,系统重启后BIOS层配置即生效。
第二步:确认网卡支持并临时启用WOL
不是所有以太网卡都支持Magic Packet唤醒,尤其部分国产网卡或老旧Realtek芯片需驱动适配。先验证再操作,避免盲目配置。
打开终端,执行:
ip -br a | grep UP
记下处于UP状态的有线接口名,如enp3s0、ens160或eth0。
执行:
sudo ethtool 接口名
重点查看两行:
→ Supports Wake-on: 后是否含字母g(表示硬件支持Magic Packet);
→ Wake-on: 当前值是否为g(d=禁用,g=启用)。
若Wake-on: d,立即执行:
sudo ethtool -s 接口名 wol g
再次运行sudo ethtool 接口名,确认Wake-on: g已显示。这一步仅在当前会话有效,重启后将丢失。
第三步:让WOL配置开机自动生效(三选一)
NetworkManager会在每次网卡up时重置ethtool参数,导致WOL在重启或热插拔后失效。必须采用脱离NM管理链路的方式持久化。
方法一:systemd服务(推荐,兼容性好)
1、创建服务文件:
sudo vim /etc/systemd/system/wol@.service
2、写入以下内容(注意替换ens160为你的实际接口名):
[Unit]
Description=Enable Wake On Lan for %I
[Service]
Type=oneshot
ExecStart=/usr/sbin/ethtool -s %I wol g
[Install]
WantedBy=multi-user.target
3、启用服务:
sudo systemctl daemon-reload
sudo systemctl enable wol@ens160.service
sudo systemctl start wol@ens160.service
方法二:udev规则(轻量,适合单网卡)
执行:
echo 'SUBSYSTEM=="net", ACTION=="add", KERNEL=="ens160", RUN+="/sbin/ethtool -s %k wol g"' | sudo tee /etc/udev/rules.d/99-wol.rules
然后重新加载规则:
sudo udevadm control --reload-rules
方法三:绕过NetworkManager(适合NM深度集成环境)
编辑对应连接配置:
sudo vim /etc/NetworkManager/system-connections/有线连接 1
在[ethernet]段下添加:
wake-on-lan=1
在[connection]段下添加:
permissions=
第四步:发送魔术包测试唤醒效果
必须从另一台局域网内的已开机设备发送Magic Packet,目标机需处于完全关机(S5)或软关机状态,不能是休眠(S3)或挂起。
在发送端(非目标机)安装etherwake:
sudo apt install etherwake
获取目标机网卡MAC地址(关机前执行):
ip link show ens160 | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'
发送唤醒指令:
sudo etherwake -i 发送端网卡名 目标MAC地址
若目标主机电源指示灯闪烁、风扇短促转动或立即启动,说明WOL已通路。若无反应,请回溯BIOS供电、内核ACPI抢占、交换机EEE节能等深层问题。