如何在Ubuntu 16.04中启用Wake On Lan(WOL)
如何在Ubuntu 16.04 LTS中启用Wake On Lan(WOL)?
在Ubuntu 16.04中,在/etc/default/tlp
设置WOL_DISABLE=N
,以避免TLP电源管理禁用WOL。
http://linrunner.de/en/tlp/docs/tlp-configuration.html
在/etc/default/halt
添加NETDOWN=no
以防止在关机期间关闭网卡电源
使用静态网络配置时,在/etc/network/interfaces
启用LAN唤醒。
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet static address 192.168.0.10 netmask 255.255.255.0 gateway 192.168.0.1 dns-nameservers 192.168.0.1 up ethtool -s eth0 wol g
在BIOS中启用局域网唤醒,进入BIOS设置并查找“唤醒PCI事件”,“网络唤醒”或类似内容。 更改它以使其启用。 保存设置并重新启动。
https://help.ubuntu.com/community/WakeOnLan
警告某些主板/网络控制器不支持冷启动的WOL(S5状态,系统的电源在物理上关闭然后重新打开)。 在这种情况下,必须执行至少一个电源循环(上电,关闭)。 为了解决这个问题,可以将BIOS配置为在恢复AC时启动,然后在Ubuntu内安排关机。 有关更多详细信息,请参阅主板手册。
我发现了一种更适合我的方式。 至少是一种更清洁的方式。 我发布这个是因为在谷歌搜索 Ubuntu 16 wol和其他类似的搜索时我偶然发现了这个post几次。 这可以帮助别人。
显然Ubuntu改变了systemd的 upstart ,这在Ubuntu 15,Ubuntu 16和大概下一个版本。 我是两个系统的新手,但这对我有用。
为了保持WOL正常工作,每次系统启动时我都必须重新启用它。 为避免手动执行此操作,我将systemd用于此目的。 这就是我做的:
-
首先,创建文件
/etc/systemd/system/wol@.service
(保留@符号) 。 把它放进去吧:[Unit] Description=Wake-on-LAN for %i Requires=network.target After=network.target [Service] ExecStart=/sbin/ethtool -s %i wol g Type=oneshot [Install] WantedBy=multi-user.target
-
在启动时为接口启用此选项,运行以下命令(使用您的接口更改eth3) :
systemctl enable wol@eth3
你应该看到这样的东西:
Created symlink from /etc/systemd/system/multi-user.target.wants/wol@eth3.service to /etc/systemd/system/wol@.service.
-
要检查它是否已启用,请运行以下命令(使用您的界面更改eth3)并返回
enabled
:systemctl is-enabled wol@eth3
-
要测试这一点,请重新启动并运行(使用您的界面更改eth3) :
ethtool eth3
您应该看到一行包含以下内容:
Wake-on: g
资料来源:
- SystemdForUpstartUsers – Ubuntu Wiki
- 局域网唤醒 – ArchWiki
- systemd – ArchWiki
-
暴发户:
Upstart是/ sbin / init守护程序的基于事件的替换,它在启动期间处理任务和服务的启动,在关闭期间停止它们并在系统运行时监督它们。
– upstart – 基于事件的init守护进程 -
ststemd:
systemd是Linux系统的一套基本构建块。 它提供了一个系统和服务管理器,它以PID 1运行并启动系统的其余部分。 (……)
– systemd
为了使WOL正常工作,请确保在断电时系统正确关闭以太网接口。
请尝试以下方法:
-
在/etc/rc6.d/目录上创建一个名为wol_poweroff.sh的bash脚本:
sudo nano /etc/rc6.d/wol_poweroff.sh
-
将此代码放入其中:
#!/bin/bash ifconfig eth0 down poweroff
-
将其复制到/etc/rc0.d目录(因此它也可以暂停 ):
sudo cp /etc/rc6.d/wol_poweroff.sh /etc/rc0.d/wol_poweroff.sh
-
使它们都可执行:
sudo chmod 755 /etc/rc6.d/wol_poweroff.sh sudo chmod 755 /etc/rc0.d/wol_poweroff.sh
现在通过sudo shutdown now
或sudo poweroff
以及使用WOL工具向其发送魔术数据包来测试它是否正常工作。
这是唯一对我有用的东西。 我在launchpad.net的bug报告中找到了这些步骤。
根据作者Robbie Williamson的说法,这是因为以下原因:
要使WOL工作,必须在系统关闭期间正确关闭以太网接口。 这应该作为运行级别rc0和rc6的一部分执行,注意Linux通常有7种不同的运行级别(或操作模式):
rc0.d – 系统暂停
rc1.d – 单用户模式
rc2.d – 具有网络function的单用户模式
rc3.d – 多用户模式 - 以文本模式启动
rc4.d – 尚未定义
rc5.d – 多用户模式 - 在X Windows中启动
rc6.d – 关机并重启
资料来源: https : //bugs.launchpad.net/ubuntu/+source/ifupdown/+bug/981461
在终端中运行以下命令:
sudo ethtool -s {your network interface} wol g sudo ethtool {your network interface}
在写完第二个命令后,你应该在lan上看到一个g
资源
除了@nkef建议的参数外,如果使用DHCP而不是LAN适配器的静态IP设置(此处命名为eth0),则可以在/ etc / network / interfaces中设置以下内容:
auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp ethernet-wol g
(在Ubuntu 16.04 LTS上测试)。
如果您使用NetworkManager,则可以通过nmcli
启用WOL:
nmcli connection show
记住感兴趣的设备的“802-3-ehternet”TYPE连接的名称。 说它的名字是“有线连接1”。 然后正确修改它:
nmcli connection modify "Wired connection 1" 802-3-ethernet.wake-on-lan magic
获取其MAC地址:
nmcli connection show "Wired connection 1" | grep 802-3-ethernet.mac-address
从现在开始,您可以通过wakeonlan 1a:2b:3c:4d:5e:6f
命令关闭它并从同一LAN上的另一台机器打开它,其中1a:2b:3c:4d:5e:6f
是该地址的MAC地址上一步的LAN卡。