Ответы:
Я нашел лучший способ, который работал для меня. По крайней мере, чище. Очевидно, Ubuntu изменил upstart для systemd , в Ubuntu 15.04, Ubuntu 16.04 и, вероятно, в следующих версиях. Я новичок в обеих системах, но это сработало для меня.
Я пишу об этом, потому что, гугляя Ubuntu 16 wol и другие подобные поиски, я сталкивался с этим постом несколько раз. Это может помочь кому-то еще.
Чтобы WOL работал, мне приходилось включать его каждый раз при загрузке системы. Чтобы избежать этого вручную, я использовал systemd для этой цели. Вот что я сделал:
Сначала создайте файл /etc/systemd/system/wol@.service
(удерживайте символ @). Поместите это в это:
[Unit]
Description=Wake-on-LAN for %i
Requires=network.target
After=network.target
[Service]
ExecStart=/sbin/ethtool -s %i wol g
Type=oneshot
[Install]
WantedBy=multi-user.target
Включите это для интерфейса при загрузке, выполните следующую команду (измените eth3 с вашим интерфейсом):
systemctl enable wol@eth3
Вы должны увидеть что-то вроде этого:
Created symlink from /etc/systemd/system/multi-user.target.wants/wol@eth3.service to /etc/systemd/system/wol@.service.
Чтобы проверить, включен ли он, выполните следующую команду (измените eth3 в соответствии с вашим интерфейсом) и она должна вернуть enabled
:
systemctl is-enabled wol@eth3
Чтобы проверить это, перезагрузитесь и запустите (измените eth3 с вашим интерфейсом):
ethtool eth3
Вы должны увидеть строку со следующим:
Wake-on: g
Источники:
выскочка:
Upstart - это основанная на событиях замена для демона / sbin / init, который обрабатывает запуск задач и служб во время загрузки, останавливает их во время завершения работы и контролирует их во время работы системы.
- upstart - основанный на событиях демон init
Systemd:
systemd - это набор основных строительных блоков для системы Linux. Он предоставляет диспетчер системы и услуг, который запускается как PID 1 и запускает остальную часть системы. (...)
- systemd
В Ubuntu 16.04 набор WOL_DISABLE=N
в , /etc/default/tlp
чтобы избежать WOL отключена по управлению питанием TLP.
http://linrunner.de/en/tlp/docs/tlp-configuration.html
Добавить NETDOWN=no
в /etc/default/halt
для предотвращения отключения питания сетевой карты во время остановки
Включить Wake on LAN, /etc/network/interfaces
когда используется статическая конфигурация сети.
# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.0.10
netmask 255.255.255.0
gateway 192.168.0.1
dns-nameservers 192.168.0.1
up ethtool -s eth0 wol g
Включите wake on lan в BIOS, войдите в настройки BIOS и найдите что-нибудь под названием «Wake up on PCI event», «Wake up on LAN» или подобное. Измените это так, чтобы это было включено. Сохраните настройки и перезагрузите компьютер.
https://help.ubuntu.com/community/WakeOnLan
Предупреждение. Некоторые материнские платы / сетевые контроллеры не поддерживают WOL при «холодной» загрузке (состояние S5, когда питание системы физически отключается и снова включается). В этом случае должен быть выполнен как минимум один цикл питания (включение, выключение). Чтобы решить эту проблему, BIOS можно настроить на включение при восстановлении переменного тока и запланировать выключение в Ubuntu после этого. Обратитесь к руководству по материнской плате для получения дополнительной информации.
WOL_DISABLE=N
и NETDOWN=no
должны быть частью help.ubuntu.com/community/WakeOnLan
Запустите следующее в терминале:
sudo ethtool -s {your network interface} wol g
sudo ethtool {your network interface}
Вы должны увидеть g рядом с пробуждением по локальной сети после написания второй команды
Для того, чтобы WOL работал, убедитесь, что ваш интерфейс Ethernet правильно отключен вашей системой при отключении питания.
Попробуйте следующее:
Создайте скрипт bash с именем wol_poweroff.sh в каталоге /etc/rc6.d/ :
sudo nano /etc/rc6.d/wol_poweroff.sh
Поместите этот код в это:
#!/bin/bash
ifconfig eth0 down
poweroff
Скопируйте его в каталог /etc/rc0.d (чтобы он также работал с halt ):
sudo cp /etc/rc6.d/wol_poweroff.sh /etc/rc0.d/wol_poweroff.sh
Сделайте их обоих исполняемыми:
sudo chmod 755 /etc/rc6.d/wol_poweroff.sh
sudo chmod 755 /etc/rc0.d/wol_poweroff.sh
Теперь проверьте, работает ли он, выключив компьютер с помощью sudo shutdown now
или sudo poweroff
и используя инструмент WOL для отправки на него волшебного пакета.
Это было единственное, что сработало для меня. Я нашел эти шаги в отчете об ошибке на launchpad.net.
По словам автора, Робби Уильямсона, это работает из-за следующего:
Чтобы заставить WOL работать, интерфейс Ethernet должен быть надлежащим образом отключен как часть выключения системы. Это должно быть выполнено как часть уровней запуска rc0 и rc6, отмечая, что Linux обычно имеет 7 различных уровней запуска (или режимов работы):
rc0.d - система остановлена
rc1.d - однопользовательский режим
rc2.d - однопользовательский режим с поддержкой сети
rc3.d - многопользовательский режим - загрузка в текстовом режиме
rc4.d - еще не определено
rc5.d - многопользовательский режим - загрузка в X Windows
rc6.d - Завершение работы и перезагрузка
Источник: https://bugs.launchpad.net/ubuntu/+source/ifupdown/+bug/981461
Если вы используете NetworkManager, то вы можете включить WOL через nmcli
:
nmcli connection show
Запомните НАИМЕНОВАНИЕ подключения ТИПА "802-3-ehternet" для УСТРОЙСТВА, представляющего интерес. Скажите, что это имя «Проводное соединение 1». Затем измените его правильно:
nmcli connection modify "Wired connection 1" 802-3-ethernet.wake-on-lan magic
Чтобы получить его MAC-адрес:
nmcli connection show "Wired connection 1" | grep 802-3-ethernet.mac-address
Теперь вы можете выключить его и включить с другого компьютера в той же локальной сети по wakeonlan 1a:2b:3c:4d:5e:6f
команде, где 1a:2b:3c:4d:5e:6f
находится MAC-адрес сетевой карты предыдущего шага.
Помимо параметров, предложенных @nkef, вы можете установить следующие параметры в / etc / network / interfaces, если вы используете DHCP вместо статических настроек IP для сетевого адаптера (здесь он называется eth0):
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
ethernet-wol g
(проверено на Ubuntu 16.04 LTS).
Это меня немного поразило в Ubuntu 18.04 (безголовая / минимальная установка), к сожалению, уже перечисленные здесь ответы, хотя иногда они могут показаться работающими, не дают надежного решения, поскольку они создают условия гонки или сражаются с подобными systemd, Нетплан и Удев.
Я тоже сначала попробовал этот подход, и он, похоже, сработал, я планирую загрузку системы каждый вечер через WakeOnLan для запуска резервного копирования, поскольку системный BIOS не обеспечивает опцию запланированного включения переменного тока.
Он работал бы в течение нескольких дней, а затем отказывался просыпаться, включение его вручную и запуск ethtool показывали, что WoL был отключен:
Wake-on: d
Поэтому я решил, что нужно было еще кое-что отключить, и у меня было много таких проблем в последние несколько лет, когда systemd захватил части системы, и я решил начать здесь, о чудо:
WakeOnLan = .. .. По умолчанию выключено.
https://www.freedesktop.org/software/systemd/man/systemd.link.html
Примеры онлайн показывают что-то вроде:
/etc/systemd/network/50-wired.link
[Match]
MACAddress=<MAC ADDRESS>
[Link]
WakeOnLan=magic
Как бы то ни было, это все еще не работает. Потом я наткнулся на это:
udevadm test-builtin net_setup_link /etc/systemd/network/50-wired.link
что привело к:
Load module index
Parsed configuration file /lib/systemd/network/99-default.link
Parsed configuration file /etc/systemd/network/50-wired.link
Parsed configuration file /run/systemd/network/10-netplan-eno1.link
И что я могу найти в /run/systemd/network/10-netplan-eno1.link?
[Match]
MACAddress=<MAC ADDRESS>
[Link]
Name=eno1
WakeOnLan=off
Решение Либо:
Поскольку у меня уже был файл systemd .link, я просто переименовал его в 00-wired.link, перезагрузился, и теперь отчеты ethtool eno1:
Wake-on: g
Без каких-либо дополнительных услуг исключительно для того, чтобы попытаться включить WoL.