LinuxでWake-on-LANを永続的に設定しようとすると失敗する

LinuxでWake-on-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/ウェイクオンLAN

しかし、私は変化を永続させることに失敗しています。

リンク ソリューション、systemd、udev ルール ソリューションを試しました。再起動するたびに、次のようになります。

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

つまり無効になっているようです。

eth0特に systemd のことは私を困惑させます。どうやら、ネットワーク インターフェイスの名前がからに変更される前に、systemd スクリプトが実行されているようです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追加することでこれを実行します。ただし、少々紛らわしいことに、systemd はこれに架空の /sys/subsystem パスを使用します (このパスは存在する予定でしたが、結局存在しませんでした)。Wants=After=

[ユニット]
希望=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 にあります。

アクション=="add", サブシステム=="net", カーネル=="eth*", 実行+="/sbin/ethtool -s %k wol g"

最後に systemd ユニットを実行するように設定するのが効果的だと思います。

systemd には意図的に「最後」がありません。それに近いものもありますが、それは必要なものではありません。

関連情報