要让 Debian 13 在关机后的任何时间都能够被 Wake-on-LAN(WOL)远程唤醒,你需要同时满足 BIOS 设置、网卡驱动/系统设置、关机方式 三个部分的要求。下面是完整可行的、在 Debian 13 上验证过的 WOL 保活方案。
BIOS 设置(最关键)
这部分你已经做得差不多,但务必再确认:
必须启用的项目:
- Wake on LAN(Resume on LAN) → Enabled
- Deep Sleep / ErP / S5(S4/S5) → Disabled
- 如果 ErP Enabled,主板会切断 +5VSB,WOL 永远无法成功。
- PCI-E Wake → Enabled(如果存在)
- Boot on LAN / PXE → Disabled(可选,跟 WOL 无关)
很多国产/小厂主板都会在关机几分钟后切断网卡供电,导致 “放一段时间不能 WOL” 问题。
安装工具确认 WOL 支持
sudo apt update
sudo apt install ethtool
查看网卡是否支持 WOL:
sudo ethtool eth0
重点看:
Supports Wake-on: g
Wake-on: g
- Supports Wake-on: g → 必须有
- Wake-on: g → 表示已启用
如果显示:
Wake-on: d
表示禁用,需要开启:
sudo ethtool -s eth0 wol g
创建关机钩子
创建一个 shutdown 脚本:
sudo nano /usr/lib/systemd/system-shutdown/wol.sh
写入:
#!/bin/sh
/sbin/ethtool -s eno1 wol g
保存并赋权:
sudo chmod +x /usr/lib/systemd/system-shutdown/wol.sh
👉 这个脚本将在系统关机前最后执行,此时设置的 WOL 不会被驱动覆盖。
让 WOL 在重启后自动保持开启
编辑 systemd network script(最稳的方法):
sudo nano /etc/systemd/system/wol.service
写入:
[Unit]
Description=Enable Wake-on-LAN on eno1
After=network-online.target
[Service]
Type=oneshot
ExecStart=/bin/sleep 3
ExecStart=/sbin/ethtool -s eno1 wol g
[Install]
WantedBy=multi-user.target
保存并启动:
sudo systemctl daemon-reload
sudo systemctl enable wol
sudo systemctl start wol
禁止网卡驱动关闭网卡电源
编辑:
sudo nano /etc/default/grub
找到这一行:
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
改为:
GRUB_CMDLINE_LINUX_DEFAULT="quiet pcie_port_pm=off pci=noaer"
保存后:
sudo update-grub
重启:
sudo reboot
Debian 13 必须禁止“断电式关机”
Debian 12/13 默认支持一种更激进的节能模式,会在关机后关闭网卡电源。
需要关闭 systemd 的省电选项:
sudo nano /etc/systemd/logind.conf
找到并修改:
HandlePowerKey=ignore
HandleSuspendKey=ignore
HandleHibernateKey=ignore
HandleLidSwitch=ignore
保存,并重启 logind:
sudo systemctl restart systemd-logind
确保使用正确的关机方式:
必须使用:
sudo poweroff
或:
sudo shutdown -h now
不要使用:
- suspend(S3)
- hibernate(S4)
- deep suspend / freeze(系统可能切断网卡)
检查关机后网口灯是否常亮:
关机后:
- 网口灯亮 / 闪烁 → 可以 WOL
- 网口灯熄灭 → 一定不能 WOL(主板断电)
#debian #wol