Вопрос или проблема
Я использую 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-приложения без предварительной авторизации пользователя.
Дополнительные рекомендации
-
Добавление пользователя в группу vglusers: Убедитесь, что пользователь, под которым вы запускаете VNC-сервер (в вашем случае
gdm
), добавлен в группуvglusers
. Это обеспечит доступ к необходимым ресурсам для работы с VirtualGL. Для этого выполните следующую команду:sudo adduser gdm vglusers
-
Автоматизация запуска: Рассмотрите возможность автоматического запуска OpenGL-приложений или скрипта, который будет запускаться после старта VNC-сервера. Это позволит вам избежать необходимости ручного ввода во время каждой перезагрузки системы.
-
Проверка прав доступа: Убедитесь, что у вашего VNC-сервера и X-сервера есть соответствующие права доступа на чтение и выполнение необходимых графических библиотек и приложений.
-
Настройка .vnc/xstartup: Проверьте конфигурационный файл
~/.vnc/xstartup
и убедитесь, что он правильно настроен на запуск вашего рабочего окружения. Некорректные настройки могут привести к проблемам с отображением и доступом к дисплею.
Заключение
Система VirtualGL является мощным инструментом для работы с 3D-графикой, и правильная конфигурация среды является ключом к бесперебойной работе. Убедитесь, что вы следуете представленным рекомендациям, и ошибки, подобные Could not open display :0, станут исключением, а не правилом. Таким образом, вы сможете максимально эффективно использовать преимущества VirtualGL в своей работе.