2026年5月26日 星期二

[Linux]如何配置YAML檔案讓樹莓派自動切換手機熱點和wifi基地台?

 
若樹莓派是安裝桌面版本的作業系統(例如: Raspberry Pi OS 或 Ubuntu desktop OS),自動連接和切換不同wifi基地台的功能可輕易地在設定UI中完成。然而基於節省樹莓派的資源以提升其效率的目的,採用server版本的作業系統並搭配相關應用服務(如systemd或docker)是一個不錯的選擇,而相對於桌面版本的作業系統,對應的網路配置則稍嫌複雜一些,需要初步了解Netplan和NetworkManger的差異,以及網路配置文件的YAML格式檔案。(OS: 反正現在有AI可以討論,釐清問題原因和理解解法邏輯已相對輕鬆許多~)


Wifi動態切換的使用場景:

本文使用的硬體為樹莓派 5/8g 和 Ubuntu Server 24.04  LTS 作業系統,同時期望樹莓派在下列兩種使用情境時,wifi網路能自動切換連接,不再需要外接螢幕和鍵盤來設置網路設定,降低惱人的人為配置工作量。

a.當樹莓派在外部陌生環境時,只要開啟手機熱點,樹莓派偵測到訊號後,便會自動優先以dhcp模式連線手機熱點。此時,可用筆電連上同一個手機熱點,並透過ssh進入樹莓派或是網頁訪問樹莓派中的應用服務。

b.當樹莓派回到常駐環境時,只要關掉手機熱點,樹莓派在失去高優先權連線後,會自動降級切換連接至原常駐環境的 wifi ssid,並自動套用預設配置的靜態IP,使樹莓派回歸為常駐環境的server角色。


Netplan和NetworkManger的搭配關係:

在 Ubuntu 24.04 Server 中,其預設的頂層網路後端管理工具是Netplan,其核心思想是透過一個簡潔的 YAML 格式配置文件,來定義整個系統的網路意圖,然後再將這個意圖「渲染」給底層的實際網路驅動引擎來執行。而Ubuntu Server 通常預設採用 networkd(systemd-networkd)作為底層渲染器,因為其輕量高效,適合配置單純的伺服器環境,但networkd在處理複雜的wifi網路掃描、ssid切換以及強大的優先權管理時,設定繁瑣且不夠靈活。

而NetworkManager恰好是為桌面版本(Desktop)或需要頻繁變動網路的設備設計的,其具備wifi管理能力,可處理多個ssid之間的動態切換。因此,因應上述wifi網路能自動切換連接的核心需求,在Netplan中將渲染器指定為NetworkManager。


配置步驟:

整個配置步驟可分為三個部分,包含Netplan的YAML文件配置、設置網路連線的優先權和以硬體層級重啟無線網卡晶片,說明如下:

1.樹莓派 5的Netplan YAML文件路徑為 /etc/netplan/50-cloud-init.yaml。同時如上所述,採用NetworkManger作為渲染器來配置Netplan的YAML文件,透過在YAML中宣告 renderer: NetworkManager,並分別定義手機熱點(dhcp)與常駐環境wifi ssid (static IP)的配置。

network:
  version: 2
  renderer: NetworkManager
  ethernets:
    eth0:
      optional: true
      dhcp4: true
      dhcp6: true
  wifis:
    # --- mobile hotspot ---
    wlan0-hotspot:
      match:
        name: wlan0
      optional: true
      dhcp4: true
      dhcp6: false
      access-points:
        "HY CHOU":
          auth:
            key-management: "psk"
            password: "your psk password"
    # --- wifi ssid ---
    wlan0:
      optional: true
      dhcp4: false
      dhcp6: false
      regulatory-domain: "TW"
      addresses:
        - 192.168.0.xxx/24
      routes:
        - to: default
          via: 192.168.0.x
      nameservers:
        addresses:
          - 192.168.0.x
          - 8.8.8.8
          - 1.1.1.1
      access-points:
        "home8855-5":
          auth:
            key-management: "psk"
            password: "your psk password"
        "home8855-2.4":
          auth:
            key-management: "psk"
            password: "your psk password"


2.利用nmcli指令查詢網路連線名稱,並進一步定義這些網路連線的優先權,例如連線名稱為netplan-wlan0-hotspot-HY CHOU的手機熱點的優先權數值定義為15,高於常駐環境兩個wifi ssid的優先權數值10,數值越大,優先權越高。

nmcli connection show


sudo nmcli connection modify "netplan-wlan0-hotspot-HY CHOU " connection.autoconnect-priority 15

sudo nmcli connection modify "netplan-wlan0-home8855-2.4" connection.autoconnect-priority 10

sudo nmcli connection modify "netplan-wlan0-home8855-5" connection.autoconnect-priority 10


3.若不想讓樹莓派5重新開機,可以下列指令執行硬體層級重啟無線網卡晶片。

sudo ip link set wlan0 down && sudo ip link set wlan0 up


最後,可簡單藉由手機熱點和wifi ssid來測試其自動切換的效果,若一開始讓樹莓派連上手機熱點,當手機熱點關閉後,以Ubuntu server 24.04 LTS的樹莓派5實測結果,大約10秒內可完成切換到wifi ssid,供參考。

沒有留言:

張貼留言