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