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

98 lines
5.6 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 (текущий узел 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`:
```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.