Включение пробуждения по локальной сети при загрузке с использованием службы systemd не работает.

Вопрос или проблема

Я попытался следовать этой статье, чтобы включить Wake on LAN при загрузке, используя службу systemd. Но это не работает. Вот что я сделал:

  1. Попробовал команду sudo /usr/sbin/ethtool --change eno1 wol g, и она успешно устанавливает поле “Wake-on:” команды sudo ethtool eno1 на g.

  2. Создал файл wol.service в /etc/systemd/system/:

[Unit]
Description=Enable Wake On Lan

[Service]
Type=oneshot
ExecStart = /usr/sbin/ethtool --change eno1 wol g

[Install]
WantedBy=basic.target
  1. Включил службу с помощью команды:

sudo systemctl daemon-reload

sudo systemctl enable wol.service

, а systemctl status wol возвращает

○ wol.service - Enable Wake On Lan
     Loaded: loaded (/etc/systemd/system/wol.service; enabled; preset: enabled)
     Active: inactive (dead) since Sun 2025-03-16 22:52:35 EDT; 27s ago
   Main PID: 1048 (code=exited, status=0/SUCCESS)
        CPU: 4ms

Mar 16 22:52:35 ... systemd[1]: Starting wol.service - Enable Wake On Lan...
Mar 16 22:52:35 ... systemd[1]: wol.service: Deactivated successfully.
Mar 16 22:52:35 ... systemd[1]: Finished wol.service - Enable Wake On Lan.

Но если я перезагружаю машину, поле “Wake-on:” команды sudo ethtool eno1 возвращается к d.

Как это исправить? Я использую Ubuntu 24.04 LTS.

Ответ или решение

Ваша проблема с активацией функции Wake-on-LAN (WoL) через systemd-сервис на Ubuntu 24.04 LTS является распространенной и может быть вызвана несколькими факторами. Давайте рассмотрим возможные причины, почему ваше текущее решение не работает, и как можно исправить эту ситуацию.

Теория

Функция Wake-on-LAN позволяет "разбудить" компьютер удаленно, отправив специальный "волшебный пакет" по сети на сетевую карту устройства. Для того чтобы эта функция работала, необходимо не только настроить ее программно, но и убедиться, что она поддерживается на уровне оборудования — как материнской платы, так и сетевой карты.

Согласно описанию вашей проблемы, вы сделали все правильно с точки зрения создания systemd-сервиса, однако, это не привело к постоянному изменению состояния WoL после перезагрузки. Это может быть связано с тем, что сетевые интерфейсы могут изменять свои настройки после перезагрузки, например, из-за конфигурационных инструментов, таких как Network Manager или другие сетевые скрипты, которые перезаписывают параметры.

Пример

Вы следовали инструкциям создания сервиса systemd и сделали следующее:

  1. Успешно проверили команду sudo /usr/sbin/ethtool --change eno1 wol g, которая временно задает начальную конфигурацию.
  2. Создали systemd-сервис, который выполняет ту же команду при запуске системы.
  3. Активировали сервис, однако после перезагрузки параметр "Wake-on" изменяется обратно на d.

Применение

Для решения вашей проблемы мы можем следовать следующему алгоритму:

  1. Проверьте поддержку WoL вашим оборудованием:

    • Убедитесь, что Wake-on-LAN поддерживается на уровне BIOS/UEFI. Перейдите в настройки BIOS и проверьте, включена ли эта функция.
  2. Проверьте утилиту управления сетью:

    • Если вы используете NetworkManager, он может перезаписывать настройки интерфейса. Убедитесь, что его конфигурации не конфликтуют с вашими настройками WoL. Для этого создайте файл конфигурации в /etc/NetworkManager/conf.d/:
      
      [connection]
      wifi.powersave = 2
      # other configurations...

    [ethernet]
    wake-on-lan = magic

    
    - Перезапустите NetworkManager с помощью команды `sudo systemctl restart NetworkManager`.
  3. Исправление systemd-сервиса:

    • В вашем файле сервиса wol.service используйте более универсальный таргет запуска. Замените basic.target на network-online.target:
      
      [Unit]
      Description=Enable Wake On Lan
      After=network-online.target

    [Service]
    Type=oneshot
    ExecStart=/usr/sbin/ethtool –change eno1 wol g

    [Install]
    WantedBy=multi-user.target

    - После внесения изменений не забудьте выполнить команды:
    ```sh
    sudo systemctl daemon-reload
    sudo systemctl enable wol.service
  4. Проверьте и тайминг:

    • Иногда проблема может возникать из-за того, что ваш сервис запускается слишком рано, когда сетевой интерфейс еще не инициализирован. Добавление ExecStartPre для проверки активности интерфейса может помочь:
      ExecStartPre=/usr/bin/sleep 10
  5. Убедитесь в отсутствии ошибок в логах:

    • Просмотрите логи systemd с помощью journalctl -xe для поиска любых ошибок, связанных с вашей службой.
    • Удостоверьтесь, что у вас есть соответствующие права для выполнения команд управления сетевыми интерфейсами.

Заключение

Если после всех этих шагов проблема остается, это может свидетельствовать о более глубокой аппаратной несовместимости или о настройках, специфичных для вашей сетевой карты или конфигурации системы. В таких случаях рекомендуется проконсультироваться с технической документацией вашего оборудования или обратится в форум Ubuntu для получения дополнительной помощи.

Применив эти рекомендации, вы должны обеспечить правильную работу функции Wake-on-LAN после каждой перезагрузки системы.

Оцените материал
Добавить комментарий

Капча загружается...