7. clash-x:更现代的跨平台梯子桌面客户端

1 前言

Clash X 是基于 Clash Verge Rev 二次开发的 Mihomo 桌面客户端。

我没有重新做一套代理内核,而是保留上游成熟的基础能力,把主要精力放在 UI、交互,以及几个我自己每天比较在意的功能上。

image.png

2 为什么会有 Clash X?

我一直在用 Clash Verge Rev。

但用久之后发现,自己每天真正会碰到的事情其实并不多:

  • 开关系统代理;
  • 选择一条好用的节点;
  • 偶尔换一下订阅;
  • 修改自己的分流规则;
  • 看看最近的流量到底去了哪里。

问题是,这几个最常用的操作,并没有一直让我觉得特别顺手。

首先是原版UI界面,绝对说不上好看,只能说能用。

其次是节点选择。

我通常已经有几条自己比较认可的线路,并不希望客户端从几十甚至上百个节点里替我随机选择。

我更希望自己决定哪些节点值得使用,然后让程序负责判断什么时候应该切换。

换订阅也是类似的问题。

订阅是不断变化的,但自己的分流习惯通常不会跟着变化。我不希望每换一个订阅,就重新处理一遍自己的规则。

所以最后干脆基于 Clash Verge Rev 做了一个自己的版本。

它就是 Clash X

3 Clash X 和 Clash Verge Rev

Clash X 基于 Clash Verge Rev 二次开发。

底层代理能力继续使用 Mihomo,整体技术基础也继承自上游。Clash X 并不是重新实现一个代理内核,而是把主要改动集中在客户端本身。

目前主要变化有两部分:

第一是 UI 和交互。

界面基本重新设计,希望把日常最常用的操作放到更直接的位置。

第二是一些我自己比较常用的功能。

目前主要包括:

  • 自选节点的智能切换;
  • 独立于订阅的全局规则;
  • 按域名统计代理 / 直连流量。

同时,也主动减少了一些自己很少使用的高级功能。

简单来说:底层还是熟悉的东西,但我把驾驶舱重新做了一遍。

4 我比较在意的几个功能

4.1 智能切换

这是 Clash X 里我自己使用频率比较高的功能。

传统的 URL-Test / Fallback 之类的节点组,可以自动测速和切换,但对我的使用习惯来说,往往候选范围太大。

我通常会先挑出几条自己认可的、长期较为稳定的线路。

Clash X 的智能切换逻辑比较简单:

  1. 自己选择一组节点作为候选;
  2. 按设定的时间间隔进行测速;
  3. 只有当其它节点的延迟优势超过设定阈值时才切换;
  4. 当前被智能切换接管的节点会在界面中明确显示。

还有一点比较重要:智能切换的调度运行在 Rust 后端

所以即使关闭主窗口,后台任务仍然可以继续工作。

我更希望它是一个不需要经常干预的功能:平时不用管,网络状态发生明显变化时,它自己处理。

智能切换

4.2 全局规则

我使用多个订阅时,经常会遇到一个很实际的问题:

订阅会换,但自己的规则基本不会换。

比如哪些域名走代理、哪些域名直连,这些通常是自己的长期习惯,而不是某一个订阅特有的配置。

所以 Clash X 把规则独立出来。

你可以维护一套自己的全局规则,不需要在每个 Profile 里重复配置。

规则页面也可以按照:

  • 全局;
  • 当前订阅;
  • 全部;

进行查看和管理。

这样换订阅的时候,节点和订阅配置可以变化,但自己的分流策略仍然保持不变。

全局规则

4.3 域名流量统计

另一个比较简单的需求是:

我想知道自己的流量到底花在哪里。

单纯看到“今天下载了 20 GB、上传了 2 GB”,其实并不能告诉我太多东西。

我更关心的是:

  • 哪些网站消耗了最多流量?
  • 哪些流量走了代理?
  • 哪些其实是直连?
  • 最近一周、一个月有没有明显异常?

因此 Clash X 没有把重点放在一个复杂的连接监控大盘上,而是直接按照域名进行汇总。

目前可以查看:

  • 代理流量 / 直连流量;
  • 上传 / 下载;
  • 日 / 周 / 月 / 年;
  • 搜索;
  • 按日期清理;
  • 全部清空。

这样至少可以比较直观地回答一个问题: 最近的流量到底去哪了?

域名流量统计


5 UI重构

这部分其实没有什么复杂的技术目标。

我只是觉得一个每天都会打开的桌面软件,不应该一直保持一种“工程师后台”的感觉。

所以 Clash X 对界面做了比较彻底的重新设计:

  • 原生透明窗口;
  • 更简单的侧边导航;
  • 首页优先展示系统代理;
  • TUN / 增强模式放到高级设置;
  • 统一的设计 Token 和组件;
  • 深色 / 浅色主题;
  • 减少不常用功能对主界面的干扰。

目标也很简单:少一点仪表盘,多一点桌面应用。

打开之后,应该能比较快地知道自己现在处于什么状态,以及下一步该做什么。

6 移除功能

Clash X 并不是 Clash Verge Rev 的完整复制品。

有一些功能我自己使用频率比较低,所以暂时没有继续保留,例如:

  • 复杂的连接监控;
  • 深度日志查看;
  • 流媒体解锁检测;
  • 代理链;
  • 一些特殊协议 / 导入方式;
  • Merge / Script 增强面板;
  • WebDAV 自动备份;
  • 主题深度自定义;
  • 内置可视化 / Monaco 编辑器等。

这不是说这些功能没有价值。

只是对我自己的使用场景来说,它们并不是每天都会用到的东西。

我更希望一个客户端打开之后,常用的事情很容易找到,不常用的事情不要一直占据界面。

如果你依赖这些 Verge Rev 的高级能力,那么直接使用上游项目可能更合适。

7 Clash X 适合什么人?

如果你的使用习惯和我比较接近,它可能会比较适合你:

  • 想要一个简洁一些的 Clash / Mihomo 桌面客户端;
  • 有几条自己比较认可的节点,希望程序自动选择当前状态更好的节点;
  • 使用多个订阅,但希望自己的规则独立维护;
  • 想知道流量具体消耗在哪些域名;
  • 不太喜欢功能很多、但常用功能反而需要到处寻找的界面。

反过来,如果你非常依赖 Clash Verge Rev 的完整高级功能,那么没有必要为了换一个 UI 而迁移。

Clash Verge Rev 依然是一个很成熟的上游项目。

Clash X 更像是我基于它做的一套自己的使用方式。

8 最后

Clash X 最开始并不是想做一个新的 Clash 客户端。

只是我自己用着用着,发现有一些地方总觉得不太顺手,于是开始改一点,再改一点。

后来 UI 改得越来越多,智能切换、全局规则、流量统计这些功能也慢慢加了进来,最后就变成了现在这个项目。

所以它没有特别宏大的目标。

我只是希望自己每天打开它的时候:

界面简单一点,选节点省心一点,规则清楚一点,流量也能看明白一点。

如果你刚好也喜欢这样的使用方式,可以试试 Clash X。

感谢 Clash Verge Rev 以及 Mihomo 生态提供的基础工作。


本文可用于 GitHub、博客、掘金、知乎、少数派、即刻、X / Twitter、Telegram 等平台。转载时请保留项目名称、仓库链接与开源协议说明。