這是我的盒子:
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 中沒有“最後”,這是非常刻意的。有些東西接近它,但那些不是你想要的。