106 lines
6.1 KiB
Markdown
106 lines
6.1 KiB
Markdown
# 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`;
|
||
- полная скорость (`↓ 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 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.
|
||
|
||
## Лицензия
|
||
|
||
MIT — см. [LICENSE](LICENSE).
|