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:
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.
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.