glxinfo выдаёт странную ошибку в контейнере Ubuntu Noble

Вопрос или проблема

Я пытаюсь создать контейнер ubuntu noble (он должен быть ubuntu noble из-за ограничений совместимости другого программного обеспечения) с GUI, способным запускать Gazebo, симуляцию роботов. Для Gazebo мне нужна рабочая настройка OpenGL (с использованием mesa). На данный момент, однако, мои попытки проверить настройку с помощью glxinfo терпят неудачу из-за какой-то странной ошибки:

root@554bf70792e2:/# glxinfo
name of display: :1
Error: couldn't find RGB GLX visual or fbconfig

Я провел огромную работу по поиску в интернете и попробовал множество решений, но ни одно из них не сработало. Может кто-нибудь мне помочь?

Дополнительный контекст:

Я запускаю это на macbook с чипом apple silicon (M3).

Dockerfile:

FROM --platform=linux/arm64 ubuntu:noble

# ---------- Настройка VNC-сервера ----------

# Установка необходимых пакетов Debian
ENV DEBIAN_FRONTEND=noninteractivex
RUN apt update && \
    apt upgrade -y && \
    apt install -y xfce4 xfce4-goodies tightvncserver dbus-x11

# Добавить пользователя vncuser
RUN useradd -m vncuser && echo "vncuser:password" | chpasswd

# Переключиться на vncuser
USER vncuser

# Настройка пароля VNC

RUN mkdir -p ~/.vnc && \
    echo "password" | vncpasswd -f > ~/.vnc/passwd && \
    chmod 600 ~/.vnc/passwd

# Установка XFCE в качестве среды по умолчанию
RUN echo "#!/bin/bash\nXvfb :1 -screen 0 1280x720x24 &\nstartxfce4 &" > ~/.vnc/xstartup && \
    chmod +x ~/.vnc/xstartup && \
    touch ~/.Xauthority

# Переключение обратно на root
USER root

# Открытие порта VNC
EXPOSE 5901

# Установка переменных окружения
ENV DISPLAY=:1 \
    XDG_RUNTIME_DIR=/tmp/runtime-root \
    LIBGL_ALWAYS_SOFTWARE=1

# Меса и другие библиотеки
RUN apt update && apt install -y \
    libgl1-mesa-dri \
    libglx-mesa0 \
    libegl-mesa0 \
    mesa-vulkan-drivers \
    libosmesa6 \
    mesa-utils \
    xvfb \
    pciutils

vnc-start.sh:

su - vncuser -c "
export USER=vncuser
export DISPLAY=:1
vncserver -geometry 1280x720 -depth 24 :1
xhost +"

docker-compose.yml:

services:
  gprp:
    build: .
    container_name: gprp
    command: tail -f /dev/null
    ports:
      - "5901:5901"
    volumes:
      - .:/workspace

Чтобы запустить контейнер, я выполняю docker-compose build и docker-compose up -d, затем (внутри контейнера) выполняю vnc-start.sh и glxinfo.

Ответ или решение

Чтобы помочь разобраться с проблемой ошибки glxinfo в вашем контейнере ubuntu noble, давайте рассмотрим все аспекты вашей настройки, учитывая особенности среды. Основная проблема заключается в ошибке Error: couldn't find RGB GLX visual or fbconfig, что указывает на невозможность найти конфигурацию GLX. Давайте разберем возможные причины и решения:

Возможные причины проблемы

  1. Проблемы с OpenGL и GLX в среде ARM на Apple Silicon (M3):

    • Ваш макбук на базе Apple Silicon работает с архитектурой ARM. Это может вызывать проблемы с рендерингом OpenGL и, возможно, не все необходимые компоненты установлены.
  2. Отсутствие подходящих драйверов или библиотек в контейнере:

    • Контейнер может не иметь правильной конфигурации или подходящих библиотек для работы с GPU и рендерингом через Xvfb.
  3. Ошибки в конфигурации Xvfb или VNC:

    • Неправильная настройка виртуального дисплея или недостаточная инициализация графической среды может приводить к проблемам при запуске glxinfo.

Возможные решения и рекомендации

  1. Убедитесь, что все необходимые библиотеки OpenGL и GLX установлены:

    Убедитесь, что в контейнере установлены все необходимые пакеты. Вы уже добавили много библиотек, но вы можете попробовать добавить пакет mesa-utils-extra, который может включать дополнительные библиотеки.

    RUN apt update && apt install -y \
       mesa-utils-extra
  2. Проверьте настройку среды Xvfb:

    Убедитесь, что Xvfb корректно запускает виртуальный дисплей. Попробуйте изменить параметры экрана, например глубину или разрешение:

    Xvfb :1 -screen 0 1920x1080x24 &

    Проверьте логи Xvfb и убедитесь, что он работает без ошибок: /var/log/Xvfb.1.log.

  3. Используйте корректный дисплей:

    Убедитесь, что переменные окружения DISPLAY и XAUTHORITY корректно установленны в вашем скрипте vnc-start.sh:

    export DISPLAY=:1
    export XAUTHORITY=/home/vncuser/.Xauthority
  4. Проверьте дублирование процесса Xvfb:

    Убедитесь, что ранее запущенные процессы Xvfb завершены правильно, чтобы избежать конфликтов. Используйте:

    pgrep Xvfb | xargs kill
  5. Диагностика и логи:

    Запустите команду с большей детализацией вывода и проверьте наличие более специфичных ошибок в ответе:

    LIBGL_DEBUG=verbose glxinfo

Эти шаги должны помочь вам диагностировать и устранить проблему с ошибкой glxinfo в вашем контейнере. Поскольку работа с графикой в докере, особенно с OpenGL, может быть сложной задачей из-за зависимостей и конфигурации, важно постепенно и методично проверять конфигурацию на каждом этапе. Если проблема сохраняется, возможно, рассмотрите вариант использовать x86-эмуляцию или изучите возможность использования других инструментов виртуализации, которые лучше поддерживают работу с графикой на ARM.

Оцените материал
Добавить комментарий

Капча загружается...