Попытка установить функцию wake-on-lan на Linux не удалась

Попытка установить функцию wake-on-lan на 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/Пробуждение по локальной сети

Но мне не удаётся сделать изменения устойчивыми.

Я пробовал решение link, systemd и правило udev one. Каждый раз, когда я перезагружаюсь, все выглядит так:

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. Это делается путем добавления Wants=и After=для соответствующего пути устройства /sys – хотя, что несколько сбивает с толку, systemd использует для этого выдуманный путь /sys/subsystem (который планировался к появлению, но так и не появился).

[Единица]
Wants=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 нет "в конце", очень преднамеренно. Есть вещи, которые приближаются к этому, но это не то, что вам нужно.

Связанный контент