Вопрос или проблема
У меня есть графическое приложение, выполняющее 3D-рендеринг с использованием OpenGL. Приложение имеет режим автоматизации (фактическая автоматизация GUI контролируется и автоматизируется другой программой AutomationHost), который должен работать на виртуальной машине Windows Server, и даже в этом автоматизированном режиме приложению требуется OpenGL для правильной работы.
После обновления Qt и Coin3D приложению теперь требуется более новая версия OpenGL 3.x для функционирования, необходимо установить Mesa3D, чтобы активировать программный рендеринг, и хотя это позволяет приложению работать на сервере, оно перестает работать, когда RDP неактивно (либо при отключении сеанса, либо просто при сворачивании окна удаленного рабочего стола).
Я нашел эту команду для преобразования терминального сеанса в консольный:
for /f "skip=1 tokens=3" %%s in ('query user %USERNAME%') do (tscon.exe %%s /dest:console)
Это работает как решение, но не идеально. Во-первых, это означает, что каждый раз, когда вы подключаетесь к серверу удаленно, вам нужно запускать эту команду перед отключением. Во-вторых, это означает, что приложение не будет функционировать должным образом после перезагрузки. Вам потребуется войти с помощью удаленного рабочего стола вручную и запустить команду, чтобы заставить приложение работать после перезагрузки.
Мне нужен способ поддерживать активным контекст GUI или сеанс или что-то еще без какого-либо удаленного подключения, который:
- Работает после перезагрузки без ручного вмешательства (другое возможное решение – использовать VNC или какой-либо другой протокол удаленного рабочего стола, но разве это не требует вручную запускать приложение, чтобы оно работало в любом сеансе, который использует VNC, и оставалось активным?)
- Позволяет вам по-прежнему видеть и взаимодействовать с GUI, если вы вручную войдете в удаленный рабочий стол (для отладки)
- Не требует установки никаких неподписанных драйверов.
Ответ или решение
Чтобы обеспечить бесперебойную работу приложения на OpenGL на виртуальной машине Windows Server при отключении удаленного рабочего стола (RDP), необходимо рассмотреть несколько подходов. Ваша проблема заключается в том, чтобы приложение продолжало функционировать независимо от состояния RDP-сессии, что требует поддержания контекста GUI даже при отсутствии активного сеанса. Вот подробные шаги и рекомендации для решения ваших задач.
1. Автоматизация запуска приложения
Одним из способов, который может помочь избежать ручного запуска приложения после перезагрузки, является использование планировщика задач Windows. Вы можете создать задачу, которая запускает ваше приложение при входе пользователя в систему, без необходимости открывать RDP. Это достигается следующим образом:
- Создайте задачу в планировщике задач:
- Откройте "Планировщик задач".
- Создайте новую задачу и установите триггер "При входе пользователя".
- Задайте выполнение вашего OpenGL приложения, чтобы оно запускалось автоматически при каждом входе в систему.
2. Применение виртуальных дисплеев
Отличным решением является использование инструментов, которые создают виртуальные дисплеи, такие как Dummy Display Adapter или аналогичные приложения. Эти решения позволят вам:
- Появление виртуального дисплея, который всегда активен, даже если нет физического подключения.
- Возможность взаимодействовать с GUI, когда вы подключаетесь через RDP без вмешательства в процесс работы приложения.
3. VNC как альтернатива RDP
Если переход на другой протокол удаленного доступа в качестве решения не вызывает отторжения, VNC может стать вашим другом. Установив VNC-сервер на виртуальной машине, вы сможете:
- Подключаться к сеансу, даже если RDP отключен.
- Убедиться, что ваша OpenGL-программа продолжает работать, так как VNC создает постоянный поток вывода, даже когда пользователь отключен.
4. Конфигурация и установка
Важно также убедиться, что ваше программное обеспечение соответствует всем требованиям безопасности и не использует неподписанные драйверы, что вы уже упомянули. Убедитесь, что все установленные драйверы и программное обеспечение соответствуют актуальным стандартам безопасности.
5. Дебаг с RDP
При использовании автоматизированной системы важно иметь возможность видеть и взаимодействовать с GUI для отладки. Используя VNC или создавая виртуальный дисплей, вы получите возможность входить в ту же графическую среду, что и ваше приложение работает, что поможет в процессе устранения ошибок.
Заключение
Таким образом, подходы к обеспечению работы вашего OpenGL приложения без необходимости постоянного подключения через RDP разнообразны и зависят от ваших предпочтений. Автоматизация запуска через планировщик задач, использование виртуальных дисплеев или переход на VNC обеспечат вам гибкость, необходимую для бесперебойной работы приложения. Эти решения также соответствуют вашим требованиям, позволяя избежать установок неподписанных драйверов и сохранив возможность взаимодействия с GUI во время отладки.
Также важно периодически проверять системные обновления и документацию, чтобы избежать возможных проблем с совместимостью в будущем.