# sing-box Status — расширение для GNOME Shell Показывает статус прокси [sing-box](https://sing-box.sagernet.org/) в верхней панели GNOME, используя встроенный **Clash API**. ## Что показывает **В панели (компактно):** - монохромный индикатор-кружок с тремя состояниями (цвет берётся из цвета текста панели, поэтому индикатор одинаково читается на тёмной и светлой теме): - **залитый круг** — сервис работает и через активный outbound есть связь; - **сплошное кольцо** — сервис работает, но связи через outbound нет; - **пунктирное кольцо (тусклое)** — сервис (Clash API) недоступен. Различие «есть связь / нет связи» доступно только при включённой опции «Connectivity check» (см. ниже) — иначе кружок просто залит, когда 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 45–48. - sing-box с включённым `experimental_clash_api`: ```jsonc { "experimental": { "clash_api": { "external_controller": "127.0.0.1:9090", "secret": "ваш-секрет", "external_ui": "..." // опционально, для дашборда } } } ``` ## Установка (из исходников) ```sh 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.