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

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

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

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

  • монохромный индикатор-кружок (цвет берётся из цвета текста панели, поэтому индикатор одинаково читается на тёмной и светлой теме):

    • залитый круг — сервис работает и через активный outbound есть связь;
    • яркое сплошное кольцо — сервис работает, но связи через outbound нет;
    • тусклое сплошное кольцо — сервис работает, связь ещё проверяется;
    • пунктирное тусклое кольцо — сервис (Clash API) недоступен / подключение.

    Различие «есть связь / нет связи / проверяется» доступно только при включённой опции «Connectivity check» (см. ниже) — иначе кружок просто залит, когда API отвечает, и пунктирный, когда нет;

  • имя активного outbound (текущий узел группы);

  • текущую скорость, например ↓2.4M ↑120k.

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

  • sing-box · Active / Unreachable;
  • полная скорость (↓ 2.4 MB/s ↑ 120 KB/s);
  • каждая группа outbound'ов отдельным подменю. Selector-группы переключаемы — выбор узла меняет активный outbound; URLTest/Fallback-группы показываются только для просмотра (узел выбирает сам sing-box). Текущий узел помечен точкой, рядом — последняя измеренная задержка, если она есть. Пункт Test latency в подменю запускает ручной замер задержки всех узлов группы по адресу connectivity-url и обновляет значения на месте (меню при этом не закрывается);
  • число активных соединений с разбивкой по 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 только по нажатию.

Проверка связности (опция). Если включить check-connectivity в настройках, расширение раз в connectivity-interval секунд (по умолчанию 30) делает GET /proxies/{активный-узел}/delay по адресу connectivity-url (по умолчанию https://www.gstatic.com/generate_204). Успех → кружок залит и в меню показывается задержка (Active · N ms); ошибка/таймаут → сплошное кольцо и No connectivity. Это единственный режим, когда расширение шлёт трафик в фоне; по умолчанию он выключен.

Сетевой слой (авторизация, разбор ответов, переключение 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.

Лицензия

MIT — см. LICENSE.

S
Description
No description provided
Readme MIT
110 KiB
Languages
JavaScript 98.2%
CSS 1.8%