在 Linux 下可以通过 etherwake 命令来网络唤醒设备。
sudo apt install etherwake
检查主机是否支持网络远程唤醒
首先检查 BIOS 中设置,Wake on LAN 是否开启。一般在 BIOS > Power Management > “Wake On LAN” 这个选项下。然后重启进入系统,用如下命令查看网卡 eth0 是否开启了 Wake on LAN:
ethtool eth0
输出:
Settings for eth0:
Supported ports: [ TP ]
Supported link modes: 10baseT/Half 10baseT/Full
100baseT/Half 100baseT/Full
1000baseT/Full
Supported pause frame use: Symmetric
Supports auto-negotiation: Yes
Supported FEC modes: Not reported
Advertised link modes: 1000baseT/Full
Advertised pause frame use: Symmetric
Advertised auto-negotiation: Yes
Advertised FEC modes: Not reported
Speed: 1000Mb/s
Duplex: Full
Port: Twisted Pair
PHYAD: 1
Transceiver: internal
Auto-negotiation: on
MDI-X: off (auto)
Supports Wake-on: pumbg
Wake-on: g
Current message level: 0x00000007 (7)
drv probe link
Link detected: yes
结果中可以一眼就看到:
Supports Wake-on: pumbg
Wake-on: g
如果没有看到这个字样,或者是 off 状态,需要手动启动一下:
ethtool -s eth0 wol g
说明:
-s NIC, 我这里的 eth0 是网络接口的设备名,根据不同的设备填写不同,可以通过 ifconfig 来查看
wol g 表示设置 Wake-on-LAN 选项使用 MagicPacket.
使用命令远程唤醒
在 Linux 下执行如下命令唤醒设备:
sudo apt install wakeonlan
wakeonlan MAC_ADDRESS
或者
etherwake MAC_ADDRESS
可以通过 ping 命令和 arp 命令来获取局域网中的设备 MAC 地址:
ping -c 4 SERVER_IP && arp -n
reference