Вопрос или проблема
Я попытался следовать этой статье, чтобы включить Wake on LAN при загрузке, используя службу systemd. Но это не работает. Вот что я сделал:
-
Попробовал команду
sudo /usr/sbin/ethtool --change eno1 wol g
, и она успешно устанавливает поле “Wake-on:” командыsudo ethtool eno1
наg
. -
Создал файл
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
- Включил службу с помощью команды:
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 и сделали следующее:
- Успешно проверили команду
sudo /usr/sbin/ethtool --change eno1 wol g
, которая временно задает начальную конфигурацию. - Создали systemd-сервис, который выполняет ту же команду при запуске системы.
- Активировали сервис, однако после перезагрузки параметр "Wake-on" изменяется обратно на
d
.
Применение
Для решения вашей проблемы мы можем следовать следующему алгоритму:
-
Проверьте поддержку WoL вашим оборудованием:
- Убедитесь, что Wake-on-LAN поддерживается на уровне BIOS/UEFI. Перейдите в настройки BIOS и проверьте, включена ли эта функция.
-
Проверьте утилиту управления сетью:
- Если вы используете NetworkManager, он может перезаписывать настройки интерфейса. Убедитесь, что его конфигурации не конфликтуют с вашими настройками WoL. Для этого создайте файл конфигурации в
/etc/NetworkManager/conf.d/
:[connection] wifi.powersave = 2 # other configurations...
[ethernet]
wake-on-lan = magic- Перезапустите NetworkManager с помощью команды `sudo systemctl restart NetworkManager`.
- Если вы используете NetworkManager, он может перезаписывать настройки интерфейса. Убедитесь, что его конфигурации не конфликтуют с вашими настройками WoL. Для этого создайте файл конфигурации в
-
Исправление 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
- В вашем файле сервиса
-
Проверьте и тайминг:
- Иногда проблема может возникать из-за того, что ваш сервис запускается слишком рано, когда сетевой интерфейс еще не инициализирован. Добавление
ExecStartPre
для проверки активности интерфейса может помочь:ExecStartPre=/usr/bin/sleep 10
- Иногда проблема может возникать из-за того, что ваш сервис запускается слишком рано, когда сетевой интерфейс еще не инициализирован. Добавление
-
Убедитесь в отсутствии ошибок в логах:
- Просмотрите логи systemd с помощью
journalctl -xe
для поиска любых ошибок, связанных с вашей службой. - Удостоверьтесь, что у вас есть соответствующие права для выполнения команд управления сетевыми интерфейсами.
- Просмотрите логи systemd с помощью
Заключение
Если после всех этих шагов проблема остается, это может свидетельствовать о более глубокой аппаратной несовместимости или о настройках, специфичных для вашей сетевой карты или конфигурации системы. В таких случаях рекомендуется проконсультироваться с технической документацией вашего оборудования или обратится в форум Ubuntu для получения дополнительной помощи.
Применив эти рекомендации, вы должны обеспечить правильную работу функции Wake-on-LAN после каждой перезагрузки системы.