Перейти к содержимому

База знаний

ARMANOS без экрана

Режим сервера запускает ARMANOS там, где на окно никто не смотрит: на сервере, в виртуальной машине, рядом со скриптом, который ведёт всю работу. Окно скрыто, локальный API поднимается на заданном порту с ключом из окружения, а вход идёт без формы.

Запуск в режиме сервера

Запустите программу с доводом --server или задайте ARMANOS_SERVER=1. Тогда ей нужен ключ локального API в ARMANOS_API_TOKEN, от 24 знаков, или в файле, который назван в ARMANOS_API_TOKEN_FILE.

Ключ из командной строки не берётся: её видят все пользователи машины в списке процессов. Ключ и код входа уходят из окружения при запуске, и процессы браузера их не наследуют.

ARMANOS_API_TOKEN
Ключ локального API, от 24 знаков
ARMANOS_API_TOKEN_FILE
Файл с этим ключом, для секретов Docker
ARMANOS_API_PORT
Порт на 127.0.0.1, по умолчанию 50325
ARMANOS_OUT_DIR
Полный путь к папке выгрузок и файлов сценариев, по умолчанию out в папке данных
ARMANOS_LOGIN_CODE
Одноразовый код входа из кабинета
ARMANOS_API_KEY
Ключ API аккаунта с правом входить в программу

Код выхода 2 значит, что ключ или настройка негодны, и строка ошибки называет, что именно. Код 3 значит, что порт занят: программа не уходит на другой, потому что ваш скрипт звонит в этот.

Что меняется в режиме сервера

  • Окно не показывается

    Оно есть, но скрыто, поэтому всё, что оно делает в фоне, работает.

  • Локальный API включён всегда

    Только на 127.0.0.1, как на обычном компьютере; переключатель на экране «Для программистов» не нужен.

  • Уведомления идут в журнал

    Строкой, начатой с ARMANOS notice, в стандартный вывод вместо сообщения системы.

  • Сайты не получают окна спроса

    Каждый профиль отказывает в разрешениях без окна, как во время прогона сценария, и страница не ждёт ответа, которого никто не даст. Место профиля с «Отдавать без вопроса» сайт получает, как и с окном.

  • Обновления не проверяются

    Чтобы обновиться, поставьте новую версию.

  • Одна строка состояния при запуске

    Она называет адрес API, аккаунт, движок с версией и видеокарту. Ключа в ней нет.

Вход без формы

POST /api/v1/app/login принимает одно из трёх тел. Программа, уже вошедшая тем же аккаунтом, отвечает alreadySignedIn и ничего не тратит, поэтому скрипт может звать вход при каждом своём запуске.

Без числа второго шага ответ two_factor_required. Пароль идёт только в теле, в адресе он отвергается.

Код из кабинета живёт две минуты и работает один раз. Право входить в программу ключом по умолчанию выключено, а отзыв ключа заканчивает вход программы на следующем обновлении пропуска.

{"code": "…"}
Код из кабинета: «Устройства», затем «Войти на сервере»
{"email", "accountPassword", "twoFactorCode"}
Тот же вход, что в окне, со вторым шагом
{"apiKey": "ak_…"}
Ключ аккаунта из «Ключи API» в кабинете с правом входить в программу

Состояние для скрипта

GET /api/v1/app/state отвечает, вошла ли программа и кем, тариф и его предел профилей, движок и его версию, сколько профилей открыто, видеокарту, порт и включён ли режим сервера.

Открытый ход /status остался прежним и работает без ключа. Почты он не называет: звать его может кто угодно на этой машине.

Без видеокарты

На сервере видеокарты обычно нет. Тогда ARMANOS Browser открывает профили без WebGL и WebGPU, и сайт может отличить такую машину от той, что в шаблоне профиля.

ARMANOS говорит об этом прямо: gpu none в строке состояния и в app/state, note no_gpu_webgl в ответе browser/start и profile/quick.

Программная графика не включается

Программа не включает программную отрисовку сама: под именем настоящей видеокарты она показала бы пределы программной. Профилю, который должен выглядеть обычным компьютером, нужна машина с видеокартой.

Остановка программы

SIGTERM, Ctrl+C и «Завершить ARMANOS» в меню закрывают открытые профили и ждут до 8 секунд, пока наш сервер снимет их замки, чтобы напарник не видел профиль занятым после остановки. Сервер, который не отвечает, дольше выход не держит.

С окном выход так же ждёт снятия замков. Но если окно ARMANOS видно, а профили открыты, программа сначала спросит, закрыть ли их, и выход ждёт ответа; без видимого окна вопроса нет.

Чего это не делает

  • Это не открывает локальный API другим компьютерам. Вызовы идут только с этой машины.
  • Это не берёт ключ из командной строки. Задайте его окружением или файлом.
  • Это не обновляет программу само. Новая версия ставится поверх.
  • Это не показывает окно. Всё идёт через API и журнал.

Где это решается

Каждая строка ниже называет стенд, который это проверяет.

Коды выхода 2 и 3, скрытое окно, ключ вне окружения и вывода, вход кодом, почтой и ключом, отказ в разрешениях без окна
apps/desktop/test/режим-сервера.js, apps/desktop/test/режим-сервера-живьём.js
Выход ждёт, пока сервер снимет замки профилей, и не дольше предела
apps/desktop/test/выход-ждёт-замков-живьём.js
«Войти на сервере» в кабинете показывает код и команды без ключа
apps/web/test/вход-на-сервере-кабинет.js
Право входа ключом отдельное, отзыв ключа заканчивает вход
apps/server/test/вход-ключом-устройства.js

Вопросы

Программа сразу вышла с кодом 2.
Ключа нет, он короче 24 знаков или передан в командной строке. Строка в выводе ошибок называет причину.
Программа вышла с кодом 3.
Порт держит другая программа. Остановите её или задайте свободный порт в ARMANOS_API_PORT.
Как скрипту узнать, что программа готова?
Звать /status, пока не ответит, потом GET /api/v1/app/state, чтобы узнать, вошла ли программа.

Попробуйте на одной машине

Бесплатный тариф даёт два профиля, без срока и без карты.