Clash Linux 版怎么装:桌面客户端与纯命令行内核两条部署路线

Linux 下用 Clash 有两条路:装带界面的桌面客户端,或直接跑内核加 systemd 守护。本文按发行版给出安装步骤、配置文件位置与开机自启设置,并说明两种方案各自适合谁。

先选路线:桌面客户端还是 Mihomo 命令行内核

Linux 上并不存在一个适合所有场景的统一安装方式。日常使用 Ubuntu、Fedora、Linux Mint 或 Arch 桌面的用户,通常更需要订阅管理、策略组切换、日志查看和系统代理开关;服务器、软路由旁路环境、无显示器主机则更重视资源占用、远程维护与开机自启。两类需求对应桌面客户端和纯内核两条路线。

对比项 桌面客户端 Mihomo 命令行内核
适合设备 Ubuntu、Fedora、Mint、Arch 桌面 服务器、开发机、NAS、无桌面环境主机
订阅导入 在图形界面粘贴 URL 并更新 自行准备或定时更新 config.yaml
策略切换 直接点击策略组与节点 通过外部控制器 API 或 Web 面板操作
后台运行 登录桌面后自启动 由 systemd 在系统启动时拉起
典型内存占用 界面与内核合计常见约 140~320 MB 普通规则配置常见约 35~110 MB
TUN 权限 通常由服务模式或授权组件处理 需要 CAP_NET_ADMIN 等权限

安装前先确认 CPU 架构

下载错误架构的软件包会直接出现“无法执行二进制文件”或 Exec format error。先在终端执行下面的命令:

uname -m
cat /etc/os-release

发行版信息决定软件包格式:Ubuntu、Debian、Linux Mint 优先选 .deb;Fedora、RHEL 系发行版优先选 .rpm;其他桌面发行版可以使用 AppImage。服务器部署内核时,直接使用与架构对应的可执行文件即可。

路线一:安装 Linux 桌面客户端

桌面路线建议选择内置 Mihomo 内核、仍在维护并提供 Linux 构建的客户端。安装包名称可能带有 amd64、x86_64、arm64 或 aarch64 标记,先按前面的 uname -m 结果匹配。不要把 macOS 的 ClashX 安装包复制到 Linux,两者的程序格式和系统接口并不兼容。

Ubuntu、Debian 与 Linux Mint 安装 DEB

假设安装包已下载到“下载”目录,先进入目录,再让 APT 安装本地包。使用 APT 而不是只运行 dpkg -i,可以同时处理包声明的依赖关系。

cd ~/下载
sudo apt install ./Clash-Linux-amd64.deb

英文目录环境通常使用 cd ~/Downloads。文件名应替换为实际下载到本机的完整名称,输入前几个字符后按 Tab 可以自动补全。安装完成后,可从应用菜单启动;也可以运行 dpkg -l | grep -i clash 查看包是否已经登记。

Fedora、RHEL 系发行版安装 RPM

cd ~/Downloads
sudo dnf install ./Clash-Linux-x86_64.rpm

dnf install 会读取 RPM 的依赖信息。若系统启用了较严格的桌面安全策略,首次开启 TUN 或服务模式时可能出现管理员授权窗口;这属于创建虚拟网卡、修改路由所需的权限步骤,不应反复取消。

AppImage 的运行与固定

AppImage 不需要写入发行版的软件包数据库,但文件必须具有执行权限。下面以下载目录中的文件为例:

cd ~/Downloads
chmod +x Clash-Linux-x86_64.AppImage
./Clash-Linux-x86_64.AppImage

如果系统提示 FUSE 相关错误,应通过当前发行版的软件仓库安装兼容的 FUSE 运行组件;也可以先用 --appimage-extract-and-run 验证程序能否启动。长期使用时,建议将 AppImage 移至 ~/Applications,避免清理下载目录时误删。

导入订阅并完成第一次连接

  1. 打开客户端的「订阅」页面,选择「新建」或「从 URL 导入」。部分客户端对应路径为「订阅」→「新建」→「URL」。
  2. 粘贴服务提供方给出的订阅地址,确认后执行一次更新。
  3. 进入「代理」或「策略」页面,在主要策略组中选择节点,也可以选择 URL 测速组。
  4. 打开「系统代理」,再访问测试页面或使用命令检查出口地址。
  5. 需要接管不读取系统代理的软件时,再配置 TUN 模式,不必在首次启动时同时改变全部网络设置。
curl -I --proxy http://127.0.0.1:7890 https://example.com
curl -I --proxy socks5h://127.0.0.1:7890 https://example.com

第一条命令验证 HTTP 代理,第二条使用 SOCKS5 并让域名解析交给代理端。端口必须以客户端的实际设置为准:常见混合端口是 7890,但有些配置会把 HTTP 与 SOCKS 分别放在 78907891。检查路径通常是「设置」→「参数设置」→「端口设置」。

路线二:安装 Mihomo 命令行内核

Mihomo 是延续 Clash 配置体系的开源内核,支持规则分流、策略组、规则集、DNS 与 TUN。命令行部署不包含订阅列表和托盘菜单,核心工作是准备可执行文件、放置 config.yaml,然后交给 systemd 管理。

安装二进制文件与专用账户

以下命令以已经下载并解压出的 mihomo-linux-amd64-v1.19.12 为示例。版本号只用于说明文件命名方式,实际部署应选择下载页提供的当前版本和正确架构。

sudo install -Dm755 mihomo-linux-amd64-v1.19.12 /usr/local/bin/mihomo
sudo useradd --system --home-dir /var/lib/mihomo --create-home --shell /usr/sbin/nologin mihomo
sudo install -d -o mihomo -g mihomo -m 750 /var/lib/mihomo
/usr/local/bin/mihomo -v

若发行版没有 /usr/sbin/nologin,可先执行 command -v nologin 查找实际路径。使用独立系统账户可以把运行目录和普通用户家目录分开,也便于 systemd 精确授予网络能力。

准备最小可运行配置

将订阅转换或导出的完整 Clash/Mihomo 配置保存为 /var/lib/mihomo/config.yaml。下面的片段展示端口、控制器、DNS 与规则的基本结构,但其中没有代理节点,只能用于检查内核启动和直连链路。

mixed-port: 7890
allow-lan: false
mode: rule
log-level: info
ipv6: true

external-controller: 127.0.0.1:9090
secret: "change-this-controller-secret"

dns:
  enable: true
  listen: 127.0.0.1:1053
  ipv6: true
  enhanced-mode: fake-ip
  nameserver:
    - 1.1.1.1
    - 8.8.8.8

proxies: []

rules:
  - MATCH,DIRECT

mixed-port: 7890 同时接受 HTTP 和 SOCKS 连接;external-controller 是控制接口,不是代理端口。控制接口只监听 127.0.0.1,可避免直接暴露给局域网。实际配置中应设置独立的高强度 secret,远程管理时优先通过 SSH 端口转发访问。

复制配置后修正所有者并执行语法测试。YAML 对缩进敏感,列表项通常比父级多两个空格,Tab 字符不适合作为缩进。

sudo chown mihomo:mihomo /var/lib/mihomo/config.yaml
sudo chmod 640 /var/lib/mihomo/config.yaml
sudo -u mihomo /usr/local/bin/mihomo -t -d /var/lib/mihomo

测试成功时会完成配置解析;如果出现 yamlmappingunmarshal 报错,应回到提示行附近检查缩进、冒号和字段类型。订阅返回网页、登录提示或 Base64 节点列表时,也不能直接当作完整的 config.yaml 使用。

用 systemd 设置后台运行与开机自启

直接在 SSH 会话里运行 Mihomo,关闭终端后进程可能退出。systemd 可以统一处理启动顺序、异常重启、日志读取和开机自启。创建 /etc/systemd/system/mihomo.service,内容如下:

[Unit]
Description=Mihomo Proxy Service
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=mihomo
Group=mihomo
WorkingDirectory=/var/lib/mihomo
ExecStartPre=/usr/local/bin/mihomo -t -d /var/lib/mihomo
ExecStart=/usr/local/bin/mihomo -d /var/lib/mihomo
Restart=on-failure
RestartSec=5
LimitNOFILE=1048576
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_RAW
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
ReadWritePaths=/var/lib/mihomo

[Install]
WantedBy=multi-user.target

ExecStartPre 会在每次启动前测试配置,错误配置不会替换当前正在工作的进程。Restart=on-failure 只在异常退出时重启,间隔为 5 秒。CAP_NET_ADMINCAP_NET_RAW 用于 TUN 和相关网络操作;如果确定只开放本地 HTTP/SOCKS 端口、不使用 TUN,可以移除两行 capability 配置,进一步缩小权限范围。

sudo systemctl daemon-reload
sudo systemctl enable --now mihomo
systemctl status mihomo --no-pager
journalctl -u mihomo -n 80 --no-pager

看到 active (running) 说明服务正在运行。修改 YAML 后,先执行测试命令,再运行 sudo systemctl restart mihomo。持续观察日志可使用 journalctl -u mihomo -f,按 Ctrl+C 只会退出日志查看,不会停止服务。

验证端口是否真正监听

ss -lntp | grep -E '7890|9090'
curl -I --proxy http://127.0.0.1:7890 https://example.com

若 systemd 显示运行但 7890 没有监听,重点检查配置是否把端口改成其他值、进程是否因加载规则集失败而退出。若端口存在但请求超时,应继续查看策略组选择、节点连通性、DNS 日志和服务器防火墙,而不是重复安装二进制文件。

TUN 模式、系统代理与终端环境变量怎么选

桌面日常使用:先开系统代理

系统代理改动较少,适合浏览器、桌面聊天工具和遵循 GNOME、KDE 代理设置的应用。客户端常见操作路径为「设置」→「系统代理」→「启用」。如果只需要日常网页访问与开发文档查询,先使用系统代理更容易定位问题。

终端工具:按进程设置代理变量

许多命令行程序读取 HTTP_PROXYHTTPS_PROXYALL_PROXY。临时设置只影响当前终端会话,关闭终端后自动失效:

export HTTP_PROXY=http://127.0.0.1:7890
export HTTPS_PROXY=http://127.0.0.1:7890
export ALL_PROXY=socks5h://127.0.0.1:7890

curl -I https://example.com

恢复直连可执行:

unset HTTP_PROXY HTTPS_PROXY ALL_PROXY
unset http_proxy https_proxy all_proxy

Git 也可以独立配置,不必永久影响全部终端程序:

git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890

git config --global --unset http.proxy
git config --global --unset https.proxy

容器、游戏与不读取代理设置的程序:再考虑 TUN

TUN 模式创建虚拟网卡,并通过路由把更多流量送入 Mihomo。它能覆盖不支持 HTTP/SOCKS 代理的程序,但也会引入 DNS、路由优先级、局域网访问和权限问题。服务器远程部署前应保留第二个 SSH 会话,避免错误路由切断当前管理连接。

tun:
  enable: true
  stack: mixed
  auto-route: true
  auto-redirect: true
  auto-detect-interface: true
  dns-hijack:
    - any:53

auto-detect-interface 用于识别默认出口网卡;auto-route 添加接管路由;dns-hijack 将指定 DNS 流量交给内核处理。不同内核版本和操作系统网络栈支持项存在差异,启用前应先执行 mihomo -t。Docker、Podman、虚拟机网桥或策略路由环境还需要检查保留网段,防止容器网段被错误送入代理。

配置文件、订阅更新与日志维护

桌面客户端的配置位置

桌面客户端通常把配置放在用户数据目录,而不是 /etc。Linux 常见位置包括 ~/.config/应用目录~/.local/share/应用目录,Flatpak 应用则多位于 ~/.var/app/应用标识。不要在客户端运行时直接批量覆盖整个目录,优先使用界面里的导入、更新和备份功能。

查找最近修改的 YAML 文件可以运行:

find ~/.config ~/.local/share -type f \
  \( -name '*.yaml' -o -name '*.yml' \) \
  -mtime -7 2>/dev/null

命令行部署的订阅更新

命令行内核不会替用户判断订阅格式。稳妥流程是先把新配置下载到临时文件,运行语法测试,成功后再替换正式配置并重启。不要直接覆盖正在使用的文件,否则一次不完整下载就可能让服务无法再次启动。

  1. 将新内容保存为临时 YAML 文件。
  2. 检查响应内容确实是 Clash/Mihomo 配置,而不是 HTML 错误页。
  3. 在独立临时目录执行 mihomo -t
  4. 测试成功后移动到 /var/lib/mihomo/config.yaml
  5. 修正文件所有者,并重启 systemd 服务。

如果配置使用 proxy-providers,Mihomo 可以按照配置中的 interval 定时刷新 provider。常见的 interval: 86400 表示每 86400 秒更新一次,也就是 24 小时。健康检查的 interval: 300 则表示每 5 分钟检测一次,两者用途不同,不宜为了“更新更快”同时设成很小的数值。

日志级别与磁盘占用

日常运行建议使用 log-level: info;排查 DNS、规则匹配和连接失败时短暂切换为 debug,问题确认后再恢复。systemd 日志由 journald 管理,可用以下命令查看服务占用:

journalctl --disk-usage
journalctl -u mihomo --since "30 minutes ago"
journalctl -u mihomo -p warning --since today

日志中的 connection refused 通常表示目标地址可达但端口没有服务;i/o timeout 更接近网络路径或节点响应超时;no such hostDNS resolve failed 应先检查 DNS 上游、劫持配置和 IPv6 可用性。先区分错误发生在本地监听、DNS、节点连接还是目标站点,排查会比反复切换节点更有效。

常见安装问题与对应检查顺序

启动时报 Exec format error

这几乎总是架构不匹配。重新执行 uname -m,再用 file /usr/local/bin/mihomo 查看二进制目标架构。x86_64 主机应使用 amd64 构建,aarch64 主机应使用 arm64 构建。

桌面客户端能打开,但系统代理没有效果

systemd 反复重启

systemctl status mihomo --no-pager
journalctl -u mihomo -b -n 120 --no-pager
sudo -u mihomo /usr/local/bin/mihomo -t -d /var/lib/mihomo

常见原因包括 YAML 缩进错误、端口被其他进程占用、运行账户无权读取配置、Geo 数据下载失败或 TUN 权限不足。端口冲突可用 sudo ss -lntp 查找;权限问题则检查 namei -l /var/lib/mihomo/config.yaml 输出的每一级目录权限。

局域网设备无法连接 Linux 主机的代理

默认的 allow-lan: false 只允许本机使用。如果确实要为受信任局域网设备提供代理,需要改为 allow-lan: true,设置明确的 bind-address,并在主机防火墙中仅允许局域网网段访问代理端口。外部控制器 9090 不应因为开放代理端口而一并暴露。

下载Clash