网络唤醒失效的问题分析
之前在家配置网络唤醒都是正常的,自从升级到20.04后网络唤醒就开始失效,分析一下后感觉跟具体的网络配置和bios配置应该没有太大关系,最大的问题是在于配置为S5(shutdown)状态下时网卡需要在关机后处于激活状态,而这里需要系统在启动后将对应的网卡状态设置为对应状态。
在ubuntu20.04上的具体配置
可以使用ethtool工具来查看状态,首先查看具体的网络接口信息
ip a
可以得到下面的内容
2: enp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether f4:b5:20:3b:03:1c brd ff:ff:ff:ff:ff:ff
inet 172.16.2.5/24 brd 172.16.2.255 scope global dynamic noprefixroute enp4s0
valid_lft 31926sec preferred_lft 31926sec
inet6 240e:36f:d3b:6f71::3ac/128 scope global dynamic noprefixroute
valid_lft 174510sec preferred_lft 88110sec
这里可以看到mac地址为f4:b5:20:3b:03:1c的网卡名为enp4s0,之后可以使用ethtool来查看Wake-On-LAN的状态
sudo ethtool enp4s0
这样就可以得到对应的状态
Supports Wake-on: pumbg
Wake-on: d
这里Wake-on: d表示disable, 对应的还有其他含义的参数
Option Description
p Wake on PHY activity
u Wake on unicast messages
m Wake on multicast messages
b Wake on broadcast messages
g Wake on MagicPacket messages
这时,我们就可以来更新WOL的状态
sudo ethtool --change enp4s0 wol g
之后检查接口的状态可以发现已经改为
Wake-on: g
之后就可以使用wakeonlan等工具来唤醒机器了
网络唤醒的持久化
正常使用时会发现每次开机后都要重新设置网卡的状态才能在下一次关机后再次使用网络唤醒,所以我们可以通过systemd添加一个系统服务在每次开机后修改网卡状态,具体做法如下:
先确定ethtool的绝对路径
which ethtool
这里我的工具路径是/sbin/ethtool, 之后可以创建一个 /etc/systemd/system/wol.service 文件,在这里写下启动执行一次的服务信息
[Unit]
Description=Enable Wake On Lan
[Service]
Type=oneshot
ExecStart = /sbin/ethtool --change enp4s0 wol g
[Install]
WantedBy=basic.target
这里需要注意的是我的机器的网卡名为enp4s0,ethtool的路径是/sbin/ethtool,对于你们的可能要相应调整
之后只需要enable该服务就可以
sudo systemctl daemon-reload
sudo systemctl enable wol.service
之后可以检查一下对应的状态
systemctl status wol