如何在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用于此目的。 这就是我做的:

  1. 首先,创建文件/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 
  2. 在启动时为接口启用此选项,运行以下命令(使用您的接口更改eth3)

     systemctl enable wol@eth3 

    你应该看到这样的东西:

     Created symlink from /etc/systemd/system/multi-user.target.wants/wol@eth3.service to /etc/systemd/system/wol@.service. 
  3. 要检查它是否已启用,请运行以下命令(使用您的界面更改eth3)并返回enabled

     systemctl is-enabled wol@eth3 
  4. 要测试这一点,请重新启动并运行(使用您的界面更改eth3)

     ethtool eth3 

    您应该看到一行包含以下内容:

     Wake-on: g 

资料来源:

  • SystemdForUpstartUsers – Ubuntu Wiki
  • 局域网唤醒 – ArchWiki
  • systemd – ArchWiki
  • 暴发户:

    Upstart是/ sbin / init守护程序的基于事件的替换,它在启动期间处理任务和服务的启动,在关闭期间停止它们并在系统运行时监督它们。
    – upstart – 基于事件的init守护进程

  • ststemd:

    systemd是Linux系统的一套基本构建块。 它提供了一个系统和服务管理器,它以PID 1运行并启动系统的其余部分。 (……)
    – systemd

为了使WOL正常工作,请确保在断电时系统正确关闭以太网接口。

请尝试以下方法:

  1. /etc/rc6.d/目录上创建一个名为wol_poweroff.sh的bash脚本:

     sudo nano /etc/rc6.d/wol_poweroff.sh 
  2. 将此代码放入其中:

     #!/bin/bash ifconfig eth0 down poweroff 
  3. 将其复制到/etc/rc0.d目录(因此它也可以暂停 ):

     sudo cp /etc/rc6.d/wol_poweroff.sh /etc/rc0.d/wol_poweroff.sh 
  4. 使它们都可执行:

     sudo chmod 755 /etc/rc6.d/wol_poweroff.sh sudo chmod 755 /etc/rc0.d/wol_poweroff.sh 

现在通过sudo shutdown nowsudo 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卡。