必须打通BIOS固件层、Linux内核驱动层与系统服务层三道关卡,任一缺失均导致WOL失效;需在BIOS启用Wake-on-LAN并禁用ErP/EuP等节能选项,再通过udev或systemd持久化ethtool配置,并将网卡设为NetworkManager非托管状态,最后用etherwake发送魔术包测试。

要在麒麟操作系统中让关机状态下的电脑响应局域网内发出的魔术包并自动开机,必须打通BIOS固件层、Linux内核驱动层与系统服务层三道关卡。单独任一环节缺失都会导致WOL完全失效,且故障现象常表现为“发包无反应”或“唤醒后立即断电”。
BIOS/UEFI中启用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三项节能选项——若保留启用,主板将切断网卡待机电压,WOL彻底失效。
5、按F10保存设置并退出,系统重启后BIOS层配置即固化生效。
麒麟系统内启用并持久化网卡WOL能力
BIOS启用后,Linux内核仍需向网卡下发Magic Packet监听指令。NetworkManager会在每次网络重连时覆盖ethtool设置,因此必须采用不依赖NM的持久化方案。
方法一:使用udev规则(轻量、兼容性强)
1、打开终端,执行ip -br a | grep UP,识别有线网卡名称(如enp3s0、ens160)。
2、运行sudo ethtool <em>网卡名</em>,确认输出中Supports Wake-on: g存在,且Wake-on: d表示当前禁用。
3、执行sudo ethtool -s <em>网卡名</em> wol g临时启用,再运行一次ethtool验证是否变为Wake-on: g。
4、创建udev规则文件:sudo tee /etc/udev/rules.d/99-wol.rules,输入内容:
ACTION=="add", SUBSYSTEM=="net", KERNEL=="网卡名", RUN+="/sbin/ethtool -s %k wol g"
5、重新加载udev规则:sudo udevadm control --reload-rules && sudo udevadm trigger --subsystem-match=net。
方法二:配置systemd服务(更可靠,推荐用于生产环境)
① 创建服务文件:sudo nano /etc/systemd/system/wol@.service,写入:
[Unit]
Description=Enable Wake-on-LAN for %i
After=network.target
[Service]
Type=oneshot
ExecStart=/sbin/ethtool -s %i wol g
[Install]
WantedBy=multi-user.target
② 启用服务:sudo systemctl enable wol@<em>网卡名</em>.service。
③ 立即启动:sudo systemctl start wol@<em>网卡名</em>.service。
绕过NetworkManager对WOL配置的覆盖
NetworkManager默认会在接口up时重置ethtool参数。若已启用NM管理该网卡,必须将其设为unmanaged,否则udev或systemd配置会被覆盖。
1、编辑对应连接配置文件:sudo nano /etc/NetworkManager/system-connections/<em>连接名</em>(如“有线连接 1”)。
2、在[connection]段落下添加一行:
unmanaged=true
3、保存后执行:sudo systemctl restart NetworkManager。
4、验证是否生效:nmcli dev status中对应接口状态应显示为unmanaged而非connected。
发送魔术包测试唤醒功能
仅当上述三层全部配置正确后,才能使用etherwake工具从局域网内另一台设备发起唤醒。
1、在另一台Linux机器上安装etherwake:sudo apt install etherwake(麒麟OS可直接使用apt)。
2、获取目标主机网卡MAC地址:ip link show <em>网卡名</em> | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'。
3、在同一局域网内执行唤醒命令:sudo etherwake -i <em>本机网卡名</em> <em>目标MAC地址</em>(例如sudo etherwake -i enp0s3 aa:bb:cc:dd:ee:ff)。
4、目标主机应在3秒内启动——若无反应,请回溯检查BIOS供电、udev/systemd服务是否激活、NM是否仍接管接口。

















