Friday, May 29, 2026

[技術分享] 完美解決 Linux (Ubuntu) 無線喚醒 (WoWLAN) 重開機失效與被 NetworkManager 覆蓋的終極大絕招!

最近我喜歡用 iPad 搭配 SSH Client APP(例如 Termius、Blink Shell)在區域網路內遠端操作 Linux 伺服器或筆電。但最讓人頭痛的,就是當遠端 Linux 筆電睡著或關機時,如何透過無線 Wi-Fi 把它叫醒?

一般我們知道實體網路線可以用傳統的 Wake-on-LAN (WoL),但在無線網路 (Wake-on-Wireless-LAN, WoWLAN) 的世界裡,Ubuntu底層的電源管理,常常在開機或重啟網路時,強行將我們設定好的無線喚醒功能蓋過去(Override)。

本篇文章將 Step by Step 帶你徹底收服 Linux 核心,利用 systemd 時間差突襲,實現永久生效的「無線區網喚醒」!


🛠️ 第一階段:Linux 端的實體硬體大點名

在動手之前,我們必須拿到這台 Linux 筆電最精準的無線網卡「實體身分證代號」。

Step 1:查詢無線網卡名稱與實體代號

請打開 Linux 終端機,輸入以下標準指令:

iw dev

或者是查詢特定網卡的詳細資訊(以本機常見的 Intel 網卡為例):

iw dev wlp0s20f3 info

💡 重點觀察輸出結果:
在噴出來的 Log 資訊中,請死死抄下這兩個關鍵密碼:

  • wiphy 0:這代表你的實體網卡晶片代號叫做 phy0
  • addr xx:xx:xx:xx:xx:xx:這串是你的 Wi-Fi MAC 位址(請先記下來,待會 iPad 發射封包需要它)。

🛠️ 第二階段:生死審判!檢查網卡是否支援無線喚醒

並不是每張網卡都能隔空接收神秘封包,我們必須對 phy0 進行硬體功能檢測。

Step 2:檢視目前 WoWLAN 的狀態

請輸入以下指令:

iw phy phy0 wowlan show
  • 情況 A :如果顯示 WoWLAN is disabled.,恭喜你!這張網卡硬體完全支援無線喚醒,只是目前沒開門。
  • 情況 B :如果噴出 Operation not supported,代表該驅動程式底層被閹割了,只能乖乖改插實體網路線。

🛠️ 第三階段:為什麼設定開機就失效?

一般技術文章會教你,直接下一行臨時啟用指令就收工:

sudo iw phy phy0 wowlan enable magic-packet

但是!只要重開機或網路斷開重連,這行設定就會立刻灰飛煙滅,重回預設的 disabled

🕵️ 幕後黑手是誰?

因為現代 Linux 系統中,有一個權限極高的上層大管家叫 NetworkManager。在系統開機或網路 Up 的瞬間,NetworkManager 為了極致省電,會非常粗暴地覆蓋(Override)所有底層硬體設定,把我們辛辛苦苦開啟的 magic-packet 再次無情關閉。


🛠️ 第四階段:終極解法 —— systemd 「時間差突襲法」

既然用常規的系統事件(如 udev 或 NetworkManager dispatcher)會跟開機程序產生順序競爭(Race Condition),那我們就改用最暴力、但也最絕對有效的終極大絕招:建立一個專屬開機服務,並讓它「延時執行」。

我們讓這個服務在系統完全開機、網路建立好之後,在背景默默倒數 5 秒。等 NetworkManager 載入完它的省電設定後,我們再做覆蓋的動作!

Step 3:建立專屬的 systemd 服務檔案

在系統服務目錄下建立一個名為 wowlan.service 的檔案:

sudo vi /etc/systemd/system/wowlan.service

Step 4:完整貼入以下終極外掛設定

將以下這段服務設定完整複製並貼進去:

[Unit] Description=Force Enable WoWLAN Magic Packet After=network.target network-online.target NetworkManager.service [Service] Type=oneshot # 【核心關鍵】開機到這步後,強行在背景默數 5 秒,完美避開 NetworkManager 開機與連線時的省電干擾! ExecStartPre=/usr/bin/sleep 5 ExecStart=/usr/sbin/iw phy phy0 wowlan enable magic-packet RemainAfterExit=yes [Install] WantedBy=multi-user.target

Step 5:註冊並永久啟用該開機服務

依序輸入以下三行指令,重新點名並實施開機自動化:

# 1. 重新載入系統服務設定 sudo systemctl daemon-reload # 2. 設定該服務為開機自動啟動 sudo systemctl enable wowlan.service # 3. 手動立即啟動它來進行測試 sudo systemctl start wowlan.service

🏁 第五階段:驗收與 iPad 實戰

Step 6:重開機最終驗收

請放心地重開整台 Linux 筆電:

sudo reboot

重新開機並用 SSH 連進去後,輸入指令:

iw phy phy0 wowlan show

當你看到畫面噴出以下這兩行輸出時:

WoWLAN is enabled: * wake up on magic packet

恭喜你!這條無線喚醒防線已經永久固化在你的系統裡了!


📱 iPad 端實戰:一鍵喚醒遠端 Linux

接下來輪到 iPad :

  1. 挑選 App:下載 App Store 的 Termius(推薦,自帶 WoL)或 iNet WOL
  2. 踩坑注意 (iOS 隱形大坑):第一次打開 App 時,系統跳出 "是否允許此 App 尋找並連線到區域網路上的裝置?"務必點選「允許」!如果不小心按到拒絕,請至 iPad「設定」➡️ 找到該 App ➡️ 手動將「區域網路」權限開啟。
  3. 填入參數
    • MAC 位址:填入 Step 1 查到的 xx:xx:xx:xx:xx:xx
    • IP 位址:填入這台 Linux 的內網區域 IP(例如 192.168.1.118)。
  4. 發射!:將 Linux 筆電蓋上螢幕進入休眠(Suspend),在 iPad App 上點擊 Wake

你會驚奇地發現,原本死沉沉的 Linux 筆電鍵盤燈瞬間亮起、螢幕重開,高科技的隔空無線喚醒正式大功告成!


💡 網管小嘮叨:

  1. Wi-Fi 分享器的「AP 隔離 (AP Isolation)」務必關閉:因為 iPad 與 Linux 皆走無線,若路由器開啟 AP 隔離,廣播封包會被沒收。
  2. BIOS 設定:部分筆電主機板(如 ThinkPad)在 BIOS 的 Power / Network 頁面中,有獨立的 Wake on WLAN 選項,記得同步調整為 Enabled 喔!


No comments: