1. 首頁
  2. 部落格
  3. Linux 部署 Clash:桌面用戶端安裝與 mihomo 命令列設定

Linux 部署 Clash:桌面用戶端安裝與 mihomo 命令列設定

介紹在 Linux 桌面環境安裝 Clash 用戶端,以及用 mihomo 核心以命令列方式執行代理的完整流程與開機自動啟動設定。

先選路線:圖形介面還是命令列

Linux 上執行 Clash 有兩條路線。第一條是桌面用戶端:Clash Verge Rev、FlClash 這類帶圖形介面的應用程式,訂閱匯入、節點切換、延遲測試、規則檢視都在視窗裡完成,適合日常使用的桌面系統。第二條是 mihomo 核心加命令列:mihomo 是 Clash Meta 核心的延續,開源免費,只包含代理核心,沒有介面,所有設定都寫在一份 YAML 檔案裡,適合伺服器、NAS、軟路由,也適合希望代理像系統服務一樣常駐的桌面用戶。

兩條路線互不衝突。同一台機器可以在家用用戶端以圖形操作,出門後由 systemd 拉起 mihomo 繼續服務。下表列出取捨依據,先想清楚再動手。

比較項目桌面用戶端mihomo 命令列
適用環境GNOME / KDE 等桌面伺服器、終端機、常駐服務
設定方式介面操作 + 訂閱連結手動編輯 config.yaml
開機自動啟動用戶端內建開關systemd 單元託管
資源占用核心 + 介面行程僅核心行程
管理面板自帶圖形面板外接 metacubexd 等 Web 面板

安裝桌面用戶端

打開本站下載中心的 Linux 分區,依發行版的套件格式挑選。Debian、Ubuntu、Deepin 系使用 .deb 套件;Fedora、openSUSE 系使用 .rpm 套件;不想安裝進系統就用 AppImage 單一檔案。Clash Verge Rev 提供 deb 與 rpm,FlClash 提供 deb,兩者都內建 mihomo 核心,裝完即可使用。

# Debian / Ubuntu 系
sudo dpkg -i clash-verge_*_amd64.deb
sudo apt -f install    # 依賴缺失時補裝

# Fedora / openSUSE 系
sudo dnf install ./clash-verge-*-1.x86_64.rpm

AppImage 依賴 FUSE 執行庫,Ubuntu 22.04 之後預設不附帶,需先補裝 libfuse2(24.04 的套件名稱是 libfuse2t64),Fedora 對應 fuse-libs;之後給檔案加上執行權限即可直接執行。

sudo apt install libfuse2
chmod +x FlClash-*-amd64.AppImage
./FlClash-*-amd64.AppImage

兩點注意。其一,架構務必選對:一般 PC 選 amd64(x86_64),樹莓派與 ARM 筆電選 arm64,選錯會直接無法啟動。其二,首次啟動後到訂閱頁貼上機場提供的 Clash 訂閱連結,更新出節點清單,再到代理頁選擇節點、在設定裡打開系統代理開關。需要全域接管時開啟 TUN 模式,用戶端會彈出核心授權提示,授權一次之後所有應用程式的流量都會走代理,無需逐一設定。

mihomo 命令列部署

命令列路線分三步:安裝核心、準備設定、手動驗證。跑通之後再交給 systemd 託管。

第一步:安裝核心

從本站下載中心或 mihomo 的 GitHub Releases 取得 Linux 版壓縮檔,檔名形如 mihomo-linux-amd64-v1.18.9.gz,以實際版本為準;較舊的 CPU 缺少 x86-64-v3 指令集時,改用檔名帶 compatible 的版本。解壓縮後放進系統 PATH:

gunzip mihomo-linux-amd64-v1.18.9.gz
chmod +x mihomo-linux-amd64-v1.18.9
sudo mv mihomo-linux-amd64-v1.18.9 /usr/local/bin/mihomo
mihomo -v    # 印出版本號即安裝成功

第二步:準備設定目錄

sudo mkdir -p /etc/mihomo
sudo curl -L -o /etc/mihomo/config.yaml "你的 Clash 訂閱連結"

多數機場直接提供 Clash 訂閱網址,拉取下來就是可用的 config.yaml;若機場只給通用訂閱,可先在桌面用戶端裡匯入再匯出設定,或改用訂閱轉換服務產生 Clash 格式。GeoIP 與 GeoSite 資料檔(geoip.metadb、geosite.dat 等)首次啟動時會自動下載到設定目錄,網路受限時可以從用戶端機器複製同名檔案過去。

config.yaml 裡有三個欄位與日常使用關係最大:

mixed-port: 7890                        # HTTP 與 SOCKS 混合入口
allow-lan: false                        # 是否允許區域網路裝置連入
external-controller: 127.0.0.1:9090     # 控制器位址,僅監聽本機
  • mixed-port:HTTP 與 SOCKS 的混合入口埠,系統代理就指向它。
  • allow-lan:是否允許區域網路其他裝置連入,單機使用時保持 false。
  • external-controller:外部控制器位址,面板類工具透過它管理核心。

注意

external-controller 不要綁定 0.0.0.0 後直接暴露到公網。確實需要遠端管理時,務必設定 secret 密語,並在前面套一層具備驗證機制的反向代理。

第三步:手動啟動驗證

mihomo -d /etc/mihomo

終端機印出 mixed inbound 監聽日誌後,另開一個終端機視窗驗證出口:

curl -x http://127.0.0.1:7890 https://api.ip.sb

回傳的出口 IP 與所選節點的地區一致,表示代理連線已經打通。按 Ctrl+C 結束行程,進入服務化設定。

用 systemd 註冊開機自動啟動

手動跑通之後,把 mihomo 交給 systemd 託管,換來開機自動啟動與崩潰自我修復。以 root 身分新建 /etc/systemd/system/mihomo.service:

[Unit]
Description=mihomo proxy daemon
After=network-online.target
Wants=network-online.target

[Service]
ExecStart=/usr/local/bin/mihomo -d /etc/mihomo
Restart=on-failure
RestartSec=5
LimitNOFILE=1048576

[Install]
WantedBy=multi-user.target

載入單元並啟用:

sudo systemctl daemon-reload
sudo systemctl enable --now mihomo
systemctl status mihomo     # 看到 active (running) 即成功
journalctl -u mihomo -f     # 即時追蹤核心日誌

status 輸出 active (running) 即代表服務正在運作;排查問題請先看 journalctl 的日誌輸出,錯誤訊息會直接指向出錯的那一行。

需要 TUN 全域接管時,先在 config.yaml 裡啟用 tun 區段:

tun:
  enable: true
  stack: mixed
  auto-route: true
  auto-detect-interface: true

再在 service 檔案的 [Service] 區段補兩行能力授權,讓核心取得建立虛擬網卡的權限:

AmbientCapabilities=CAP_NET_ADMIN CAP_NET_BIND_SERVICE
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_BIND_SERVICE

改完執行 systemctl daemon-reload 並 restart mihomo 生效。

訂閱更新同樣可以自動化:用 cron 每週定時重新拉取 config.yaml,再 systemctl restart mihomo;也可以呼叫控制器介面熱重新載入,免去重新啟動:

curl -X PUT "http://127.0.0.1:9090/configs?force=true" \
  -d '{"path": "/etc/mihomo/config.yaml"}'

桌面環境的代理指向設定

核心跑起來只是第一步,還要把系統流量導過去。GNOME 桌面:設定 → 網路 → 網路代理 → 手動,HTTP 與 HTTPS 主機填 127.0.0.1、埠 7890,SOCKS 主機同樣指向 127.0.0.1:7890。KDE 在系統設定的網路代理頁做相同設定。命令列等效寫法:

gsettings set org.gnome.system.proxy mode 'manual'
gsettings set org.gnome.system.proxy.http host '127.0.0.1'
gsettings set org.gnome.system.proxy.http port 7890

終端機裡臨時走代理,用環境變數更直接:

export http_proxy=http://127.0.0.1:7890
export https_proxy=http://127.0.0.1:7890
export all_proxy=socks5://127.0.0.1:7890

把這三行寫進 ~/.bashrc 可長期生效。已開啟 TUN 模式的機器上述步驟全省,流量在路由層就被接管,應用程式無需任何設定。

常見問題

AppImage 雙擊無反應,終端機執行報 FUSE 相關錯誤

系統缺少 FUSE 執行庫。Ubuntu 安裝 libfuse2(24.04 為 libfuse2t64),Fedora 安裝 fuse-libs;也可以給 AppImage 加 --appimage-extract 參數解包後執行。

開啟 TUN 模式提示權限不足

用戶端路線需在彈出視窗裡完成核心授權;命令列路線請確認 service 檔案裡加了 CAP_NET_ADMIN 能力授權,並以 root 或具備對應能力的使用者執行。

curl 測試回傳的仍是本機 IP

先確認 7890 埠正在監聽(ss -tlnp | grep 7890),再檢查規則模式:規則模式下目標網站可能命中 DIRECT 直連,可切全域模式重測,排除規則因素。

systemctl 啟動 mihomo 失敗

多數是 config.yaml 語法問題或資料檔缺失。執行 journalctl -u mihomo -n 50 檢視具體錯誤;注意 YAML 縮排必須使用空格,不能用 Tab。

區域網路其他裝置想共用這台機器的代理

把 config.yaml 裡 allow-lan 改為 true,確認防火牆放行 7890 埠,其他裝置把代理指向這台機器的內網 IP 即可。external-controller 仍保持本機監聽,不要一併開放。

小結:桌面用戶端解決「用起來」,mihomo 加 systemd 解決「一直在」。依本文順序走完,Linux 機器從開機那一刻起就有一條穩定的代理連線。用戶端與各平台核心都在下載中心依系統列好,按需取用即可。

下載 Clash 用戶端

全平台用戶端與核心依平台整理,版本號逐條列明。

下載Clash