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

175 lines
9.4 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": "..." // опционально, для дашборда
}
}
}
```
## Установка
Полная последовательность после свежего `git clone` (в репозитории нет собранной
схемы — её нужно скомпилировать локально, шаг 3):
```sh
# 1. Клонировать репозиторий
git clone https://git.vakhrushev.me/av/sing-box-gnome-extension.git
cd sing-box-gnome-extension
# 2. Установить как пользовательское расширение. Симлинк на клон удобен тем, что
# обновления затем подтягиваются простым `git pull` (не удаляйте каталог клона).
UUID="sing-box-status@git.vakhrushev.me"
mkdir -p "$HOME/.local/share/gnome-shell/extensions"
ln -s "$PWD" "$HOME/.local/share/gnome-shell/extensions/$UUID"
# 3. Скомпилировать схему GSettings (обязательно: gschemas.compiled не хранится в git)
glib-compile-schemas schemas/
# 4. Перезапустить GNOME Shell, чтобы он увидел новое расширение:
# X11 — Alt+F2, ввести «r», Enter
# Wayland — выйти из сессии и войти снова (перезапуск на лету невозможен)
# 5. Включить расширение
gnome-extensions enable "$UUID"
```
Вместо симлинка можно скопировать файлы
(`cp -r . "$HOME/.local/share/gnome-shell/extensions/$UUID"`), но тогда каждое
обновление придётся копировать заново.
Проверить состояние:
```sh
gnome-extensions info sing-box-status@git.vakhrushev.me # ENABLED / DISABLED / ошибки
```
После включения откройте **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`.
### Обновление
```sh
cd sing-box-gnome-extension && git pull
glib-compile-schemas schemas/ # если менялась схема
# перезапуск GNOME Shell (см. шаг 4) — на Wayland через перелогин
```
## Отключение и удаление
Временно **отключить** (расширение остаётся установленным, настройки сохраняются):
```sh
gnome-extensions disable sing-box-status@git.vakhrushev.me
```
Снова **включить**:
```sh
gnome-extensions enable sing-box-status@git.vakhrushev.me
```
Отключать и включать можно и через GUI — приложение **Extensions** («Расширения»)
или **Extension Manager**.
Полностью **удалить**:
```sh
UUID="sing-box-status@git.vakhrushev.me"
gnome-extensions disable "$UUID"
rm "$HOME/.local/share/gnome-shell/extensions/$UUID" # симлинк (или каталог при копировании)
dconf reset -f /org/gnome/shell/extensions/sing-box-status/ # необязательно: сбросить настройки
```
На Wayland индикатор из панели исчезнет после перелогина.
## Как это работает
Каждые *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).