Привязка, повторная привязка и общий доступ к машине
У каждой машины с Terminull есть постоянная идентичность — идентификатор beacon и открытый ключ, — и она показывает QR-код terminull://pair, который их содержит. QR-кодов два разных, и результат сканирования зависит от того, какой это QR и кто его сканирует. Весь этот раздел — про это различие: один QR передаёт машину, другой даёт ею воспользоваться.
Привязка — первое подключение машины
В macOS мастер настройки показывает QR на последней странице, а в строке меню он всегда доступен через «Добавить устройство по QR». На Linux-сервере без графики служба terminull выводит ссылку привязки текстом (QR в терминале нечитаем через SSH) — её можно вставить в приложение или перетащить в окно на Mac.
В Windows установщик показывает QR на последнем шаге, а иконка в трее всегда открывает его через Pair a phone (QR) — или выполните terminull qr в любом терминале.
Сканирование в приложении привязывает машину к вашей учётной записи — вы становитесь её владельцем. Приложение регистрирует идентификатор beacon и открытый ключ, после чего машина один раз запрашивает свой постоянный токен и выходит в сеть. В QR входят только идентификатор beacon, открытый ключ машины, временный ключ обмена, адрес её релея и одноразовый код привязки — но никогда ваш код, сессии или учётные данные.
Как получить QR на машине без графики
Только что установленная служба печатает QR привязки в собственный вывод при первом запуске, пока она не привязана, и перестаёт это делать, как только устройство её привязало. Чтобы получить QR в любой момент позже, запросите его у работающей службы:
terminull-admin qr # print a QR (needs the service running)
terminull-admin qr --url # just the pairing link, on stdout
QR рисуется в выводе службы, а не в терминале, где вы набрали команду, — в ваш терминал возвращается ссылка. При systemd этот вывод попадает в журнал, поэтому смотрите его там:
journalctl --user -u terminull --no-pager -o cat -n 40
-o cat — не опция «на всякий случай». Без неё journald добавляет в начало каждой строки метку времени и имя юнита, из-за чего каждая строка кода сдвигается вбок: он не отсканируется, как бы правдоподобно ни выглядел.
По SSH ссылка обычно удобнее картинки. terminull-admin qr --url печатает чистый URL, который можно вставить в приложение, или передать своему генератору, полностью минуя журнал: terminull-admin qr --url | qrencode -t ANSI.
Два типичных затруднения. Установщик кладёт команду в окружение самой службы, поэтому, если оболочка её не находит, используйте полный путь ~/.local/share/terminull/venv/bin/terminull-admin. И команда общается с работающей службой через локальный сокет, так что «terminull is not running» означает ровно это: запустите её командой systemctl --user start terminull и повторите. Всё, что она напечатает, считайте QR владельца — со всеми предосторожностями, описанными выше.
Повторная привязка — сканирование той же учётной записью
Сканировать QR владельца ещё раз учётной записью, которой машина уже принадлежит, — это повторная привязка, и её можно безопасно повторять. Она обновляет сохранённые открытый ключ и имя и заново открывает окно выдачи токена. Ничего не теряется: сессии живут на самой машине, а не на телефоне, поэтому после этого они все на месте.
Привязывайте повторно, когда добавляете второе своё устройство (iPad рядом с iPhone), переустанавливаете приложение или сбрасываете идентичность машины полным удалением — в последнем случае ключ создаётся заново, и повторная привязка записывает именно его.
QR владельца — это секрет. Если его отсканирует другая учётная запись, это не присоединение, а передача владения. Сервер запишет её как ожидающую, и она вступит в силу при следующем опросе со стороны машины — машина уйдёт из вашей учётной записи. Наличие кода привязки подтверждает физический доступ к машине, поэтому он и считается правом на неё. Чтобы пустить кого-то без передачи владения, используйте QR общего доступа ниже.
Общий доступ — дать другому человеку пользоваться вашей машиной
В приложении откройте «Учётная запись», найдите машину и нажмите значок QR рядом с ней. Машина создаёт новый код, действующий две минуты, регистрирует его на сервере и показывает QR общего доступа с обратным отсчётом. (Для машин в режиме «только LAN» общий доступ недоступен — за ними нет учётной записи.)
Когда его сканирует другая учётная запись, она присоединяется как участник: машина появляется в её списке, приходят пуш-уведомления, можно запускать на ней сессии. Владелец не меняется, токен машины остаётся прежним. Уже присоединившиеся участники могут сканировать снова в любой момент — открывать новое окно не нужно.
Срок действия не просто показывается, а проверяется сервером. Сканирование без подходящего кода отклоняется с сообщением «эта машина сейчас не в общем доступе», а просроченное — «код общего доступа истёк, попросите у владельца новый QR». Поэтому скриншот старого QR бесполезен, и в этом весь смысл: общий доступ — осознанное и краткое действие, а не постоянное разрешение.
Какой QR передо мной?
| QR владельца | QR общего доступа | |
|---|---|---|
| Где найти | Мастер настройки или строка меню → «Добавить устройство по QR» | Приложение → «Учётная запись» → значок QR рядом с машиной |
| Сколько действует | Пока идентичность машины не сброшена | Две минуты, с обратным отсчётом |
| Сканирует ваша учётная запись | Повторная привязка — можно повторять | Ничего нового: машина уже у вас |
| Сканирует чужая учётная запись | Забирает владение машиной | Присоединяется как участник, вы остаётесь владельцем |
| Можно скриншотить? | Нет — обращайтесь с ним как с паролем | Безвреден, как только истекут две минуты |
Привязка только по локальной сети
Машина с настройкой pairing_mode = "lan" привязывается полностью в вашей локальной сети: её QR помечен как «только LAN», приложение пропускает привязку к учётной записи, и сервер не участвует ни на одном шаге. После этого машина доступна только из той же сети, а пуш-уведомления и облачные ИИ-помощники недоступны. Поделиться ею тоже нельзя: общий доступ работает через сервер, а в этом режиме сервера нет.
Ядро Terminull Service задумано открытым. Структура исходного кода, полный справочник блоков и дизайн передачи управления находятся рядом, в docs/ репозитория. Вопросы: hello@terminull.dev.