適用版本:Ubuntu 24.04以上
Wake-On-Lan(WoL)是一種遠端開機的機制,讓我們可以透過網路喚醒電腦主機。
原理是向電腦傳送一個魔法封包(magic packet),網路卡收到封包後,電腦就會自動開機,很適合遠端控制Linux電腦開關呢!
起床了,Tux!
至於這個魔法封包要由誰來傳?得是同一個網域下的另一台裝置傳送。
1. 前置條件#
Wake-On-Lan功能需要硬體支援,大部分x86架構的電腦應該都有這個功能。不過,有些Wake-On-Lan只可以喚醒暫停(suspend)中的Linux電腦。其他則是在電腦完全關機(shutdown)狀態,也可以用Wake-On-Lan開機,這個要看個別硬體支援程度。
要遠端開機的Linux電腦必須使用有線乙太網路連接到數據機或者路由器,才能收到魔法封包。
要遠端開機的Linux電腦的電源不能斷掉。
同一個網域下必須有其他裝置開著(俗稱跳板機),用於給Linux電腦發送魔法封包。這個裝置可以是Windows或Linux電腦,或者路由器、樹莓派、手機。
2. 在UEFI啟用Wake-On-Lan#
我的ASUS主機板是可以從關機狀態開機。
首先到UEFI介面啟用Wake On LAN。ASUS管這個功能叫做「由PCI-E裝置喚醒」
3. Ubuntu啟用Wake-On-Lan服務#
請確認電腦有接上有線乙太網路
使用
ip link
指令確認網路卡裝置的MAC位址,例如我的網路卡裝置為enp2s0
,MAC位址為e3:e3:1b:41:f5:fa
,把這個MAC位址記下來
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT group default qlen 1000
link/ether e3:e3:1b:41:f5:fa brd ff:ff:ff:ff:ff:ff
接著,要啟用Wake-On-Lan功能,網路上的資料有透過Systemd、ethtool、crontab等方式來開啟。我這邊使用NetworkManager啟用,Wake-On-Lan的設定重開機之後依然有效。
列出目前的連線,例如我的乙太網路連線名稱叫做"eth0"
nmcli con show
- 查看乙太網路連線的Wake-On-Lan狀態
nmcli c show "eth0" | grep 802-3-ethernet.wake-on-lan
- 應該是沒有啟用,顯示為
default
802-3-ethernet.wake-on-lan: default
802-3-ethernet.wake-on-lan-password: --
- 啟用Wake-On-Lan
nmcli c modify "eth0" 802-3-ethernet.wake-on-lan magic
nmcli c modify "eth0" 802-3-ethernet.auto-negotiate yes
- 將Ubuntu重開機
sudo reboot
- 再次執行指令,查看Wake-On-Lan是否維持啟用狀態。
nmcli c show "eth0" | grep 802-3-ethernet.wake-on-lan
- 應該會顯示
magic
802-3-ethernet.wake-on-lan: magic
802-3-ethernet.wake-on-lan-password: --
4. 測試Wake-On-Lan能否開機#
- 將Ubuntu關機
sudo shutdown now
- 在同一個網域下,開啟另一台電腦(跳板機)。
如果是Windows電腦,安裝 basildane/WakeOnLAN操作。
Linux的話,安裝wol工具:
sudo apt install wakeonlan
- 指定MAC位址,往Ubuntu電腦的MAC位址發送魔法封包
wakeonlan "e3:e3:1b:41:f5:fa"
Ubuntu應該就會自動開機了!
如果你需要從外部網路連線到「跳板機」來給Linux遠端開機的話,可使用 內網穿透軟體