Відповіді:
Я знайшов кращий спосіб, який працював на мене. Принаймні більш чистий спосіб. Мабуть, Ubuntu змінив старт для systemd , в Ubuntu 15.04, Ubuntu 16.04 і, мабуть, також наступних версіях. Я новачок в обох системах, але це працювало для мене.
Я публікую це, оскільки під час googling 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 і запускає решту системи. (...)
- системний
В 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
Увімкніть пробудження в мережі в BIOS, увійдіть у налаштування BIOS і шукайте щось, що називається "Побуди в PCI події", "Прокидайся через LAN" або подібне. Змініть її так, щоб вона була включена. Збережіть налаштування та перезавантажте.
https://help.ubuntu.com/community/WakeOnLan
Попередження, що деякі материнські плати / мережеві контролери не підтримують WOL від холодного завантаження (стан S5, коли живлення системи фізично вимкнено і знову включено). У цьому випадку повинен бути виконаний принаймні один цикл живлення (вимкнення, вимкнення). Щоб усунути проблему, BIOS може бути налаштований на живлення після відновлення змінного струму та планування відключення всередині Ubuntu після цього. Детальнішу інформацію див. У посібнику з материнської плати.
WOL_DISABLE=N
та NETDOWN=no
повинні бути частиною help.ubuntu.com/community/WakeOnLan
Для того, щоб 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 (щоб він також працював із зупинкою ):
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
Виконайте наступне в терміналі:
sudo ethtool -s {your network interface} wol g
sudo ethtool {your network interface}
ви повинні побачити g поруч, щоб прокинутися на lan після написання другої команди
Якщо ви використовуєте NetworkManager, ви можете ввімкнути WOL за допомогою nmcli
:
nmcli connection show
Запам’ятайте NAME про підключення ТИПУ "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 / інтерфейси, якщо ви використовуєте 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 (без головної / мінімальної установки), на жаль, відповіді, які вже перераховані тут, хоча вони, здається, спрацьовують часом, не збираються забезпечити надійне рішення, оскільки вони створюють умови для перегонів або борються з подібними системами, netplan та udev.
Я спробував цей підхід теж спочатку, і, здавалося, він працює, я планую систему для завантаження кожного вечора через WakeOnLan для запуску резервних копій, оскільки система BIOS не забезпечує запланований змінного струму на вибір.
Він буде працювати кілька днів, а потім відмовитись від пробудження, включивши його вручну та запустивши ethtool виявив, що WoL було відключено:
Wake-on: d
Тож я зрозумів, що щось інше повинно бути відключенням і, маючи багато таких проблем, за останні кілька років із систематичним захопленням частини системи, я вирішив почати тут, ось і ось:
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.