64 位网络唤醒功能无法使用,32 位网络唤醒功能可用

64 位网络唤醒功能无法使用,32 位网络唤醒功能可用

如何让 WOL 在 64 位 Ubuntu 上运行?

这是一个奇怪的情况。硬件是经过大量修改的 ASUS G75VW 3D。Windows 和 32 位 Ubuntu 可以很好地实现局域网唤醒。主板在这里的作用很小,只有一些省电设置,我在 BIOS 中禁用了这些设置以允许 WOL。然后,必须配置 NIC。在 Windows 上,这是一个一次性设置,效果很好。在 Ubuntu 32 位上,我使用了触发器,rc.local效果ethtool很好。

在 32 位 Ubuntu 上,网卡显示如eth0预期。在 64 位上,它被重命名为enp4s0。我知道它被重命名了,因为我检查过dmesg,这也解释了为什么我的 rc.local 脚本不会将中的更改wol为:dgethtool

[    1.624275] atl1c 0000:04:00.0 enp4s0: renamed from eth0
[    3.821446] IPv6: ADDRCONF(NETDEV_UP): enp4s0: link is not ready
[    3.822431] atl1c 0000:04:00.0: atl1c: enp4s0 NIC Link is Up<1000 Mbps Full Duplex>

好吧,随便吧。我可以处理链接未准备好的情况,将其放在计时器或类似的东西上以备后用。但如果我手动设置,ethtool 会显示该卡处于 wol g 状态

Supports Wake-on: pg
Wake-on: g

由于某种原因,当我关闭计算机时它会被重置,因为即使在此之后,wol 魔包也无法唤醒计算机。

测试

我测试了很多东西。首先,如果笔记本电脑被拔掉电源,即使是短暂拔掉,wol 触发器也不会起作用。如果以太网电缆被拔掉并重新插入,它就会起作用。wol 触发器显然是在操作系统关闭时设置的,因为如果我关闭 32 位 ubuntu 并在不拔掉电源的情况下更换硬盘,我可以通过 WOL 进入 64 位 ubuntu。

我怀疑这与驱动程序有关,但如果是这样的话,我不知道从哪里获得它们。再说一次,我可以在 64 位上运行 32 位驱动程序并完成它吗?我在机器上安装了 32 位库用于其他目的。

我无法通过运行 32 位 ubuntu 来解决这个问题,因为我在需要大量 RAM 的机器上运行的 JVM(超出 32 位限制)。

根据ubuntu 帮助文档我删除了network-manager该连接,并尝试使用ifup(从这里/etc/network/interfaces)。不幸的是,ifup 无法识别该接口。以下是我的64 位文件内容。

# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback

我不知道为什么我的无线和以太网卡没有列在那里。这里是ifconfig -a

enp4s0    Link encap:Ethernet  HWaddr 10:bf:48:19:08:b4
          inet addr:192.168.1.91  Bcast:192.168.1.255  Mask:255.255.255.0
          inet6 addr: fe80::12bf:48ff:fe19:8b4/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:505 errors:0 dropped:0 overruns:0 frame:0
          TX packets:289 errors:0 dropped:0 overruns:0 carrier:1
          collisions:0 txqueuelen:1000
          RX bytes:48646 (48.6 KB)  TX bytes:38816 (38.8 KB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:57 errors:0 dropped:0 overruns:0 frame:0
          TX packets:57 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:8091 (8.0 KB)  TX bytes:8091 (8.0 KB)

wlp3s0    Link encap:Ethernet  HWaddr c4:85:08:70:7d:7b
          BROADCAST MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

因此论坛帖子enp4s0手动将其添加到网络接口文件中。现在它看起来像:

# interfaces(5) file used by ifup(8) and ifdown(8)
auto lo
iface lo inet loopback

auto enp4s0
iface enp4s0 inet dhcp

然后 ifup 就起作用了。我不知道我是否做对了,但我所做的就是输入:

ifup enp4s0

一切仍然正常,重启后我仍可以通过 SSH 连接,所以我想我的以太网卡还没有坏。我真的不知道我在这里做什么,伙计们,我简直是无计可施。

我进一步阅读了帮助页面,意识到我忽略了错误链接

按照解决方法,我向rc6.d和添加了一个脚本rc0.d,并将它们设置为可执行文件,但我不确定如何检查它们是否实际执行(我想我可以echo做点什么并检查dmesg……这样行得通吗?)。我重新启动了机器一次,并将其关闭,但仍然没有出现 WOL 尝试。

追随我发现的兔子洞对博客文章的评论这表明更具体的静态 IP 地址会有所帮助。我不明白为什么(因为魔术包会使用 mac 地址发送到整个网络),但我还是尝试了。如果我的网络接口配置与他的类似,则没有任何变化。

有关机器的更多详细信息。32 位和 64 位均是最新版本Ubuntu 15.10 Wily Werewolf


更新

我还有更多的研究。

我可以确认 WoL 可以在全新安装的 Wily Werewolf 64 位上运行。之后,我运行了:

sudo apt-get update
sudo apt-get upgrade

然后 WoL 就停止工作了。这似乎是重现我的问题所需的唯一步骤。


再次重申一下,我的问题如下:

如何使局域网唤醒功能在 64 位 Ubuntu 中运行?

答案1

我想我终于找到了这个问题的答案。在 15.10 版本中,TLP 实用程序已作为默认实用程序引入。因此,在 dist 升级时,您会在 TLP 中获得一个默认配置,即 WOL_DISABLE=Y

甚至https://wiki.archlinux.org/index.php/Wake-on-LAN表示如果计算机在使用 TLP 时在挂起/休眠后无法唤醒,请在 /etc/default/tlp 中将 WOL_DISABLE 值设置为 N。

我已经在 Ubuntu-MATE 16.04 LTS(64 位)上测试过,安装后 WOL 不起作用。更改 TLP 的配置可使其再次工作。

我希望这也能帮助解决你的问题。

答案2

在尝试了以太网卡的选项后,我发现高级选项卡中有一项名为“关机唤醒”的设置,但对我来说它被禁用了。我启用了它,现在它正常工作了!希望这能帮助其他遇到同样问题的人。

相关内容