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