这是我的盒子:
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 脚本在网络接口从 重命名为 之前就运行eth0
了enp1s0
。
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 中没有“末尾”,这是故意的。有些东西与末尾类似,但这不是你想要的。