วิธีเปิดใช้งาน Wake On Lan (WOL) ใน Ubuntu 16.04 LTS
วิธีเปิดใช้งาน Wake On Lan (WOL) ใน Ubuntu 16.04 LTS
คำตอบ:
ฉันพบวิธีที่ดีกว่าสำหรับฉันแล้ว อย่างน้อยก็เป็นวิธีที่สะอาดกว่า เห็นได้ชัดว่า 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
แหล่งที่มา:
พุ่งพรวด:
พุ่งพรวดคือการแทนที่เหตุการณ์ตาม / sbin / init daemon ซึ่งจัดการการเริ่มต้นของงานและบริการในระหว่างการบูตหยุดในระหว่างการปิดและการดูแลพวกเขาในขณะที่ระบบกำลังทำงาน
- upstart - daemon เริ่มต้นที่อิงเหตุการณ์
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
เปิดใช้งานการปลุกบน LAN ใน BIOS ป้อนการตั้งค่า BIOS และค้นหาสิ่งที่เรียกว่า "การปลุกในเหตุการณ์ PCI", "การปลุกใน LAN" หรือคล้ายกัน เปลี่ยนเป็นเปิดใช้งาน บันทึกการตั้งค่าของคุณและรีบูต
https://help.ubuntu.com/community/WakeOnLan
คำเตือนเมนบอร์ด / เน็ตเวิร์กคอนโทรลเลอร์บางตัวไม่รองรับ WOL จากการบูตแบบเย็น (สถานะ S5 ซึ่งพลังงานไปยังระบบปิดและเปิดใหม่อีกครั้ง) ในกรณีนั้นจะต้องดำเนินการอย่างน้อยหนึ่งรอบการใช้พลังงาน (เปิดเครื่องปิดเครื่อง) เพื่อบรรเทาปัญหานี้ BIOS สามารถกำหนดค่าให้เปิดเครื่องเมื่อ AC ถูกกู้คืนและกำหนดการปิดระบบภายใน Ubuntu หลังจากนั้น ดูคู่มือของเมนบอร์ดสำหรับรายละเอียดเพิ่มเติม
WOL_DISABLE=N
และNETDOWN=no
ควรเป็นส่วนหนึ่งของhelp.ubuntu.com/community/WakeOnLan
เพื่อให้ WOL ทำงานได้ตรวจสอบให้แน่ใจว่าระบบอีเธอร์เน็ตของคุณปิดการทำงานอย่างถูกต้องเมื่อคุณปิดเครื่อง
ลองทำสิ่งต่อไปนี้:
สร้างสคริปต์ทุบตีชื่อ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 ทำงานได้ต้องใช้อินเทอร์เฟซอีเทอร์เน็ตอย่างถูกต้องเนื่องจากเป็นส่วนหนึ่งของการปิดระบบ สิ่งนี้ควรดำเนินการในฐานะเป็นส่วนหนึ่งของระดับการทำงาน 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" TYPE สำหรับอุปกรณ์ที่น่าสนใจ บอกว่าชื่อคือ "การเชื่อมต่อแบบมีสาย 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
จากตอนนี้คุณสามารถปิดและเปิดใช้งานจากเครื่องอื่นบน LAN เดียวกันโดยwakeonlan 1a:2b:3c:4d:5e:6f
คำสั่งที่1a:2b:3c:4d:5e:6f
อยู่ MAC ของการ์ด LAN จากขั้นตอนก่อนหน้าคือ
นอกเหนือจากพารามิเตอร์ที่แนะนำโดย @nkef คุณสามารถตั้งค่าต่อไปนี้ใน/ etc / network / interfacesถ้าคุณใช้ DHCP แทนการตั้งค่า IP คงที่สำหรับอะแดปเตอร์ LAN (นี่คือชื่อ eth0):
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
ethernet-wol g
(ทดสอบบน Ubuntu 16.04 LTS)
เพียงเล็กน้อยฉันก็เช่นกันภายใต้ Ubuntu 18.04 (หัวขาด / การติดตั้งน้อยที่สุด) น่าเสียดายที่คำตอบที่ระบุไว้แล้วที่นี่แม้ว่าพวกเขาอาจดูเหมือนจะทำงานในบางครั้งจะไม่ให้โซลูชั่นที่เชื่อถือได้ในขณะที่พวกเขาสร้างสภาพการแข่งขันหรือต่อสู้กับ systemd netplan และ udev
ฉันได้ลองวิธีนี้ด้วยในตอนแรกและดูเหมือนว่าจะใช้งานได้ฉันกำลังกำหนดระบบให้บูตทุกเย็นผ่าน WakeOnLan เพื่อสำรองข้อมูลเนื่องจาก BIOS ของระบบไม่ได้จัดเตรียม AC ไว้ตามตัวเลือก
มันจะทำงานสองสามวันแล้วปฏิเสธที่จะตื่นเปิดเครื่องด้วยตนเองและการเรียกใช้ 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