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

112 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# sing-box Status — расширение для GNOME Shell
Показывает статус прокси [sing-box](https://sing-box.sagernet.org/) в верхней панели
GNOME, используя встроенный **Clash API**.
## Что показывает
**В панели (компактно):**
- монохромный индикатор-кружок (цвет берётся из цвета текста панели, поэтому
индикатор одинаково читается на тёмной и светлой теме):
- **яркий залитый круг** — сервис работает и через активный outbound есть связь;
- **тусклый залитый круг** — сервис работает, связь ещё проверяется;
- **яркое сплошное кольцо** — сервис работает, но связи через outbound нет;
- **пунктирное тусклое кольцо** — сервис (Clash API) недоступен / подключение.
Различие «есть связь / нет связи / проверяется» доступно только при включённой
опции «Connectivity check» (см. ниже) — иначе кружок просто залит, когда API
отвечает, и пунктирный, когда нет. Связь измеряется только для узла группы,
показанной в панели; реальный трафик может идти по другим правилам и группам —
см. разбивку соединений в меню;
- имя активного outbound (текущий узел группы);
- текущую скорость, например `↓2.4M ↑120K`.
**В выпадающем меню (подробности):**
- строка статуса: `sing-box · Active` / `Unreachable`, а при включённой проверке
связности также `Active (checking…)` (связь проверяется) и `No connectivity`
(связи через outbound нет);
- полная скорость (`↓ 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`:
```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` — точка входа, добавляет кнопку в панель.
- `metadata.json` — метаданные расширения (UUID, версии GNOME Shell).
- `lib/indicator.js` — виджет панели, меню, цикл опроса, отрисовка.
- `lib/clashApi.js` — асинхронный клиент Clash API на libsoup 3.
- `lib/format.js` — форматирование байтов и скорости.
- `prefs.js` — настройки на Adwaita.
- `stylesheet.css` — стили индикатора и меню.
- `schemas/` — схема GSettings.
## Лицензия
MIT — см. [LICENSE](LICENSE).