Windows 子系统中的 Linux 唤醒

Windows 子系统中的 Linux 唤醒

如何从 WSL 唤醒我的 Linux 机器?

当使用平台专用软件时,我的 Windows 机器可以使用 WOL 唤醒我的 Linux 机器,没有任何问题,但是当我尝试使用机器的静态 IP 从 WSL2(Ubuntu 22.04)执行此操作时:

sudo etherwake -i 192.168.0.99 BB:BB:BB:BB:BB:BB

或者使用我的网络广播 IP(我在 Windows 软件中指定):

sudo etherwake -i 192.168.0.255 BB:BB:BB:BB:BB:BB

或者来自 的任何 IP ip route get,坦白说我不明白它们的作用:

$ ip route get 192.168.0.99
192.168.0.99 via 192.168.144.1 dev eth0 src 192.168.151.115 uid 1000
    cache

我收到以下错误:

The target station address is bb:bb:bb:bb:bb:bb.
SIOCGIFHWADDR on 192.168.0.xx failed: No such device

指定默认端口似乎-p 9没有任何效果。

我很难诊断这是我的 Linux 技能差、网络知识差还是我面临的 WSL 相关问题。

答案1

使用平台专用软件时,我的 Windows 机器使用 WOL 唤醒 Linux 机器没有任何问题

这可能提供在 WSL2 内部执行此操作的解决方法。

作为@AB评论中提到(尽管使用不同的术语),WoL 在第 2 层工作(见这个答案)。WSL2 与您的其他设备位于不同的第 2 层网络(在 Hyper-V 内部运行)上,因此 WoL 魔术广播包无法从 WSL2 跨越到您的物理设备。

但通过 WSL Interop,我们至少可以称呼WSL2 中的 Windows 进程,因此假设你上面提到的 Windows 软件有一个命令行界面,你应该能够使用直接从 WSL2 运行。由于 Windows 可执行文件在 Windows 网络上运行,因此即使从 WSL2 内部调用,它仍应正常工作。

另一个可能的解决方案是,由于你运行的是 Windows 11(假设它是 Pro 或更高版本),因此从 Microsoft Store(或从 WSL发布页面)。那里有一个新功能,允许您在 Hyper-V 中创建一个单独的桥接接口并将其与 WSL2 一起使用。我自己还没有尝试过这个(我一直想尝试),但请参阅这篇博文了解详细信息。

从您的回答来看,您可能已经找到了一些有关桥接网络的信息,这些信息早于今年早些时候添加的“官方”(尽管是预览版)支持。

答案2

我根据答案进行了一些挖掘,并找到了这个来源: https://develmonk.com/2021/06/05/easiest-wsl2-bridge-network-without-hyper-v-virtual-network-manager/

根据此,我需要创建一个桥接。然而,尽管我在 Windows 11 中重新创建了一些步骤,尽管访问路径不同,但我认为只是为了在 Windows Terminal 中实现 WOL 而进行这么多设置是适得其反的。

相关内容