2026 OpenClaw Gateway на headless Linux Автоматизация браузера: разбор проблем с Xvfb, DISPLAY и browser.executablePath

OpenClaw Gateway у вас уже работает на небольшом VPS с Ubuntu/Debian, но стоит включить возможности браузера, требующие Chromium, как в логах появляются ошибки «нет дисплея», «не найден исполняемый файл» или сообщения песочницы. Материал для инженеров, которые используют headless Linux как производственный Gateway: семь пунктов, вскрывающих скрытые допущения вокруг DISPLAY / Xvfb / browser.executablePath, сравнительная таблица виртуального framebuffer и реального дисплея, затем шестишаговый воспроизводимый runbook (зависимости, Xvfb, окружение, проверка конфигурации, systemd/Docker, минимальная приёмка) и явное разграничение с материалами на сайте: кроссплатформенная установка, устранение not ready, наблюдаемость.

01

Перед стартом: семь скрытых допущений, из‑за которых связка «headless Linux + подсистема браузера» проваливает ревью

Документация часто предполагает графический стек; в продакшене чаще встречается headless VPS. Семь пунктов ниже превращают спор «достаточно поставить Chrome» в таблицу рисков, которую можно утвердить.

  1. 01

    Считать, что процесс Gateway унаследует DISPLAY из интерактивной shell:Если в systemd не задано Environment=, дочерние процессы браузера всё равно могут оказаться без дисплея.

  2. 02

    Указать browser.executablePath как в десктопном дистрибутиве:В контейнере или минимальном образе пути другие; типичны ошибки вида spawn ENOENT.

  3. 03

    Игнорировать шрифты и зависимости ICU:Без пакетов шрифтов рендеринг может тихо падать или истекать по таймауту — кажется, что Gateway «завис».

  4. 04

    Запускать песочницу браузера от root:Chromium может ослабить или отказаться от sandbox; нужен выделенный непривилегированный пользователь и минимальные привилегии из статьи по усилению безопасности.

  5. 05

    Не фиксировать порядок запуска Xvfb и Gateway:Гонки: первый вызов инструмента падает, повтор «самоисцеляется» — сложно воспроизвести.

  6. 06

    Складывать память браузера и вызовы модели в один бюджет:На малом железе OOM чаще получает Chromium, а не LLM.

  7. 07

    Смотреть только логи Gateway, без кодов выхода дочерних процессов:Падение браузера вниз по цепочке выглядит как таймаут инструмента; сверяйте временную шкалу с openclaw logs и системным журналом.

Общая причина — браузер воспринимается как опциональный плагин, а не как рантайм с цепочкой зависимостей ОС. К статье по рукопожатию MCP: там сессии и обнаружение инструментов; здесь замыкаем контур бинарник браузера + дисплейный стек.

Если параллельно идут Docker в продакшене и systemd на железе, зафиксируйте в топологии, кто поднимает DISPLAY и Xvfb, чтобы два оркестратора не боролись за один номер дисплея.

02

Xvfb, физический дисплей и «только headless-флаги»: операционные затраты и область применения

Универсального решения нет: вы меняете воспроизводимость на площадь разбора инцидентов.

ИзмерениеXvfb + DISPLAYФизический / VNC-дисплейТолько Chromium --headless (без Xvfb)
ЗависимостиСервис Xvfb, номер дисплея, пакеты шрифтовСеанс, разрешение, окна с участием человекаПоведение headless зависит от версии; после обновлений может «плыть»
ВоспроизводимостьВысокая: systemd или compose фиксируют переменные окруженияСредняя: влияние десктоп-сессии и блокировки экранаСредняя–высокая: от дистрибутива и связки с sandbox
Сигналы для triageЯсные: DISPLAY, логи Xvfb, stderr ChromiumСложнее: состояние GUI и запросы правНерегулярные: пути GPU/ANGLE на машинах без GPU
Типичные сценарииНебольшой VPS, только скриншоты/автоматизацияТяжёлый GUI или окна подписиЦепочка инструментов проверена в headless на этой сборке

«Воспроизводимо» здесь значит: те же unit systemd или тот же compose-файл на чистом VPS по-прежнему стабильно поднимают Xvfb + Gateway + браузер.

Вместе со статьёй not ready: если процесс Gateway ещё не слушает порт стабильно, не наслаивайте разбор уровня браузера — логи смешаются.

03

Шестишаговый runbook: от зависимостей до минимальной приёмки браузера

Порядок: сначала дисплейный стек, затем Gateway, затем инструменты. Команды в духе Debian/Ubuntu; на других дистрибутивах замените имена пакетов.

  1. 01

    Установить Chromium и шрифты:apt install для пакета chromium или google-chrome-stable и распространённых шрифтов вроде fonts-noto.

  2. 02

    Установить Xvfb:Убедиться, что Xvfb :99 -screen 0 1920x1080x24 стартует вручную без конфликта сокетов.

  3. 03

    Экспортировать DISPLAY:DISPLAY=:99 в том же окружении, что и Gateway; в systemd — Environment=DISPLAY=:99, в Docker — блок environment.

  4. 04

    Задать browser.executablePath:Сверить с which chromium или путём пакета; после изменений запустить openclaw doctor (или эквивалент).

  5. 05

    Закрепить порядок в systemd или compose:Сначала готовность Xvfb, потом Gateway; для Xvfb — политика перезапуска и логи на диск.

  6. 06

    Минимальная приёмка:Когда Gateway здоров, один вызов инструмента только с about:blank; в логах нет ошибок sandbox/дисплея — затем нагрузка.

bash · Xvfb + переменные окружения (пример)
# 手动验证(维护窗):
Xvfb :99 -screen 0 1920x1080x24 &
export DISPLAY=:99
chromium --no-sandbox --disable-dev-shm-usage --headless=new --dump-dom about:blank >/tmp/blank.html
# 然后以相同 DISPLAY 启动/重启 Gateway(systemd 或 docker compose)
info

Подсказка: --no-sandbox только для ограниченной диагностики; в продакшене вернитесь к непривилегированному пользователю, минимальным правам и networkPolicy.

Согласуйте с наблюдаемостью: stderr Xvfb и Chromium на одной временной шкале тикета, чтобы «Gateway зелёный, инструменты красные» не списали на бэкенд модели.

04

Симптомы: типичные строки ошибок и три первых действия

Для канала дежурства. Если уже фигурируют коды закрытия WebSocket — переходите к материалу gateway closed (1000).

cannot open display: проверить DISPLAY и живой Xvfb. executablePath ENOENT: путь и тот же бинарник в контейнере. zygote / sandbox: непривилегированный пользователь и параметры ядра до временных диагностических флагов.

warning

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

В Docker проверьте /dev/shm и размер разделяемой памяти: слишком мало — Chromium периодически падает, инструменты дёргаются.

05

Минимальный пакет для тикета (можно цитировать)

Поля для выравнивания со второй линией; перед внешней отправкой обезличьте.

  • Дистрибутив и ядро:/etc/os-release, uname -r, мажорная версия Chromium.
  • Дисплейный стек:Командная строка Xvfb, DISPLAY, ss -lxn | grep X11 или эквивалент.
  • Ресурсы:В окне сбоя браузера свободная память ниже примерно 20%, есть ли OOM killer в dmesg.

Привязка Gateway только к ноутбуку, который может засыпать, делает нестабильными дисплейный стек и сеть; минимальный VPS часто уходит в OOM при одновременной работе браузера и модели. Если нужен долгоживущий, договорно прозрачный macOS или выделенный вычислительный слой для OpenClaw, выделенный удалённый Mac обычно надёжнее «натянутой» локальной машины. По сравнению с разрозненным железом облачная аренда Mac Mini от NodeMini упрощает управление: фиксированный SSH, понятные дисковые уровни, повторяемые профили узлов; спецификация и цены — тарифы аренды Mac Mini, подключение — справочный центр, серия материалов — с категории OpenClaw в блоге.

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

FAQ

Частые вопросы

Слушает ли Xvfb на DISPLAY; совпадает ли browser.executablePath с реальным бинарником; передают ли systemd/Docker в процесс Gateway DISPLAY и зависимости шрифтов. Планирование ёмкости: тарифы Mac Mini и справочный центр.

Not ready — порты, память, таймауты и порядок старта контейнеров; здесь — подсистема браузера и дисплей. При сохранении проблем сравните not ready и closed (1000).

С категории OpenClaw в блоге: установка, Docker, systemd, безопасность, наблюдаемость, MCP; для онбординга — справочный центр.