Intentar configurar Wake-on-lan de forma persistente en Linux falla

Intentar configurar Wake-on-lan de forma persistente en Linux falla

Esta es mi caja: Linux mediacenter 5.15.122-1-MANJARO #1 SMP PREEMPT Tue Jul 25 07:09:46 UTC 2023 x86_64 GNU/Linux

estoy tratando de seguir https://wiki.archlinux.org/title/Wake-on-LAN

Pero no logro que los cambios sean persistentes.

Probé la solución de enlace, systemd y udev rule. Cada vez que reinicio las cosas se ven así:

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

Lo que parece significar que está deshabilitado.

Especialmente lo del systemd me desconcierta. Parece que el script systemd se ejecuta antes de que se cambie el nombre de la interfaz de red de eth0a 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)

No he podido lograr que aplique el comando ethtool al reiniciar. Si lo configuro manualmente después de reiniciar, funciona:

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

¿Ideas?

Respuesta1

Parece que el script systemd se ejecuta antes de que se cambie el nombre de la interfaz de red de eth0 a enp1s0.

En ese caso, haga que la unidad systemddependeren una interfaz de red llamada enp1s0. Esto se hace agregando Wants=y After=para la ruta del dispositivo /sys correspondiente; aunque de manera algo confusa, systemd usa la ruta inventada /sys/subsystem para esto (que se planeó que existiera pero nunca llegó a existir).

[Unidad]
Quiere=sys-subsystem-net-devices-%i.dispositivo
Después=sys-subsystem-net-devices-%i.device

Además, si bien tener la unidad en multi-user.target generalmente está bien,podríahaga que el dispositivo lo tire hacia adentro:

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

Un método aún mejor sería invocar ethtoolde una regla udev,ya que las reglas de udev se procesan cuando aparece el dispositivo y no antes (obviamente). En otras situaciones (aunque no en la suya) también tienen la ventaja de que otros programas (incluido systemd) solo reciben notificaciones cuando el dispositivo está "listo".despuésel procesamiento de reglas ha finalizado.

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

ACCIÓN=="agregar", SUBSYSTEM=="net", KERNEL=="eth*", RUN+="/sbin/ethtool -s %k wol g"

Creo que lo que funcionará es configurar la unidad systemd para que se ejecute al final.

No hay "al final" en systemd, de forma muy deliberada. Hay cosas que se aproximan, pero esas no son las que quieres.

información relacionada