Files
sing-box-gnome-extension/README.md
T

4.4 KiB
Raw Blame History

sing-box Status — расширение для GNOME Shell

Показывает статус прокси sing-box в верхней панели GNOME, используя встроенный Clash API.

Что показывает

В панели (компактно):

  • монохромный индикатор-кружок — залит, когда API доступен и прокси жив; полый (тускнее), когда API недоступен. Цвет берётся из цвета текста панели, поэтому индикатор одинаково читается на тёмной и светлой теме;
  • имя активного outbound (текущий узел Selector-группы);
  • текущую скорость, например ↓2.4M ↑120k.

В выпадающем меню (подробности):

  • sing-box · Active / Unreachable;
  • полная скорость (↓ 2.4 MB/s ↑ 120 KB/s);
  • каждая Selector-группа отдельным подменю — выбор узла переключает активный outbound (текущий помечен точкой, рядом — последняя измеренная задержка, если она есть). Пункт Test latency в подменю запускает ручной замер задержки всех узлов группы и обновляет значения на месте (меню при этом не закрывается);
  • число активных соединений с разбивкой по outbound;
  • Open dashboard (MetaCubeXD или ваш дашборд Clash) и Settings.

Требования

  • GNOME Shell 4548.
  • sing-box с включённым experimental_clash_api:
{
  "experimental": {
    "clash_api": {
      "external_controller": "127.0.0.1:9090",
      "secret": "ваш-секрет",
      "external_ui": "..."        // опционально, для дашборда
    }
  }
}

Установка (из исходников)

UUID="sing-box-status@git.vakhrushev.me"
ln -s "$PWD" "$HOME/.local/share/gnome-shell/extensions/$UUID"
glib-compile-schemas schemas/
# На Wayland: выйдите из сессии и войдите снова, чтобы shell зарегистрировал
# новое расширение, затем:
gnome-extensions enable "$UUID"

Откройте Settings из меню (или gnome-extensions prefs "$UUID") и задайте:

  • API URL — например http://127.0.0.1:9090 (ваш external_controller);
  • Secret — ваш clash_api.secret;
  • Dashboard URL — например http://127.0.0.1:9091.

Как это работает

Каждые N секунд (по умолчанию 2) расширение опрашивает две точки Clash API:

  • GET /connections — накопительные downloadTotal / uploadTotal (скорость — их приращение за интервал) и список активных соединений с цепочками outbound;
  • GET /proxies — Selector-группы, их текущий узел и история задержек по узлам.

Переключение outbound выполняется запросом PUT /proxies/{group} с телом {"name": "..."}. По умолчанию расширение не шлёт активных замеров задержки — показываются только те, что sing-box измерил сам. Ручной замер (пункт Test latency) выполняется через GET /proxies/{name}/delay только по нажатию.

Сетевой слой (авторизация, разбор ответов, переключение outbound) проверен на живом API sing-box 1.13.13.

Файлы

  • extension.js — точка входа, добавляет кнопку в панель.
  • lib/indicator.js — виджет панели, меню, цикл опроса, отрисовка.
  • lib/clashApi.js — асинхронный клиент Clash API на libsoup 3.
  • lib/format.js — форматирование байтов и скорости.
  • prefs.js — настройки на Adwaita.
  • schemas/ — схема GSettings.