Глубокие ссылки
Добавляйте подписки, профили маршрутизации и профили прокси одним щелчком по ссылкам throne:// на компьютере и Android.
Глубокая ссылка — это URL вида throne://, который поручает Throne одно действие: добавить подписку, импортировать профиль маршрутизации, добавить удалённые профили маршрутизации или добавить один профиль прокси. Провайдеры размещают глубокие ссылки на сайтах и в QR-кодах. Вы также можете с их помощью делиться своими профилями маршрутизации.
Как Throne получает глубокую ссылку
Ваша система должна знать, что ссылки throne:// открывает Throne. Throne регистрирует себя только для вашей учётной записи, и для этого не нужны права администратора.
| Система | Зарегистрирован по умолчанию |
|---|---|
| Linux | Да |
| macOS | Да, если запускать Throne из Throne.app |
| Windows, установка с помощью установщика | Да |
| Windows, распаковка из ZIP-архива | Нет |
Чтобы включить регистрацию, например для копии Windows из ZIP-архива:
- Откройте
Настройки(Settings) →Основные настройки(Basic Settings). - На вкладке
Общие(Common) в разделеLinks and FilesотметьтеЗарегистрировать ссылки throne:// при запуске(Register throne:// links at startup). - Нажмите
OK. Throne сразу зарегистрирует себя.
Пока параметр включён, Throne проверяет регистрацию при каждом запуске и восстанавливает её, например после перемещения папки Throne. Если у вас несколько копий в Windows или Linux, ссылки открываются в той копии, которая последней запускалась с включённым параметром.
Состояние рядом с параметром показывает Установлено (Installed), когда ссылки открывают эту копию Throne. Кнопка Установить (Install) выполняет регистрацию один раз, не включая параметр. Удалить (Uninstall) удаляет регистрацию и выключает параметр. Если просто снять флажок, существующая регистрация сохранится.
macOS: обработчик ссылок входит в Throne.app, поэтому кнопок Установить и Удалить нет. Если Throne запущен не из пакета приложения, у параметра отображается Недоступно в текущей среде (Not available for this installation).
Throne принимает глубокую ссылку следующими способами:
- Щёлкните ссылку в браузере, мессенджере или документе. Если Throne не запущен, он запустится и обработает ссылку.
- Скопируйте ссылку и нажмите
Ctrl+Vв главном окне — это то же, чтоПрограмма(Program) →Добавить профиль из буфера обмена(Add profile from clipboard). Это работает даже при выключенной регистрации. - Перетащите текст ссылки в главное окно.
- Передайте ссылку как аргумент при запуске Throne. См. Командная строка.
Формат ссылки
Все глубокие ссылки устроены одинаково:
throne://<command>/<payload>
- Пишите
throne://строчными буквами. Команда не зависит от регистра:throne://AddSub/…работает. - После команды должны идти косая черта и полезная нагрузка. Без косой черты большинство ссылок ничего не делает.
- Throne игнорирует всё, что стоит в ссылке после
?или#. Всё, что несёт ссылка, находится внутри полезной нагрузки. - Если полезная нагрузка закодирована процентами (например,
%2Bвместо+), Throne сначала декодирует её.
| Команда | Что делает | Запрашивает подтверждение? |
|---|---|---|
addsub |
Добавляет группу подписки и обновляет её | Да |
route |
Импортирует профиль маршрутизации, переданный внутри ссылки | Да |
remoteroute |
Добавляет удалённые профили маршрутизации по URL | Да |
add |
Добавляет один профиль прокси в текущую группу | Нет. На Android — да, если нажать на ссылку в другом приложении. |
Правила Base64
Полезная нагрузка — это текст в Base64. Какой алфавит Base64 подходит, зависит от команды:
| Команда | Допустимая нагрузка |
|---|---|
addsub, remoteroute |
Только стандартный Base64: буквы, цифры, + и /. Дополнение = в конце необязательно. |
route, add |
URL-безопасный Base64 (- и _) или стандартный Base64, с дополнением или без него. Сам Throne создаёт URL-безопасный Base64 без дополнения. |
Для addsub и remoteroute URL-безопасная нагрузка, содержащая - или _, не сработает. Записывайте нагрузку в одну строку, без пробелов.
Чтобы закодировать нагрузку в Linux или в Git Bash в Windows:
printf '%s' 'https://example.com/sub/abc123#MyProvider' | base64 -w 0
В macOS уберите -w 0. В PowerShell:
[Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes('https://example.com/sub/abc123#MyProvider'))
Обе команды выводят стандартный Base64 с дополнением.
addsub: добавление подписки
Добавляет новую группу подписки и сразу её обновляет.
throne://addsub/<base64>
Полезная нагрузка — Base64 одной строки:
<subscription_url>#<group_name>
| Часть | Обязательна | Описание |
|---|---|---|
<subscription_url> |
Да | URL подписки без изменений. Символы ?, & и / внутри Base64 безопасны, поэтому кодировать URL процентами не нужно. |
#<group_name> |
Нет | Имя новой группы. Без него группа получает имя по хосту URL. Кодировать имя процентами необязательно: обычный пробел работает. |
Например, чтобы добавить https://example.com/sub/abc123 как группу с именем MyProvider, закодируйте https://example.com/sub/abc123#MyProvider:
throne://addsub/aHR0cHM6Ly9leGFtcGxlLmNvbS9zdWIvYWJjMTIzI015UHJvdmlkZXI=
Throne показывает запрос «Добавить эту подписку?» (Add this subscription?) с именем группы и URL, а также отмеченный флажок Авто-обновление (Auto update). После подтверждения Throne создаёт группу и обновляет её.
route: импорт профиля маршрутизации
Импортирует целый профиль маршрутизации (outbound по умолчанию и правила), переданный внутри ссылки.
throne://route/<base64>
Собирать такие ссылки вручную не нужно. В Настройки маршрутизации (Routing Settings) на вкладке Маршрут (Route) выберите профиль и нажмите Экспорт (Export) или нажмите Ctrl+C в списке. Throne скопирует ссылку throne://route/… в буфер обмена.
Когда кто-то открывает ссылку, Throne показывает запрос «Добавить этот профиль маршрутизации?» (Add this routing profile?) с именем профиля и примечаниями обо всём, что не удалось импортировать. После подтверждения профиль добавляется в список. Если у профиля есть конечные точки VPN, Throne создаёт соответствующие профили OpenVPN или OpenConnect ещё до вопроса и сохраняет их, даже если импорт отменён. Импортированный профиль маршрутизации не становится активным: выберите его в списке внизу меню Маршруты (Routing).
Полезная нагрузка — Base64 небольшого JSON-объекта, например такого:
{
"kind": "throne-route-profile",
"v": 1,
"name": "Example",
"default_outbound": "proxy",
"rules": []
}
Вот ссылка с этим JSON:
throne://route/eyJraW5kIjoidGhyb25lLXJvdXRlLXByb2ZpbGUiLCJ2IjoxLCJuYW1lIjoiRXhhbXBsZSIsImRlZmF1bHRfb3V0Ym91bmQiOiJwcm94eSIsInJ1bGVzIjpbXX0
default_outbound принимает значения proxy, direct, block или warp-bypass. Raw-профиль (написанный вручную раздел route sing-box) содержит "raw": true и объект route вместо rules. Throne находит по имени серверы, используемые в правилах, и сообщает о тех, которые не удалось найти. Подробнее об обмене профилями см. Маршрутизация.
Импорт в настройках маршрутизации
Ссылку можно также вставить на вкладке Маршрут в Настройки маршрутизации: нажмите Импорт (Import) или нажмите Ctrl+V в списке. В главном окне глубокой ссылкой считается только текст, начинающийся с throne://. Здесь же Throne принимает и одну полезную нагрузку Base64, и простой JSON, и старый JSON-список правил — он открывается в редакторе, чтобы вы задали имя. Профиль, импортированный из ссылки route, её Base64 или её JSON, также выбирается в поле Профиль маршрутизации (Routing Profile) на вкладке Основные (Common), когда вы нажимаете OK.
Ссылка remoteroute, вставленная здесь, добавляет профили с выключенным автоматическим обновлением, потому что в этом запросе нет флажка Авто-обновление. Позже можно отметить Авто-обновление в редакторе каждого профиля.
remoteroute: добавление удалённых профилей маршрутизации
Добавляет один или несколько удалённых профилей маршрутизации. Ссылка route несёт весь профиль целиком. Ссылка remoteroute несёт только URL: Throne скачивает каждый профиль и может поддерживать его в актуальном состоянии. Используйте её, чтобы распространять профиль маршрутизации, который вы сопровождаете.
throne://remoteroute/<base64>
Полезная нагрузка — Base64 простого списка URL, по одному на строку. Это не JSON:
<profile_url_1>#<name_1>
<profile_url_2>#<name_2>
| Часть | Обязательна | Описание |
|---|---|---|
<profile_url> |
Да | URL, начинающийся с http:// или https://. Строки, которые начинаются иначе, пропускаются. |
#<name> |
Нет | Имя профиля. Без него профиль получает имя по хосту URL. |
Каждый URL должен отдавать структурированный профиль маршрутизации: ссылку throne://route/, её полезную нагрузку в Base64 или JSON из неё. Raw-профили нельзя использовать как удалённые.
Например, закодируйте эти две строки:
printf '%s\n%s' 'https://example.com/routes/bypass-iran.json#BypassIran' 'https://example.com/routes/ads.json' | base64 -w 0
Получится такая ссылка:
throne://remoteroute/aHR0cHM6Ly9leGFtcGxlLmNvbS9yb3V0ZXMvYnlwYXNzLWlyYW4uanNvbiNCeXBhc3NJcmFuCmh0dHBzOi8vZXhhbXBsZS5jb20vcm91dGVzL2Fkcy5qc29u
Throne перечисляет URL под вопросом «Добавить эти удалённые профили маршрутизации?» (Add these remote routing profiles?) с одним общим флажком Авто-обновление для всех. Флажок отмечен. После подтверждения Throne добавляет профили и скачивает их. В логе видно, сколько профилей получено.
- Throne обновляет профили с включённым
Авто-обновление, только если отмечен флажокОсновные настройки→Подписка→Авто-обновление профилей маршрутизации(Routing profiles auto update) →Включить. По умолчанию он снят. Чтобы обновить профили вручную, используйтеОбновление(Update) на вкладкеМаршрутвНастройки маршрутизации. См. Удалённые профили. - Обновление заменяет правила профиля и его outbound по умолчанию скачанными. Имя профиля сохраняется.
- URL на
raw.githubusercontent.comскачиваются через зеркало, выбранное в полеИсточник профилей маршрутизации(Remote Rule-set Mirror) на вкладкеОсновныевНастройки маршрутизации(по умолчанию — зеркало jsDelivr). После изменения файла зеркало ещё некоторое время может отдавать старую копию. Маршруты→Скачать профили(Download Profiles) работает так же: скачивает ссылкуremoterouteиз репозитория профилей маршрутизации Throne и показывает тот же запрос.
add: добавление одного профиля прокси
Добавляет один профиль прокси в текущую группу.
throne://add/<base64>
Полезная нагрузка — Base64 настроек outbound профиля в формате JSON. На компьютере эта ссылка не запрашивает подтверждения: профиль добавляется сразу, как если бы вы вставили ссылку vless:// или ss://.
Throne создаёт такие ссылки за вас:
- Щёлкните профили в списке правой кнопкой мыши →
Поделиться(Share) →Копировать ссылки выбранных (Диплинк)(Copy links of selected (Deep Links)) или нажмитеCtrl+Alt+C. - Щёлкните профиль правой кнопкой мыши →
Поделиться→QR-код и ссылка(QR Code and link). Окно показывает либо обычную ссылку для обмена, либо глубокую ссылку. ФлажокDeep Linkпереключает между ними. Группы(Groups) →Редактировать текущую группу(Edit current Group) →Копировать ссылки профилей (Диплинк)(Copy profile share links (Deep Links)).
Глубокая ссылка несёт полную конфигурацию профиля, поэтому подходит и для типов профилей и параметров, у которых нет стандартной ссылки для обмена. Для таких профилей Скопировать ссылки выбранных (Copy links of selected), Ctrl+C, обычно автоматически копирует глубокую ссылку, а окно QR открывается с отмеченным флажком Deep Link. Если у такого профиля есть дополнительные параметры подключения, например привязка к интерфейсу (bind interface), используйте вместо этого Копировать ссылки выбранных (Диплинк).
Ссылки add также работают везде, где работают обычные ссылки для обмена: в подписках, в файлах и в QR-кодах.
На Android
Throne для Android 2.0.0 обрабатывает те же четыре команды. Он также принимает ссылки clash://install-config?url=…&name=…, которые добавляют подписку так же, как addsub. В таких ссылках значение url нужно кодировать процентами. Схема throne:// регистрируется при установке приложения; отдельной настройки для неё нет.
Нажмите на ссылку в другом приложении или используйте Добавить профиль (Add profile) → Импорт из буфера обмена (Import from clipboard) или Отсканировать QR-код (Scan QR code) на экране Конфигурация (Profiles). На Android QR-коды работают для всех четырёх команд. Ссылки route и remoteroute работают также через Import на экране Маршруты (Routing).
Отличия от версии для компьютера:
- Ссылка
add, открытая нажатием в другом приложении, сначала спрашивает «Подтвердите, что хотите импортировать профиль …?» (Confirm you want to import profile …?). Ссылки вродеvless://, открытые из другого приложения, спрашивают то же самое. Из буфера обмена или QR-кода профиль импортируется без вопросов. - Импортированный профиль маршрутизации добавляется, но не становится активным. Чтобы использовать его, нажмите на него на экране
Маршруты. - Raw-профили маршрутизации с компьютера (
"raw": true) отклоняются с сообщением «raw routing profiles are not supported on Android» (raw-профили маршрутизации на Android не поддерживаются). Конечные точки в переданном профиле маршрутизации отбрасываются с примечанием. - При неизвестной команде сообщение «Ignored deeplink with unknown command: …» (глубокая ссылка с неизвестной командой проигнорирована) показывается на экране, а не только в логе.
- Для обновлений по расписанию нужны
Настройки(Settings) →Подписки(Subscriptions) →Subscription auto updateдля подписок иНастройки→Routing→Auto update remote profilesдля удалённых профилей маршрутизации. Оба параметра по умолчанию выключены.
Приложение для Android тоже умеет создавать такие ссылки: add для профилей и route для профилей маршрутизации.
Устранение неполадок
Эти сообщения относятся к Throne для компьютера.
- Щелчок по ссылке ничего не делает или браузер спрашивает, каким приложением её открыть. Обработчик ссылок не зарегистрирован для этой копии. В копии Windows из ZIP-архива включите
Зарегистрировать ссылки throne:// при запуске(см. Как Throne получает глубокую ссылку). В macOS запускайте Throne изThrone.app. В остальных случаях запустите Throne один раз. Если у вас несколько копий, нажмитеУстановить(Install) в той копии, которая должна открывать ссылки. Вместо всего этого всегда можно скопировать ссылку и нажатьCtrl+Vв Throne. - Linux: ссылки по-прежнему не открываются. При регистрации запускается утилита
update-desktop-databaseиз пакетаdesktop-file-utils. Если её не было, установите её, затем нажмитеУстановитьрядом сЗарегистрировать ссылки throne:// при запуске. - Ничего не происходит, и лог пуст. Throne молча отбрасывает такие ссылки:
- ссылку
addsub, нагрузка которой не является корректным стандартным Base64, например URL-безопасный Base64 с-или_либо нагрузка с пробелами или переносами строк; - ссылку без косой черты после команды, кроме ссылок
addиremoteroute; - ссылку с неизвестной командой, нагрузка которой не декодируется.
- ссылку
- «Проигнорирована глубокая ссылка с неизвестной командой: …» (Ignored deeplink with unknown command: …) в логе. Слово после
throne://— неaddsub,route,remoterouteилиadd. Проверьте написание. - «Ссылка не содержит URL подписки.» (The link did not contain a subscription URL.) Нагрузка
addsubдекодировалась, но перед#нет URL. Кодируйте<url>#<name>, а не только#<name>. - «Deep link has no data» (в глубокой ссылке нет данных) или «Base64 is invalid.» (некорректный Base64). Эти сообщения выдают ссылки
remoteroute: послеthrone://remoteroute/ничего нет или нагрузка не является стандартным Base64. - «The link did not contain any valid http(s) routing profile URLs.» (в ссылке нет корректных http(s)-адресов профилей маршрутизации). Нагрузка
remoterouteдекодировалась, но ни одна строка не начинается сhttp://илиhttps://. Нагрузка должна быть списком URL, по одному на строку, а не JSON. - «Ссылка не содержала никаких допустимых профилей удаленной маршрутизации.» (The link did not contain any valid remote routing profiles.) В ссылке нет косой черты после
remoteroute. - «Не удалось распознать ссылку:» (The link could not be parsed:) и причина. Это сообщение выдают ссылки
route:- «Empty input» (пустой ввод): после
throne://route/ничего нет. - «Input is not valid JSON, base64, or a Throne route link» (ввод не является корректным JSON, base64 или ссылкой route Throne): нагрузка повреждена или обрезана.
- «Unrecognized route object» (нераспознанный объект маршрута): в JSON нет
"kind": "throne-route-profile".
- «Empty input» (пустой ввод): после
- «Импортирован(ы) 0 профиль(ей)» (Imported 0 profile(s)) в логе. Нагрузка
addповреждена или обрезана. Либо вы отсканировали QR-код со ссылкойaddsub,routeилиremoteroute: скопируйте из лога текст послеQR Code Result:и нажмитеCtrl+V. - «Ошибка получения профиля удаленной маршрутизации …: …» (Remote routing profile … failed: …) в логе. Профиль добавлен, но его URL не удалось скачать или он не отдаёт структурированный профиль маршрутизации. Исправьте URL или файл, затем используйте
Обновлениена вкладкеМаршрутвНастройки маршрутизации.