目录

Clash on Linux

系列 - Use Clash Core
注意
此文仅适用于客户端, 不适用于服务器和路由器。
改名
Clash Meta 改名为 mihomo

参考 FAQ 下载 二进制文件, 解压后将其重命名为 mihomo

bash

chmod +x mihomo
sudo mv mihomo /usr/local/bin/

参考 Clash配置文件

bash

mkdir /etc/mihomo
sudo cp config.yaml /etc/mihomo/

下载 Yacd-meta 或者 MetaCubeXD, 解压后将文件夹重命名为 ui

bash

sudo cp -r ui /etc/mihomo/

后续一切工作正常后, 可以打开 Dashboard (http://127.0.0.1:9090/ui) 查看相应信息并进行管理。

参考 创建运行服务

bash

sudo vim /etc/systemd/system/mihomo.service

写入以下内容:

text

[Unit]
Description=mihomo service
Documentation=https://wiki.metacubex.one
After=network.target NetworkManager.service systemd-networkd.service

[Service]
Type=simple
LimitNPROC=500
LimitNOFILE=1000000
CapabilityBoundingSet=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE CAP_SYS_TIME CAP_SYS_PTRACE CAP_DAC_READ_SEARCH CAP_DAC_OVERRIDE
AmbientCapabilities=CAP_NET_ADMIN CAP_NET_RAW CAP_NET_BIND_SERVICE CAP_SYS_TIME CAP_SYS_PTRACE CAP_DAC_READ_SEARCH CAP_DAC_OVERRIDE
Restart=on-failure
RestartSec=10s
ExecStartPre=/usr/bin/sleep 1s
ExecStart=/usr/local/bin/mihomo -d /etc/mihomo
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

重载 systemd:

bash

sudo systemctl daemon-reload
完成了

现在可以运行 sudo systemctl start mihomo.service 测试一下整个流程, 应该一切正常。

现在可以打开 Dashboard (http://127.0.0.1:9090/ui) 查看相应信息并进行管理。

Chrome 会跟随 KDE 系统代理, Firefox 则不然。对于 KDE 系统代理和 Firefox 代理, 参考 开关系统和浏览器代理

参考 开关系统和浏览器代理, 将以下代码添加到 /etc/proxy-custom 中:

bash

function mihomo-restart {
    dir_config="/etc/mihomo"
    service="mihomo.service"
    sudo systemctl restart $service
    sleep 3
    sub_state=$(systemctl show -p SubState --value $service)
    if [ $sub_state == "running" ]; then
        echo -e "$service state: ${green}$sub_state${reset}."
        secret=$(grep secret $dir_config/config.yaml | cut -d ' ' -f 2)
        controller_api=$(grep external-controller $dir_config/config.yaml | cut -d ' ' -f 2)
        response=$(curl -s -H "Authorization: Bearer ${secret}" -H "Content-Type: application/json" -X GET "http://${controller_api}/configs")
        tun_state=$(echo "$response" | jq -r '.tun.enable')
        if [ "$tun_state" == "true" ]; then
            echo -e "Tun ${green}enabled${reset}."
            echo -e "Use ${blue}tun${reset} mode."
            kde-proxy-off
            # ff-proxy-off
        else
            echo -e "Tun ${red}disabled${reset}."
            echo -e "Use ${blue}system proxy${reset} mode."
            kde-proxy-on
            # ff-proxy-on
        fi
    else
        echo -e "$service state: ${red}$sub_state${reset}."
    fi
}

将以下代码追加到 /etc/proxy-custom 中:

bash

function mihomo-stop {
    service="mihomo.service"
    sudo systemctl stop $service
    sleep 1
    sub_state=$(systemctl show -p SubState --value $service)
    echo -e "$service state: ${red}$sub_state${reset}."
}

将以下代码追加到 /etc/proxy-custom 中:

bash

function mihomo-switch {
    dir_config="/etc/mihomo"
    service="mihomo.service"
    sub_state=$(systemctl show -p SubState --value $service)
    if [ $sub_state != "running" ]; then
        echo -e "$service state: ${red}$sub_state${reset}."
        sudo systemctl restart $service
        sleep 3
        sub_state=$(systemctl show -p SubState --value $service)
        if [ $sub_state != "running" ]; then
            echo -e "$service state: ${red}$sub_state${reset}."
            exit 1
        fi
    fi
    if [ $sub_state == "running" ]; then
        echo -e "$service state: ${green}$sub_state${reset}."
        secret=$(grep secret $dir_config/config.yaml | cut -d ' ' -f 2)
        controller_api=$(grep external-controller $dir_config/config.yaml | cut -d ' ' -f 2)
        response=$(curl -s -H "Authorization: Bearer ${secret}" -H "Content-Type: application/json" -X GET "http://${controller_api}/configs")
        tun_state=$(echo "$response" | jq -r '.tun.enable')
        if [ "$tun_state" == "true" ]; then
            curl -H "Authorization: Bearer ${secret}" -H "Content-Type: application/json" -X PATCH -d '{"tun":{"enable":false}}' "http://${controller_api}/configs"
            echo -e "Tun ${red}disabled${reset}."
            echo -e "Use ${blue}system proxy${reset} mode."
            kde-proxy-on
            # ff-proxy-on
        else
            curl -H "Authorization: Bearer ${secret}" -H "Content-Type: application/json" -X PATCH -d '{"tun":{"enable":true}}' "http://${controller_api}/configs"
            echo -e "Tun ${green}enabled${reset}."
            echo -e "Use ${blue}tun${reset} mode."
            kde-proxy-off
            # ff-proxy-off
        fi
    fi
}

查看日志:

bash

sudo journalctl -u mihomo.service -o cat -e

查看实时日志:

bash

sudo journalctl -u mihomo.service -o cat -f