Tentar definir wake-on-lan persistentemente no Linux falha

Tentar definir wake-on-lan persistentemente no Linux falha

Esta é minha caixa: Linux mediacenter 5.15.122-1-MANJARO #1 SMP PREEMPT Tue Jul 25 07:09:46 UTC 2023 x86_64 GNU/Linux

estou tentando seguir https://wiki.archlinux.org/title/Wake-on-LAN

Mas não estou conseguindo tornar as mudanças persistentes.

Eu tentei a solução de link, o systemd e a regra do udev. Cada vez que reinicio as coisas ficam assim:

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

O que parece significar que está desativado.

Especialmente a coisa do systemd me intriga. Parece que o script systemd é executado antes da interface de rede ser renomeada de eth0para 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)

Não consegui aplicar o comando ethtool na reinicialização. Se eu configurá-lo manualmente após a reinicialização, funcionará:

$ sudo systemctl start wol@enp1s0
$ sudo ethtool enp1s0 | grep Wake-on
    Supports Wake-on: pumbg
    Wake-on: umbg

Ideias?

Responder1

Parece que o script systemd é executado antes da interface de rede ser renomeada de eth0 para enp1s0.

Nesse caso, faça a unidade systemddependerem uma interface de rede chamada enp1s0. Isso é feito adicionando Wants=e After=para o caminho do dispositivo /sys correspondente - embora um tanto confuso, o systemd usa o caminho /sys/subsystem inventado para isso (que foi planejado para existir, mas nunca existiu).

[Unidade]
Quer=sys-subsystem-net-devices-%i.device
Depois=sys-subsystem-net-devices-%i.device

Além disso, embora geralmente seja bom ter a unidade em multi-user.target, vocêpoderiafaça o próprio dispositivo puxá-lo:

# Opcional
[Instalar]
WantedBy=sys-subsystem-net-devices-%i.device

Um método ainda melhor seria invocar ethtoolde uma regra do udev,já que as regras do udev são processadas quando o dispositivo aparece e não antes (obviamente). Em outras situações (embora não na sua), eles também têm a vantagem de que vários outros softwares (incluindo o systemd) só são notificados quando o dispositivo está "pronto"depoiso processamento da regra foi concluído.

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

ACTION=="adicionar", SUBSYSTEM=="net", KERNEL=="eth*", RUN+="/sbin/ethtool -s %k wol g"

Acho que o que funcionará é configurar a unidade systemd para rodar no final.

Não existe "no final" no systemd, deliberadamente. Há coisas que se aproximam disso, mas não é isso que você deseja.

informação relacionada