嘗試在 Linux 上持久設定 LAN 喚醒失敗

嘗試在 Linux 上持久設定 LAN 喚醒失敗

這是我的盒子: 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/Wake-on-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-subsystem-net-devices-%i.device

更好的方法是呼叫 ethtool根據 udev 規則,因為 udev 規則是在裝置出現時處理的,而不是更早(顯然)。在其他情況下(儘管不是在您的情況下),它們還具有以下優點:各種其他軟體(包括 systemd)僅收到設備「準備就緒」的通知規則處理完成。

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

ACTION==“add”,SUBSYSTEM==“net”,KERNEL==“eth*”,RUN+=“/sbin/ethtool -s %k wol g”

我認為有效的方法是將 systemd 單元設定為最後運行。

systemd 中沒有“最後”,這是非常刻意的。有些東西接近它,但那些不是你想要的。

相關內容