# ClashTui ![Demo](./assets/clashtui_demo.gif)
Table of Contents * [支持的平台](#支持的平台) * [适用人群](#适用人群) * [安装 Mihomo 服务 (启用 Tun 模式)](#安装-mihomo-服务-启用-tun-模式) * [Linux](#linux) * [Windows](#windows) * [安装 clashtui](#安装-clashtui) * [Linux](#linux-1) * [Windows](#windows-1) * [配置 `basic_clash_config.yaml`](#配置-basic_clash_configyaml) * [启动](#启动) * [Windows](#windows-2) * [便携模式](#便携模式) * [使用说明](#使用说明) * [导入链接](#导入链接) * [使用配置模板](#使用配置模板) * [高级使用](#高级使用) * [配置打开文件和目录的命令](#配置打开文件和目录的命令) * [自定义配置模板](#自定义配置模板) * [clashtui 的文件结构](#clashtui-的文件结构) * [项目免责声明](#项目免责声明)
## 支持的平台 - Windows - Linux ## 适用人群 - 对 clash 配置有一定了解。 - 喜欢 TUI 软件。 ## 安装 Mihomo 服务 (启用 Tun 模式) ### Linux 比如: [ArchLinux](https://aur.archlinux.org/packages/mihomo)。 ```sh # cat /etc/pacman.d/hooks/mihomo.hook (没有类似于 hook 的系统可能要手动 setcap 或者使用 mihomo@root 服务) [Trigger] Operation = Install Operation = Upgrade Type = Path Target = usr/bin/mihomo [Action] When = PostTransaction Exec = /usr/bin/setcap 'cap_net_admin,cap_net_bind_service=+ep' /usr/bin/mihomo # --- paru -S mihomo # systemctl edit mihomo [Service] # 删除原先的 ExecStart ExecStart= ExecStart=/usr/bin/mihomo -d /srv/mihomo -f /srv/mihomo/config.yaml # --- mkdir /srv/mihomo cd /srv/mihomo chown -R mihomo:mihomo /srv/mihomo usermod -a -G mihomo groups # 查看是否已经加入 mihomo group chmod g+w /srv/mihomo # clashtui 要有创建文件的权限。 chmod g+w /srv/mihomo/config.yaml # clashtui 要有写的权限。 systemctl enable mihomo # 开机启动 systemctl restart mihomo # 启动服务 ``` 建议先用一个可用的 mihomo 配置测试 mihomo 服务是否成功。检查是否缺少 [meta-rules-dat](https://github.com/MetaCubeX/meta-rules-dat) 文件。 ### Windows [安装 scoop](https://github.com/ScoopInstaller/Install) (可选): ```powershell irm get.scoop.sh -outfile 'install.ps1' .\install.ps1 -ScoopDir 'D:\Scoop' -ScoopGlobalDir 'D:\ScoopGlobal' -NoProxy # 我选择安装在 D 盘。 ``` 比如: - 通过 `scoop install mihomo` 安装 mihomo。或者, 下载一个适合自己系统的 [mihomo](https://github.com/MetaCubeX/mihomo/releases), 将其放在 `D:/PortableProgramFiles/mihomo/mihomo.exe`。 - 创建目录 `D:/MyAppData/mihomo` 和文件 `D:/MyAppData/mihomo/config.yaml` - 安装 clashtui 后, 再操作。 如果可以访问 mihomo 客户端 (比如: metacubexd) 而无法访问需要代理的网站, 则尝试允许 `mihomo.exe` 通过防火墙: - 通过 Scoop 安装的 mihomo: 允许 `D:\Scoop\apps\mihomo\1.17.0\mihomo.exe`, 而不是 current 路径的。之后 mihomo 升级版本之后, 可能还要继续这样的操作。 - 手动下载 mihomo 安装的: 允许 `D:/PortableProgramFiles/mihomo/mihomo.exe`。 ## 安装 clashtui ### Linux 比如: ArchLinux ```sh # 有最新的 [PKGBUILD](https://github.com/JohanChane/clashtui/blob/main/PKGBUILD)。 paru -S clashtui。 # 其他 linux 发行版, 手动下载, 将 clashtui 放在 PATH 即可。 clashtui # 先运行会在 ~/.config/clashtui 生成一些默认文件。 # nvim ~/.config/clashtui/config.toml [default] # 下面参数对应命令 -d -f clash_core_path = "mihomo" clash_cfg_dir = "/srv/mihomo" clash_cfg_path = "/srv/mihomo/config.yaml" clash_srv_name = "mihomo" # systemctl {restart | stop} # --- ``` 如果有 cargo 则可以使用 `cargo install clashtui` 安装 clashtui。 ### Windows 手动下载安装 clashtui, 或者通过 `scoop bucket add extras; scoop install clashtui` 安装。后续会将文件 [clashtui.json](./Scoop/clashtui.json) 加入scoop extras 仓库。如果没有加入 scoop extras, 你可以将 clashtui.json 文件添加到 `D:\Scoop\buckets\extras\bucket\clashtui.json`, 这样就可以使用 `scoop install clashtui` 了。 先运行 clashtui, 会在 `%APPDATA%/clashtui` 生成一些默认文件。 修改 `%APPDATA%/clashtui/config.toml`: ```toml [default] # 下面参数对应命令 -d -f #clash_core_path = "D:/PortableProgramFiles/mihomo/mihomo.exe" clash_core_path = "D:/Scoop/shims/mihomo.exe" # `Get-Command mihomo` clash_cfg_dir = "D:/MyAppData/mihomo" clash_cfg_path = "D:/MyAppData/mihomo/config.yaml" clash_srv_name = "mihomo" # nssm {install | remove | restart | stop | edit} ``` 改好之后, 将 clashtui, nssm 加入 PATH: - scoop 安装 clashtui 的: scoop install nssm - 手动下载安装 clashtui 的: 将 `D:/PortableProgramFiles/clashtui` 加入 PATH。 运行 clashtui。在 `ClashSrvCtl` Tab 选择 `InstallSrv`, 程序会根据上面的配置安装 `mihomo` 内核服务。该服务会开机启动。安装之后启动内核服务, 输入 `R` 即可。 ### 配置 `basic_clash_config.yaml` 自行配置 `{~/.config | %APPDATA%}/clashtui/basic_clash_config.yaml`。该文件的一些基础字段会合并到 `clash_cfg_path`。可以参考[这里](./App/basic_clash_config.yaml)配置 tun 模式。 ## 启动 ### Windows 选择其中一种方式: - 将 clashtui 这个命令加入 PATH。在终端或 `win + r` 或在文件资源管理器的地址栏输入 clashtui 启动。 - 双击 clashtui。 *clashtui 使用 [crossterm](https://docs.rs/crossterm/latest/crossterm/), [ratatui](https://github.com/ratatui-org/ratatui) 实现, Windows 最好使用 [Windows Terminal](https://github.com/microsoft/terminal)。在 Windows Terminal 中设置命令的启动方式使用 `Windows Terminal`, 则执行 clashtui 命令会自动使用 Windows Teminal 打开。* ## 便携模式 在 clashtui 程序所有的目录创建一个名为 `data` 的文件夹。则会将数据放在 `data` 内而不是 `~/.config/clashtui` 或 `%APPDATA%/clashtui`。 ## 使用说明 按 `?` 显示 help。 ### 导入链接 - 在 Profile 区域, 按 `i` 输入 Name (尽量不使用后缀) 和 Uri - 按 `U` 更新 Profile 的依赖的所有资源。默认使用自身代理更新, 如果开启 tun 模式或系统代理且没有可用节点的情况下, 先停止 mihomo 服务 (按 `S`), 再更新即可。 - 按 `Enter` 选择该 Profile。 - 在浏览器输入 `http://127.0.0.1:9090/ui`。 如果 Windows 平台无法打开 `http://127.0.0.1:9090/ui`: - 在 `ClashSrvCtl` 选择 `TestClashConfig` 检测配置语法是否正确和是否自动下载了 geo 文件。 - 按 `L` 查看日志。(`H` 打开 clashtui config dir。`G` 打开 clash config dir。查看相关的文件是否正确。) - 可以使用 `netstat -aon | findstr "9090"` 查看端口是否存在, 如果不存在可以换一个 compatible 版本的 mihomo。 - 如果可以打开, 但是无法访问需要代理的网站。可以允许 `mihomo` 通过防火墙。 支持导入文件配置。`Uri` 输入是文件路径即可。 ### 使用配置模板 - 按 `t` 切换到 Templates 区域。 - 选择 `template_proxy_providers`, 按 `e` 编辑, 输入订阅链接 (直接复制链接, 不用修改) 即可。 比如: ``` https://.... https://.... # 支持注释 #https://.... ``` - 按 `Enter` 生成配置到 `Profile`。按 `p` 切换回 Profile, `Enter` 选择该配置即可。 下载的 clashtui 一般会附带 templates。如果没有, 在[这里](https://github.com/JohanChane/clashtui/tree/main/App/templates)有最新的 templates。 ### 高级使用 #### 配置打开文件和目录的命令 在 `./data/config.toml` 中配置即可。`%s` 会自动替换为选择的文件的路径。 比如: Linux: ```toml [default] edit_cmd = "alacritty -e nvim %s" opendir_cmd = "alacritty -e ranger %s" ``` Windows: ``` [default] edit_cmd = "notepad %s" ``` #### 自定义配置模板 模板功能是 clashtui 独有的。具体使用规则参考提供例子模板。 定义重复使用的字段: ```yaml pp: &pp {interval: 3600, intehealth-check: {enable: true, url: https://www.gstatic.com/generate_204, interval: 300}} delay_test: &delay_test {url: https://www.gstatic.com/generate_204, interval: 300} ``` 为 `template_proxy_providers` 的每个链接生成一个 proxy-provider: ```yaml proxy-providers: provider: tpl_param: type: http # type 字段要放在此处, 不能放入 pp。原因是要用于更新资源。 <<: *pp ``` 为每个 proxy-providers 生成一个 `Select, Auto` proxy-group。 ```yaml proxy-groups: - name: "Select" tpl_param: providers: ["provider"] type: select - name: "Auto" tpl_param: providers: ["provider"] type: url-test <<: *delay_test ``` 使用 `Select, Auto` proxy-groups: ```yaml proxy-groups: - name: "Entry" type: select proxies: - -