局域网唤醒成功了 3 次,然后就不行了

局域网唤醒成功了 3 次,然后就不行了

更新:我目前的主要理论是(详情见下文):

  • Ubuntu系统在待机模式下关闭网卡电源?
  • Realtek RTL8111 驱动程序不适用于 64 位机器?

有人可以证实或否认吗?


几天前,我安装了 Ubuntu 12.04,并通过桌面菜单将 Ubuntu 机器置于待机状态,然后从另一台 PC 发送 Magic Packets 使网络唤醒功能正常工作。我这样做了 3 次,效果很好。然后突然就不起作用了!这怎么可能呢?!

我知道 WOL 无法工作时可能有 1000 种原因,但连续 3 次成功的事实排除了大多数原因。它成功了 3 次(间隔几分钟),之后就再也没有工作过。在 3 次成功和随后 10 次失败的尝试中,我唯一摆弄的就是发送魔术包的 PC 上的防火墙,我很快就关闭了防火墙以消除这个潜在问题,还用 wireshark 验证了数据包是否通过(当然,当时 Ubuntu 机器处于打开状态)。我在测试开始前几个小时对 Ubuntu 进行了全面更新。

大多数时候,我感觉自己只是在盲目地测试各种东西。例如,有没有什么方法可以检查网卡的电源是否关闭?“cat /proc/acpi/wakeup”被“禁用”是否意味着出了问题?

我知道有很多关于 WOL 的讨论,但没有一个讨论能完美运行 10 分钟然后无缘无故停止工作。一些讨论提到了安装 12.04 后 WOL 出现的问题。我现在唯一的想法就是安装 Ubuntu 10。但那只是一个测试,而不是永久解决方案,而且是一个非常耗时的测试。而且我确信 RTL8111/RTL8168 在较旧的 Ubuntu 上得不到正确支持(较旧的 Ubuntu 上的这些 NIC 存在重大问题),这使得此类测试更加复杂。


您只需阅读上面的文字即可了解我的问题。但为了获得深入信息,以下是我所做的一些事实和测试:

  • 我尝试将“pci=noacpi”、“pci=noapic”、“acpi=force”和“apm=on apm=power-off”添加到 /etc/default/grub(并且我在 grab.cfg 中验证了更改)。当然,一次添加一个(每次添加后重新启动)。
  • 我看到 NIC 在 cat /proc/acpi/wakeup 中被禁用,使用命令“echo -n LAN | sudo tee /proc/acpi/wakeup”启用它,现在 LAN 在列表中已启用
  • 防火墙已禁用
  • ethtool 显示 wol 处于状态“g”(我尝试将其设置为“pumbag”,然后设置为“d”然后“g”)。
  • 这是带有 Realtek RTL1111/R8168B 的华硕主板(驱动程序 R8169 随内核一起提供,并且该驱动程序使用了 3 次;最近我改用驱动程序 R8168,这并不容易,但我看不出任何区别,而且人们似乎报告说现在都应该使用 R8169)。
  • 我还尝试在 Ubuntu 机器上使用 wireshark 来验证魔法包是否已到达 PC
  • 尝试重置 CMOS RAM(通过跳线并取出电池 5 分钟)。
  • NIC LED 在睡眠状态下不亮,但我的另一台 PC 在睡眠状态下也不亮,并且 WOL 对该 PC 有效。
  • 我尝试在 BIOS 中启用“按下 PS/2 空格键时唤醒”,启动 Ubuntu,从菜单中选择“待机”,使其进入待机状态,按下空格键,然后启动。在终端命令 pm-suspend 和 halt -p 之后也可以工作(但会完全关闭并重新启动),但在命令 halt 之后无法唤醒。Halt 使操作系统关闭,但硬件保持开启状态。在所有情况下仍然忽略 WOL。
  • 待机时,电源 LED 闪烁,风扇和硬盘静音,并且在尝试 WOL 后,情况仍然如此
  • 用于发送魔术包的程序是:在不同的(Windows)PC 上 magicpacket(dot)free(dot)fr
  • Magic Packet 发送方的设置是 UDP 端口 80 子网掩码 255.255.255.255,这是它工作的设置,但我也尝试了端口 9、7 和 0、TCp 和掩码 0.0.0.0。已经仔细检查了 MAC 地址,但我通过复制粘贴输入了它,正如我提到的那样,它已经使用这些设置工作了 3 次。
  • 我只使用了 Ubuntu 一周(很久以前有过使用 Linux 和 Unix 系统的短暂经验)
  • 我没有将“ethtool -s eth0 wol g”(或“echo -n LAN | sudo tee /proc/acpi/wakeup”)添加到启动脚本,因为我相信如果这些设置正确,WOL 应该可以工作一次(每次重启后都需要脚本使其工作)主板华硕 AT5NM10T-I 没有 BIOS 更新(是 v0306)尝试了这些页面上的大多数方法:wiki.ubuntuusers.de/Wake_on_LAN -- en.gentoo-wiki.com/wiki/ACPI/Fix_common_problems#Nothing_Works -- wiki.xbmc.org/index.php?title=HOW-TO:Enable_Wake-On-Device_for_Ubuntu

更新:

  • 是的,我在 BIOS 中启用了“通过 PME 开机”(PCI 电源管理事件)。我还启用了“通过 Ring 开机”,因为有人在论坛中建议这样做,但我认为它不会影响 WOL,但也不会造成影响。由于它工作了 3 次,所以这不是 BIOS 设置问题。
  • 我实际上尝试重新安装 Ubuntu 12.04,它再次运行了 3 次,之后就死机了。(实际上这次它运行了 1 次,然后不工作了,然后连续运行了 2 次,然后就再也没有运行过。)--- 关于这个新测试的一些细节可能没有什么意义:它直到我正确启用 Samba 以在工作组中的 PC 之间进行文件共享后才开始工作。它运行了 3 次,我不必发送 sudo ethtool -s eth0 wol g(sudo ethtool eth0 总是报告它处于 wol 模式“g”,因此显然我的 NIC 以该模式启动)。现在 sudo cat /proc/acpi/wakeup 总是显示 LAN 为“已启用”。这次我使用了下载的 12.04,没有更新(Ubuntu 的桌面显示没有更新),后来(在它停止工作很久之后)它显示有 136 个更新,我安装了它们并重新启动,仍然没有工作。
  • 显然,这个网卡多年来一直困扰着 Linux 用户,但我认为它最近使用内核自带的驱动程序后,工作正常。我认为它是最常见的网卡之一。

更新:

  • 我使用 Ubuntu 11.10 进行了测试。它有同样的问题,或者它的某个版本:WOL 似乎在 4 次中有 1 次能正常工作。不会突然停止工作,只是不是每次都能正常工作(远非如此)。
  • 使用 Windows 7 进行测试。安装了 Realtek 驱动程序。在 NIC 设置(硬件管理器)中勾选“仅允许魔术包唤醒”,它工作正常,连续测试了 5 次。注意:一开始我没有安装视频和音频驱动程序,然后只有休眠功能有效,但它确实完美地响应了 WOL 调用。安装了视频和音频驱动程序以及“PC Probe II”,这似乎与 ACPI 驱动程序有关。我在维基百科上读到 ACPI 时,如果系统中的一个设备不支持 acpi,Windows 可能不允许待机 (S3),所以我这样做了。
  • 当 Windows 处于睡眠模式(或休眠)时,我仍然可以在路由器的连接设备列表中看到此设备(但 NIC 上的 LED 熄灭)。(正如我之前所说,对于另一台 PC,即使 WOL 有效,也不会在此列表中看到它,因此显然情况并非总是如此)。但是,对于这台 PC,它可能表明 NIC 没有电源,即这里的问题是 Ubuntu 关闭了 NIC 的电源。
  • 我忘了说我的机器都是 64 位的。32 位驱动程序可以工作而 64 位驱动程序不能工作的情况并不罕见。因此,我怀疑 64 位 Realtek 驱动程序在 Linux 上仍然无法与 RTL8111 等一起正常工作 - 我知道这些 NIC 多年来一直存在问题,我读到最近才得到解决,但有人能确认他们的 RTL8111/RTL8168&RTL8168B 等可以在 64 位机器上使用 WOL 吗?

所以我目前的主要理论是:

  • Ubuntu系统在待机模式下关闭网卡电源?
  • 64 位机器的 Realtek 驱动程序不起作用?

答案1

我遇到了同样的问题。但我的机器上安装了旧的 Suse 和 Windows。当我从该操作系统关闭时,WakeOnLan 工作正常。但我想使用 Ubuntu 1204LTS 64 位。从 Ubuntu 关闭后,计算机不会通过 WOL 唤醒。我用 ethtool 测试了设置。但一切都已调整。

解决方案:从 realtek 下载最新的驱动程序并安装。这对我来说很有效。

www.realtek.com/downloads/ 下载此驱动程序:

LINUX driver for kernel 2.6.x and 2.4.x (Support x86 and x64) 8.030.00 2012/5/14

然后在终端中输入这些:

cd ~/Downloads
tar -xvjf r8168-8.030.00.tar.bz2
cd r8168-8.030.00/
sudo ./autorun.sh

就这样。

罗尔夫

相关内容