1. 确认BIOS设置,允许电池供电下唤醒

  • 操作路径:重启电脑,按 F1​ 键进入BIOS → 找到 Config​ → Network​。

  • ​关键设置​:在 Wake On LAN​ 选项中,请务必选择 AC and Battery​ 。

    • ​AC Only​:只插电源适配器时才能唤醒。

    • ​AC and Battery​:(推荐) 无论是否插电,都可以唤醒。这能确保你合盖带着电脑移动(使用电池)时,仍可被远程唤醒。

    • 搜索并禁用 ErP​:在 BIOS 各菜单中查找 ErP​、ErP Lot 6​ 或 ErP Ready​ 选项,确保其为 Disabled​。如果开启,它会在关机后切断网卡等设备的待机电源,WoL 将彻底失效。

2. 确认并配置网卡驱动 (替代 BIOS 电池选项)

如果 BIOS 里没有“AC and Battery”选项,需要在 Debian 中强制网卡保持唤醒状态,即使使用电池供电。

  • 安装 ethtool:
    打开终端,输入以下命令安装管理网卡的工具:

    sudo apt update
    sudo apt install ethtool
    
  • 确认网卡名称并检查状态:
    输入命令查看网卡是否支持并已开启唤醒:

    ethtool 你的网卡名 | grep Wake-on
    
    • ​找到网卡名​:如果不确定名称,可以用 ip a​ 查看,通常有线网卡名为 eth0​、enp0s31f6​ 或 enx​ 开头。

    • ​预期结果​:如果看到 Supports Wake-on: pumbg​ 和 Wake-on: g​,说明支持且已开启。

    • ​如果显示 Wake-on: d​:说明被禁用了,需要手动开启。

  • 手动开启 Wake-on-LAN:

    sudo ethtool -s 你的网卡名 wol g
    

3. 设置开机自动启动

  1. 编辑当前用户的 crontab(使用 root 权限):

    sudo crontab -e
    
  2. ​在文件末尾添加以下行​:

    @reboot sleep 15 && /usr/sbin/ethtool -s enp0s25 wol g
    
    • ​sleep 15​:等待 15 秒,确保网络管理器完全启动后再设置。

    • 可以根据需要调整等待时间(10-30 秒均可)。

  3. ​保存并退出​。

  4. 重启测试:

    sudo reboot
    
  5. 重启后检查:

    sudo ethtool enp0s25 | grep Wake-on
    

    应该显示 Wake-on: g​。

  6. 验证 crontab 是否生效

    sudo crontab -l
    

4. 创建 systemd 关机钩子

在系统关机前,强制网卡保持唤醒状态,避免被驱动程序关闭。

  1. 创建一个 systemd 服务文件:

    sudo nano /etc/systemd/system/wol-shutdown.service
    
  2. 粘贴以下内容,将 enp0s25​ 换成你实际的网卡名:

    [Unit]
    Description=Enable Wake-on-LAN before shutdown
    DefaultDependencies=false
    Before=shutdown.target reboot.target halt.target
    
    [Service]
    Type=oneshot
    RemainAfterExit=true
    ExecStart=/bin/true
    ExecStop=/usr/sbin/ethtool -s enp0s25 wol g
    
    [Install]
    WantedBy=multi-user.target
    
  3. 启用这个新服务:

    sudo systemctl enable wol-shutdown.service
    

​工作原理​:ExecStart​ 在开机时什么也不做;ExecStop​ 则在每次关机时执行,强制将 WoL 设置为 g​,使网卡在断电瞬间也处于待命状态。