chundev
日期:2026-03-25 環境:macOS Sequoia (Apple Silicon)
USB 網卡突然全部讀不到,重開機也沒用。排查 USB 控制器、驅動都正常,最後發現是 macOS 的 Network Location 被切到一個不包含 USB 網卡 service 的設定組。切回 Automatic 後立即恢復。Network Location 是一個容易被遺忘但影響範圍很大的功能 — 切錯了等於整組網路設定消失。
macOS 有一個叫 Network Location 的功能,可以儲存多組獨立的網路設定,讓你在不同環境(辦公室、家裡、外出)快速切換。每個 Location 擁有自己獨立的一組 Network Service,各自有不同的 IP、DNS、Proxy、Service Order 設定。
問題是:如果某個 Location 沒有包含你的 USB 網卡對應的 Network Service,切到那個 Location 後,網卡就會「消失」。
兩張 USB 網卡(Realtek 2.5G + ASIX AX88179A)同時消失:
$ ifconfig en11
media: autoselect (none)
status: inactive
$ ifconfig en9
media: autoselect (none)
status: inactive
$ system_profiler SPUSBDataType
(完全無輸出)
USB 控制器本身存在,但底下沒有任何子裝置:
$ ioreg -p IOUSB -w0 | grep '+-o'
+-o AppleT8132USBXHCI@00000000
+-o AppleT8132USBXHCI@01000000
+-o AppleT8132USBXHCI@02000000
| 嘗試 | 做法 | 結果 | 原因 |
|---|---|---|---|
| ❌ 重置 USB daemon | sudo killall -STOP -c usbd |
無效 | 問題不在 USB 層 |
| ❌ 重新開機 | 完整關機 → 開機 | 無效 | 重開機不會改變 Location 設定 |
| ❌ 物理拔插 | 拔掉所有 USB 裝置再插回 | 無效 | 硬體沒問題 |
| ✅ 切換 Network Location | networksetup -switchtolocation "Automatic" |
立即恢復 | 之前的 Location 沒有 USB 網卡的 service |
關鍵洞察: system_profiler SPUSBDataType 無輸出讓人以為是 USB 硬體問題,但實際上 ioreg -p IOUSB 可以看到 USB 控制器正常。問題出在更上層的網路設定。
Location(設定集合)
└── Network Service(如 "Wi-Fi"、"USB 2.5G LAN")
└── 綁定到 Hardware Port / Interface(如 en0、en11)
└── IP / DNS / Proxy 設定
每個 Location 有自己獨立的一組 Network Service。 Location A 裡有 Wi-Fi + USB Ethernet,不代表 Location B 也有。切換 Location 就是切換整組設定。
populate 參數,會是空的(沒有任何 service)# 列出所有 Location
networksetup -listlocations
# 查看目前使用的 Location
networksetup -getcurrentlocation
# 列出目前 Location 下的所有 Network Service
networksetup -listallnetworkservices
# 列出所有硬體 port(含 device name 和 MAC)
networksetup -listallhardwareports
# 建立新 Location(⚠️ 空的,沒有任何 service)
sudo networksetup -createlocation "CoffeShop"
# 建立新 Location 並自動填入當前偵測到的硬體(✅ 推薦)
sudo networksetup -createlocation "CoffeeShop" populate
# 切換 Location
sudo networksetup -switchtolocation "Automatic"
# 刪除 Location
sudo networksetup -deletelocation "CoffeeShop"
# 偵測新硬體並自動建立 service(插上 USB 網卡後執行)
sudo networksetup -detectnewhardware
# 手動建立 service
sudo networksetup -createnetworkservice "USB Ethernet" "USB 10/100/1000 LAN"
# 設定 service 優先順序(排前面的優先)
sudo networksetup -ordernetworkservices "USB 2.5G LAN" "Wi-Fi" "Thunderbolt Bridge"
# 啟用 / 停用 service
sudo networksetup -setnetworkserviceenabled "USB Ethernet" on
當有 2 個以上的 Location 時,Apple Menu(左上角 ) 會出現 Location 子選單,可直接切換。
⚠️ macOS Ventura 13.0 曾短暫移除 GUI,只能用 CLI。13.1 後已恢復。
# ❌ 這會建立一個空的 Location — 切過去等於斷網
sudo networksetup -createlocation "Test"
# ✅ 加 populate 才會包含所有現有硬體
sudo networksetup -createlocation "Test" populate
-createlocation ... populate 和 -detectnewhardware 只會偵測當下已連接的硬體。如果建立 Location 時 USB 網卡沒插上,那個 Location 就不會有對應的 service。
解法: 插上所有 USB 裝置後,在目標 Location 下執行:
sudo networksetup -detectnewhardware
# ❌ 找不到
networksetup -switchtolocation "office"
# ✅ 必須完全匹配
networksetup -switchtolocation "Office"
刪除目前正在使用的 Location 時,macOS 會自動切到另一個(通常是 Automatic)。不會造成問題,但要注意切換後的設定可能不同。
macOS 大版本升級有時會重設 Location 設定或移除某些 service。升級後建議檢查:
networksetup -getcurrentlocation
networksetup -listallnetworkservices
| 場景 | Location 設定 |
|---|---|
| 辦公室 | 固定 IP、公司 DNS、Proxy、USB Ethernet 優先 |
| 在家 | DHCP、公共 DNS、無 Proxy、Wi-Fi 優先 |
| 外出 | 只啟用 Wi-Fi、手機熱點 |
| 除錯用 | 建一個乾淨的 Location 來排除設定問題 |
# Step 1: 確認硬體有沒有被 macOS 看到
ioreg -p IOUSB -w0 | grep '+-o'
# 有列出 XHCI controller → 硬體 OK
# Step 2: 確認目前 Location
networksetup -getcurrentlocation
# Step 3: 確認該 Location 有沒有 USB 網卡的 service
networksetup -listallnetworkservices
networksetup -listallhardwareports
# Step 4: 如果 service 不在,切回 Automatic
sudo networksetup -switchtolocation "Automatic"
# Step 5: 如果需要在其他 Location 也能用,加入 service
sudo networksetup -switchtolocation "Office"
sudo networksetup -detectnewhardware
system_profiler SPUSBDataType 無輸出不一定是 USB 壞了 — ioreg -p IOUSB 是更底層的檢查方式populate — 否則是空的,切過去等於斷網populate 或 detectnewhardware 偵測到