尝试在 Linux 上持续设置网络唤醒失败

尝试在 Linux 上持续设置网络唤醒失败

这是我的盒子: Linux mediacenter 5.15.122-1-MANJARO #1 SMP PREEMPT Tue Jul 25 07:09:46 UTC 2023 x86_64 GNU/Linux

我正在尝试关注 https://wiki.archlinux.org/title/LAN 唤醒

但我无法使这些改变持久。

我尝试过链接解决方案、systemd 和 udev 规则解决方案。每次我重启时,情况都是这样的:

sudo ethtool enp1s0 | grep Wake-on
    Supports Wake-on: pumbg
    Wake-on: d

这似乎意味着它已被禁用。

尤其是 systemd 这件事让我很困惑。看来 systemd 脚本在网络接口从 重命名为 之前就运行eth0enp1s0

ago 31 00:27:33 mediacenter systemd[1]: Starting Wake-on-LAN for enp1s0...
ago 31 00:27:33 mediacenter ethtool[373]: netlink error: no device matches name (offset 24)

我无法让它在重启时应用 ethtool 命令。如果我在重启后手动设置它,它就会起作用:

$ sudo systemctl start wol@enp1s0
$ sudo ethtool enp1s0 | grep Wake-on
    Supports Wake-on: pumbg
    Wake-on: umbg

有想法吗?

答案1

看起来 systemd 脚本在网络接口从 eth0 重命名为 enp1s0 之前运行。

在这种情况下,请创建 systemd 单元依靠在名为 的网络接口上enp1s0。这是通过为相应的 /sys 设备路径添加Wants=和来完成After=的——虽然有点令人困惑,但 systemd 为此使用了虚构的 /sys/subsystem 路径(计划存在但从未实现)。

[单元]
想要=sys-subsystem-net-devices-%i.device
之后=sys-subsystem-net-devices-%i.device

另外,虽然在 multi-user.target 中拥有单位通常没问题,但你可以让设备本身将其拉进来:

# 选修的
[安装]
WantedBy=sys-子系统-网络设备-%i.device

更好的方法是调用 ethtool来自 udev 规则,因为 udev 规则是在设备出现时处理的,而不是更早(显然)。在其他情况下(虽然不是你的情况),它们还有一个优势,即其他各种软件(包括 systemd)只会收到设备“就绪”的通知规则处理已完成。

#/etc/udev/rules.d/20-wol.rules

ACTION=="添加", SUBSYSTEM=="net", KERNEL=="eth*", RUN+="/sbin/ethtool -s %k wol g"

我认为可行的方法是将 systemd 单元设置为在最后运行。

systemd 中没有“末尾”,这是故意的。有些东西与末尾类似,但这不是你想要的。

相关内容