วิธีเปิดใช้งาน Wake On Lan (WOL) ใน Ubuntu 16.04


คำตอบ:


21

ฉันพบวิธีที่ดีกว่าสำหรับฉันแล้ว อย่างน้อยก็เป็นวิธีที่สะอาดกว่า เห็นได้ชัดว่า Ubuntu เปลี่ยนพุ่งพรวดสำหรับsystemdใน Ubuntu 15.04, Ubuntu 16.04 และรุ่นถัดไปน่าจะเป็นเช่นกัน ฉันยังใหม่กับทั้งสองระบบ แต่สิ่งนี้ใช้ได้สำหรับฉัน

ฉันโพสต์สิ่งนี้เพราะในขณะที่googling Ubuntu 16 wolและการค้นหาอื่น ๆ ที่คล้ายกันฉันเจอโพสต์นี้หลายครั้ง นี่จะช่วยคนอื่นได้

เพื่อให้ WOL ทำงานได้ฉันต้องเปิดใช้งานใหม่ทุกครั้งที่ระบบบูต เพื่อหลีกเลี่ยงการทำสิ่งนี้ด้วยตนเองฉันใช้ systemd เพื่อจุดประสงค์นี้ นี่คือสิ่งที่ฉันทำ:

  1. ขั้นแรกสร้างไฟล์/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
    
  2. เปิดใช้งานสิ่งนี้สำหรับอินเทอร์เฟซขณะบูตให้รันคำสั่งต่อไปนี้ (เปลี่ยน eth3 ด้วยอินเทอร์เฟซของคุณ):

    systemctl enable wol@eth3
    

    คุณควรเห็นสิ่งนี้:

    Created symlink from /etc/systemd/system/multi-user.target.wants/wol@eth3.service to /etc/systemd/system/wol@.service.
    
  3. หากต้องการตรวจสอบว่าเปิดใช้งานอยู่หรือไม่ให้เรียกใช้คำสั่งต่อไปนี้(เปลี่ยน eth3 ด้วยส่วนต่อประสานของคุณ)และควรกลับมาenabled:

    systemctl is-enabled wol@eth3
    
  4. ในการทดสอบให้รีบูตและรัน (เปลี่ยน eth3 ด้วยอินเทอร์เฟซของคุณ):

    ethtool eth3
    

    คุณควรเห็นบรรทัดต่อไปนี้:

    Wake-on: g
    

แหล่งที่มา:

  • SystemdForUpstartUsers - Ubuntu Wiki
  • Wake-on-LAN - ArchWiki
  • systemd - ArchWiki
  • พุ่งพรวด:

    พุ่งพรวดคือการแทนที่เหตุการณ์ตาม / sbin / init daemon ซึ่งจัดการการเริ่มต้นของงานและบริการในระหว่างการบูตหยุดในระหว่างการปิดและการดูแลพวกเขาในขณะที่ระบบกำลังทำงาน
    - upstart - daemon เริ่มต้นที่อิงเหตุการณ์

  • systemd:

    systemd เป็นชุดของการสร้างพื้นฐานสำหรับระบบ Linux จัดเตรียมระบบและผู้จัดการบริการที่ทำงานเป็น PID 1 และเริ่มต้นระบบที่เหลือ (... )
    - systemd


2
+1 วิธีนี้ดีกว่า ควรเป็นที่ยอมรับ
Stefanos Kalantzis

19

ใน 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 หลังจากนั้น ดูคู่มือของเมนบอร์ดสำหรับรายละเอียดเพิ่มเติม


สิ่งนี้ใช้ได้กับฉันที่ 14.04 LTS ขอขอบคุณ!
TenLeftFingers

สองความคิดเห็นเกี่ยวกับWOL_DISABLE=NและNETDOWN=noควรเป็นส่วนหนึ่งของhelp.ubuntu.com/community/WakeOnLan
Alecz

3

เพื่อให้ WOL ทำงานได้ตรวจสอบให้แน่ใจว่าระบบอีเธอร์เน็ตของคุณปิดการทำงานอย่างถูกต้องเมื่อคุณปิดเครื่อง

ลองทำสิ่งต่อไปนี้:

  1. สร้างสคริปต์ทุบตีชื่อwol_poweroff.shในไดเร็กทอรี/etc/rc6.d/ :

    sudo nano /etc/rc6.d/wol_poweroff.sh
    
  2. ใส่รหัสนี้:

    #!/bin/bash
    ifconfig eth0 down
    poweroff
    
  3. คัดลอกไปยังไดเร็กทอรี/etc/rc0.d (เพื่อให้ทำงานได้ด้วยhalt ):

    sudo cp /etc/rc6.d/wol_poweroff.sh /etc/rc0.d/wol_poweroff.sh
    
  4. ทำให้พวกเขาทั้งสองปฏิบัติการ:

    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


2

รันสิ่งต่อไปนี้ในเทอร์มินัล:

sudo ethtool -s {your network interface} wol g 
sudo ethtool {your network interface}

คุณควรเห็นgถัดไปเพื่อปลุกบน LANหลังจากเขียนคำสั่งที่สอง

แหล่ง


2

หากคุณใช้ 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 จากขั้นตอนก่อนหน้าคือ


1

นอกเหนือจากพารามิเตอร์ที่แนะนำโดย @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)


1

เพียงเล็กน้อยฉันก็เช่นกันภายใต้ 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

โซลูชันอย่างใดอย่างหนึ่ง:

  1. ลบ netplan
  2. ติดตั้งเครือข่ายผ่านการกำหนดค่า netplan
  3. หรือตั้งค่าไฟล์ systemd .link ให้มีลำดับความสำคัญสูงกว่า

เนื่องจากฉันมีไฟล์ systemd .link อยู่แล้วฉันก็เปลี่ยนชื่อเป็น 00-wired.link รีบูตและตอนนี้รายงาน ethtool eno1:

    Wake-on: g

ไม่มีบริการพิเศษใด ๆ เพียงเพื่อวัตถุประสงค์ในการพยายามเปิดใช้งาน WoL

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.