Clash Verge — настольное приложение: без X или Wayland оно попросту не стартует. Само ядро при этом обычная консольная программа, и запуск его напрямую делает всё то же, что делает за вас настольная сборка.

Четыре шага до работающей службы

  1. Скачайте архив под свою архитектуру со страницы релиза mihomo (проверьте её командой uname -m), распакуйте, дайте права на выполнение и положите в /usr/local/bin/mihomo.
  2. Создайте рабочий каталог /etc/mihomo и положите конфиг как config.yaml. Файл с настольной машины подходит как есть: специфичные для клиента поля ядро просто игнорирует.
  3. Напишите юнит службы (ниже).
  4. systemctl daemon-reload && systemctl enable --now mihomo.
[Unit]
Description=mihomo daemon
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/usr/local/bin/mihomo -d /etc/mihomo
Restart=on-failure
RestartSec=3

[Install]
WantedBy=multi-user.target

Если нужен TUN, добавьте AmbientCapabilities=CAP_NET_ADMIN — это безопаснее, чем гонять всю службу от root.

Партнёрский материал Откуда взять ссылку на подписку? Партнёрский сервис даёт 1 ГБ высокоскоростного трафика Гонконга при регистрации — импорт в один клик. Получить быстрые серверы

Без окна лог — это всё

Запросы curl к API внешнего контроллера mihomo на порту 9097
Без интерфейса консолью становится API внешнего контроллера

journalctl -u mihomo -f показывает лог в реальном времени. При ошибке в конфиге ядро завершается и печатает конкретную строку — это нагляднее, чем искать причину в графическом интерфейсе. Служба не стартует — смотрите сюда первым делом, обычно ответ в одну строку.

Нужны подробности — временно поставьте log-level в debug, а потом верните info. Отладочный вывод очень объёмный и на маленьком диске быстро всё заполнит.

Как этим пользоваться и управлять

Консольным утилитам на той же машине нужны переменные окружения — как в статье прокси для терминала:

export https_proxy=http://127.0.0.1:7897
export http_proxy=http://127.0.0.1:7897

Если хотите управлять из панели, не привязывайте external-controller к 0.0.0.0. Оставьте 127.0.0.1:9097 и пробрасывайте порт по SSH, когда он нужен:

ssh -L 9097:127.0.0.1:9097 user@your-server

Дальше локальная панель подключается к 127.0.0.1:9097. Что умеет этот API — в статье про внешний контроллер.

external-controller: 0.0.0.0:9097 со слабым secret выкладывает управление ядром в интернет. Сканеры находят такое за считаные часы.

Автообновление подписки

Клиента нет, значит расписание берёт на себя cron: скачать подписку поверх текущего конфига и перезапустить службу. Перезапуск рвёт все активные соединения, поэтому ставьте задачу на время, когда машиной никто не пользуется, — обычно это четыре утра.

Перед подменой проверьте файл: mihomo -t -d /etc/mihomo разбирает конфиг и сообщает об ошибках. Перезаписывайте и перезапускайте только после успешной проверки, иначе одна кривая подписка загонит службу в цикл перезапусков. Если удобнее сначала настроить конфиг на десктопе и перенести, начните с инструкции по установке в Linux.