domingo, 24 de enero de 2021

Utilizar interfaz gráfica en WSL2 para Windows 10, para aplicaciones Qt, QML y PySide2 con servidor VcXsrv

En esta ocasión vamos a configurar WSL2 para poder ejecutar aplicaciones gráficas de Qt. El método consiste en utiliza un servidor de video externo para la distribución Linux que estés usando, existiendo varias opciones de servidor a instalar en Windows 10, yo utilicé VcXsrv Windows X Server.

Descargamos e instalamos VcXsrv

Una vez instalado, es necesario arrancar la aplicación XLaunch utilizando las siguientes configuraciones:



Si tienes una distribución Ubuntu 18.04 instalada en tu WSL2, encontrarás un archivo de configuración en la ruta /etc/profile.d/wsl-integration.sh el cual contiene la siguientes líneas de configuración:

        export DISPLAY=${WSL_HOST}:0
        export LIBGL_ALWAYS_INDIRECT=1

Estas variables de entorno, indicarán al sistema que la aplicación será lanzada en la dirección DISPLAY y se utilizarán las librerías de OpenGL locales o remotas, poniendo 1 o 0 en LIBGL_ALWAYS_INDIRECT.

Esto es importante ya que ciertas aplicaciones se ejecutarán normalmente con la opción LIBGL_ALWAYS_INDIRECT=1 y con la opción Native opengl, del servidor de video, activada. Por otro lado, hay aplicaciones (en especial QML) que necesitan arrancar el servidor de video con la opción Native opengl desactivada, y la línea que corresponde a LIBGL_ALWAYS_INDIRECT debe ser comentada.

Hasta el momento, he probado aplicaciones gráficas en 3 escenarios distintos. Estos escenarios son:
  • QtWidgets (Qt para escritorios programado en C++)
  • QML (Qt para escritorios programado en QML y C++)
  • Qt5 PySide2 (Qt para escritorios programado en Python)
Para todos los casos, es necesario instalar qt5-default

$ sudo apt install qt5-default

Aplicaciones QtWidgets:
Para ejecutar aplicaciones programadas en Qt5 es necesario instalar los siguientes paquetes:

$ sudo apt install (EN REVISION)

Verificamos que las variables de entorno estén correctas, es decir, DISPLAY debe apuntar a la IP de tu PC (puede ser localhost) y LIBGL_ALWAYS_INDIRECT=1

Aplicaciones QML:
Para ejecutar aplicaciones programadas en QML es necesario instalar el siguiente paquete:

$ sudo apt install libqt5qml5 

En caso de desarrollo, en necesario instalar también el siguiente paquete:

$ sudo apt install qt5declarative

Adicional, es necesario arrancar el servidor de video (VcXsrv) con la siguiente configuración:


Como se indicaba anteriormente, para que esto funcione, la opción LIBGL_ALWAYS_INDIRECT debe estar comentada, es decir la variable de entorno LIBGL_ALWAYS_INDIRECT no debe existir.

Aplicaciones Qt5 PySide2:
Para ejecutar aplicaciones programadas en Python con PySide2, fue necesario instalar el siguiente paquete:

$ pip3 install pyside2

Errores comunes:
Un error común es por ejemplo, que aparezca el mensaje "qt.qpa.plugin: Could not load the Qt platform plugin "xcb" in "" even though it was found." esto indica que faltan controladores por instalar, una buena opción es la de activar la variable de entorno QT_DEBUG_PLUGINS=1, lo cual permitirá mostrar información sobre el proceso de ejecución de la aplicación Qt.

$ export QT_DEBUG_PLUGINS=1

Esto permitirá determinar que controladores están faltando en nuestro sistema.

No hay comentarios.:

Publicar un comentario