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 机器从开机那一刻起就有一条稳定的代理链路。客户端与各平台内核都在下载中心按系统列好,按需取用即可。