Linux 下安装使用 Clash

安装使用 clash-for-linux,并注册为系统服务,设置开机自启动

一、环境说明及工具准备

1.1 系统环境说明

最近在看到 deepin 做的越来越好,没忍住装上了 deepin20.9 耍几天
系统信息:

1.2 工具准备

使用的是一个开源项目,人家很贴心的把 clash 和 ui 都整合了,然后还写好了启动脚本,并带有 clash 配置文件转换功能,非常棒!
项目地址:https://github.com/wanhebin/clash-for-linux

二、启动测试 clash

2.1 安装配置 clash-for-linux

  1. 先克隆项目到本地
1
git clone https://github.com/wanhebin/clash-for-linux.git
  1. 进入项目目录,编辑 .env 文件
1
2
cd clash-for-linux
vim .env
  1. .evn 文件配置说明
    打开文件一共有两项配置,一个是 clash 的订阅地址,还有一个是 ui 界面登录的密码,推荐都设置上
1
2
export CLASH_URL='xxx'
export CLASH_SECRET='chengge666'

2.2 启动测试

执行命令 sudo bash start.sh 会看到大概是下面输出,这里我把 start.sh 改了下,没有使用原来设置环境变量,然后使用命令启动的方式,那种方式后续开机会进不去桌面环境,所以直接把启动脚本那里环境变量设置部分注掉了,使用系统设置去设置代理,最终其实是一个意思

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
chengge@chengge:/mnt/sda4/develop/clash/clash-for-linux$ sudo bash start.sh
请验证人脸或密码:
验证成功

正在检测订阅地址...
Clash订阅地址可访问! [ OK ]

正在下载Clash配置文件...
配置文件config.yaml下载成功! [ OK ]

判断订阅内容是否符合clash配置文件标准:
解码后的内容不符合clash标准,尝试将其转换为标准格式
配置文件已成功转换成clash标准格式

正在启动Clash服务...
服务启动成功! [ OK ]

CPU架构信息: x86_64


Clash Dashboard 访问地址: http://<ip>:9090/ui
Secret: chengge666

2.3 开启系统代理

  • 第一种方式,是按照 clash-for-linux 的方式去设置
1
2
source /etc/profile.d/clash.sh
proxy_on
  • 第二种方式,直接在 deepin 系统设置中设置
    控制中心 -> 网络 -> 系统代理

2.4 验证

执行命令,出现以下结果证明 clash 启动成功,现在可以打开浏览器访问外网进行测试了

1
2
3
4
5
6
7
8
chengge@chengge:~$ netstat -tln | grep -E '9090|789.'
tcp6 0 0</div>7890</div>* LISTEN
tcp6 0 0</div>7891</div>* LISTEN
tcp6 0 0</div>7892</div>* LISTEN
tcp6 0 0</div>9090</div>* LISTEN
chengge@chengge:~$ env | grep -E 'http_proxy|https_proxy'
https_proxy=http://127.0.0.1:7890
http_proxy=http://127.0.0.1:7890

2.5 使用 clash ui 界面

  1. 访问:http://127.0.0.1:9090/ui/#/
  2. 配置完毕点击 Add
  1. Add 完毕后下方会多出一个条目,点击进入即可,这个界面看着也是挺不错的

三、将 clash 注册为系统服务,并设置开机自启动

3.1 clash 系统服务配置

  1. 创建 clash 服务配置文件
1
vim /etc/systemd/system/clash.service
  1. 写入以下内容
    主要修改的地方就是 [service] 节点下的脚本路径,配置为你的脚本执行绝对路径
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Unit]
Description=
Documentation=
After=network-online.target
Wants=
Requires=

[Service]
ExecStart=/bin/bash /mnt/sda4/develop/clash/clash-for-linux/start.sh
ExecStop=/bin/bash /mnt/sda4/develop/clash/clash-for-linux/shutdown.sh
ExecReload=/bin/bash /mnt/sda4/develop/clash/clash-for-linux/restart.sh
Type=forking

[Install]
WantedBy=multi-user.target

上面配置的几个关键点:

  1. [Unit] 的 After 配置,network-online.target 意思是在网络可以正常连接后执行服务
  2. [service] 的 Type 配置:forking 意思是 fork 出一个子进程去跑服务,父进程退出,子进程依然在运行

3.2 启动服务测试

  1. 执行服务启动命令:service clash start
  2. 查看服务启动状态:service clash status
1
2
3
4
5
6
7
8
9
10
chengge@chengge:~$ service clash status
● clash.service
Loaded: loaded (/etc/systemd/system/clash.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2023-05-28 17:16:35 CST; 21min ago
Process: 19535 ExecStart=/bin/bash /mnt/sda4/develop/clash/clash-for-linux/start.sh (code=exited, status=0/SUCCESS)
Main PID: 19601 (clash-linux-amd)
Tasks: 11 (limit: 18738)
Memory: 16.3M
CGroup: /system.slice/clash.service
└─19601 /mnt/sda4/develop/clash/clash-for-linux/bin/clash-linux-amd64 -d /mnt/sda4/develop/clash/clash-for-linu
  1. 停止服务:service clash stop
  2. 重启服务:service clash restart

3.3 设置开机自启动

执行命令:sudo systemctl enable clash
然后可以重启验证了~