Почему VirtualGL выдает ошибку Не удалось открыть дисплей :0 после перезагрузки хоста

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

Я использую vncserver для подключения к машине CentOS7 в сети. Чтобы использовать 3D-графические ускорители, я использую VirtualGL. Таким образом, любая программа OpenGL должна запускаться с помощью vglrun , чтобы использовать OpenGL.

Это работает как часы, но только если я сам войду в систему на DISPLAY 0 и предварительно запущу хотя бы одно приложение OpenGL. Другими словами:

Если я

  • перезагружу машину,
  • прямо запущу vncserver и
  • подключусь к нему с помощью клиента,

ни одно приложение OpenGL не работает, и я получаю ошибку

[VGL] ERROR: Не удалось открыть дисплей :0.

Как только я войду в систему на DISPLAY 0 и запущу приложение OpenGL, ошибка больше не возникает, пока машина не будет перезагружена снова.

Мой вопрос:
Как я могу запускать приложения OpenGL с помощью vglrun, не начиная сначала приложение OpenGL на DISPLAY 0 после перезагрузки машины?

Как указано в этом вопросе: Настройка vnc-сервера и отсутствие физического дисплея: Ubuntu 16.04 LTS

Решение проблемы заключается в следующем содержимом в /etc/X11/xorg.conf:

Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    SubSection     "Display"
        Depth       24
    Option         "AllowEmptyInitialConfiguration" "True" # <-- Эта строка новая
    EndSubSection
EndSection

В моем случае я переустановил VirtualGL, и на этот раз добавил пользователя gdm в группу vglusers:

sudo adduser gdm vglusers

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

Ошибка Could not open display :0 при использовании VirtualGL после перезагрузки хоста является распространенной проблемой, возникающей из-за отсутствия активного сеанса X-сервера на дисплее :0. Данная ситуация особенно актуальна при работе с VNC-серверами на CentOS 7. Чтобы подробнее разобраться в этом вопросе, рассмотрим основные детали, которые могут помочь решить проблему и оптимизировать ваш рабочий процесс.

Понимание проблемы

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

Решение проблемы

Как вы правильно указали, одним из решений является правильная конфигурация файла xorg.conf. Добавление строки:

Option "AllowEmptyInitialConfiguration" "True"

в директорию /etc/X11/xorg.conf позволяет X-серверу запускаться даже без активной сессии пользователя. Это изменение обеспечивает наличие пустой конфигурации дисплея, что позволяет VNC-серверу работать корректно и запускать OpenGL-приложения без предварительной авторизации пользователя.

Дополнительные рекомендации

  1. Добавление пользователя в группу vglusers: Убедитесь, что пользователь, под которым вы запускаете VNC-сервер (в вашем случае gdm), добавлен в группу vglusers. Это обеспечит доступ к необходимым ресурсам для работы с VirtualGL. Для этого выполните следующую команду:

    sudo adduser gdm vglusers
  2. Автоматизация запуска: Рассмотрите возможность автоматического запуска OpenGL-приложений или скрипта, который будет запускаться после старта VNC-сервера. Это позволит вам избежать необходимости ручного ввода во время каждой перезагрузки системы.

  3. Проверка прав доступа: Убедитесь, что у вашего VNC-сервера и X-сервера есть соответствующие права доступа на чтение и выполнение необходимых графических библиотек и приложений.

  4. Настройка .vnc/xstartup: Проверьте конфигурационный файл ~/.vnc/xstartup и убедитесь, что он правильно настроен на запуск вашего рабочего окружения. Некорректные настройки могут привести к проблемам с отображением и доступом к дисплею.

Заключение

Система VirtualGL является мощным инструментом для работы с 3D-графикой, и правильная конфигурация среды является ключом к бесперебойной работе. Убедитесь, что вы следуете представленным рекомендациям, и ошибки, подобные Could not open display :0, станут исключением, а не правилом. Таким образом, вы сможете максимально эффективно использовать преимущества VirtualGL в своей работе.

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

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