Windows Subsystem for Linux (WSL) permite ejecutar un entorno GNU/Linux, incluida la mayoría de las herramientas, utilidades y aplicaciones de línea de comandos, directamente en Windows, sin modificaciones y sin la sobrecarga de una máquina virtual tradicional o una configuración de arranque dual.

Instalación inbox

Hasta ahora había usado el mismo método que se utiliza en la instalación manual de WSL para agregar las siguientes características opcionales a nuestra imagen WIM de Windows 10/11 usando el comando dism.exe de forma offline:

# Microsoft-Windows-Subsystem-Linux (WSL 1)
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

# VirtualMachinePlatform (WSL 2)
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

WSL Update

El método anterior requiere que se instale la versión más reciente del WSL 2 Linux Kernel para poder ejecutar WSL dentro de la imagen del sistema operativo Windows.

El enlace a wsl_update_x64.msi para instalar el paquete Windows Subsystem for Linux Update debería apuntar siempre a la versión más reciente pero, a dia de hoy, únicamente instala la versión 5.10.16 tal como se muestra en la siguiente captura:

WSL Update 5.10.16

El último kernel disponible a día de hoy a través de Windows Update es la versión 5.10.102.2 del 25 de marzo de 2022. Se puede descargar un fichero *.cab desde el Microsoft Update Catalog para extraer el fichero wsl_update_x64.msi e instalarlo de forma desatendida.

En GitHub está disponible el código fuente de la versión estable más reciente del kernel a día de hoy, la 5.15.133.1 del 7 de octubre de 2023.

Para compilar este código fuente usando las opciones de configuración optimizadas por Microsoft para que funcione correctamente en Windows/WSL 2 hay que hacer lo siguiente desde una distribución reciente de Ubuntu:

sudo install build-essential flex bison libssl-dev libelf-dev
make KCONFIG_CONFIG=Microsoft/config-wsl

WSLg Preview

Además, sería interesante instalar el componente WSLg o Windows Subsystem for Linux GUI que permite habilitar el soporte para ejecutar aplicaciones Linux gráficas (X11 y Wayland) integradas totalmente en la experiencia de escritorio de Windows.

glxgears en WSLg

El enlace a wsl_graphics_support_x64.msi para instalar el paquete Windows Subsystem for Linux WSLg Preview debería apuntar siempre a la versión más reciente pero, a dia de hoy, únicamente instala la versión 1.0.26 tal como se muestra en la siguiente captura:

WSLg Preview 1.0.26

En GitHub está disponible el código fuente de la versión estable más reciente de WSLg a día de hoy, la 1.0.51 del 24 de marzo de 2023.

Microsoft Store

El 22 de noviembre de 2022 se anunció que el Windows Subsystem for Linux estaría en la Microsoft Store para facilitar su actualización sin tener que esperar a una actualización del sistema operativo Windows.

WSL en Microsoft Store

WSL 2

Esto hace que los comandos wsl.exe --install y wsl.exe --update instalen WSL desde la Microsoft Store si no se indica lo contrario mediante el parámetro --web-download.

Este cambio ha causado muchas confusiones a la hora de “tener la versión más reciente de WSL” ya que puede haber problemas si se mezclan componentes instalados a nivel del sistema operativo con componentes instalados desde la Microsoft Store.

De hecho, al usar el comando --install para instalar WSL desde la Microsoft Store:

  • no se habilita el componente opcional Windows Subsystem for Linux
  • no se instalan los paquetes MSI WSL kernel y WSLg al no ser ya necesarios (están incluídos en el WSL package)
  • se habilita el componente opcional Virtual Machine Platform
  • se habilita el parámetro --version para mostrar información sobre la instalación

Instalación WSL desde Microsoft Store

Nota: El parámetro --version no existe si se está ejecutando WSL instalado como componente del sistema operativo, por lo que es una manera sencilla de saber el tipo de instalación que tenemos.

Después de reiniciar el equipo para completar la instalación de WSL se pueden usar los parámetros --status y --version para comprobar el estado y versiones tal como se muestra a continuación:

WSL 2 Status/Version

También se puede comprobar que únicamente se ha instalado la característica opcional VirtualMachinePlatorm:

WSL 2 Features

WSL 1

En general interesa utilizar WSL 2 en lugar de WSL 1 ya que aumenta el rendimiento del sistema de archivos y agrega compatibilidad total con las llamadas al sistema gracias al uso de un kernel de Linux real.

Cuando es necesario seguir usando WSL 1 por compatibilidad se tiene que utilizar el parámetro --enable-wsl1 para habilitarlo.

Algunos de los motivos para usar WSL 1 en lugar de WSL 2 son:

  • Guardar ficheros del proyecto en Windows en lugar de Linux
  • Acceder al puerto serie o USB
  • Requerimientos de memoria estrictos
  • Direccionamiento IP en la misma red (bridge) que el host

Habilitar WSL 1 al instalar desde WSL desde la Microsoft Store

Después de reiniciar el equipo para completar la instalación de WSL se pueden usar los parámetros --status y --version para comprobar el estado y versiones tal como se muestra a continuación:

WSL 1 Status/Version

Nota: Al habilitar WSL 1, también se instala el componente opcional Windows Subsystem for Linux que no se instala al relizar una instalación por defecto desde la Microsoft Store.

WSL 1 Features

Problemas

Mientras realizaba diferentes pruebas para escribir este artículo he encontrado algunos problemas que pueden dificultar la instalación desatendida durante el OSD para un entorno multiusuario como el nuestro, donde los usuarios no tienen permisos de Administrador.

UAC al instalar WSL

A día de hoy, aún teniendo permisos de Administrador, aparece un mensaje de UAC para el “Host Process for Windows Services” durante la instalación de WSL desde la Microsoft Store tal como muestro en el siguiente vídeo:

Nota: En el repositorio de WSL en GitHub hay abierta la issue 9032 sobre este problema.

Cada usuario necesita su kernel

La instalación inicial de WSL desde la Microsoft Store realizada por un usuario con permisos de Administrador no sirve para el resto de usuarios del ordenador.

Cada usuario necesita instalar los diferentes componentes de WSL, como el kernel, tal como se indica en los mensajes mostrados en la siguiente captura de pantalla:

Cada usuario necesita su Kernel de WSL 2

Si un usuario sin permisos de Administrador ejecuta wsl.exe --update, aparecerá un mensaje de UAC para introducir las credenciales de un usuario que sí los tenga. Si el usuario cancela esta elevación de permisos, la instalación fallará al 90% con el código de error 0x80240066.

Si el usuario intenta instalar una distribución ejecutando wsl.exe --install -d Ubuntu, ésta parece que se instala correctamente pero falla con el código de error 0x800701bc. Esto significa que WSL 2 requiere la actualización del componente kernel que no se ha podido realizar anteriormente por falta de permisos.

Instalar WSL requiere elevación

La ejecución del comando wsl.exe --install desde un usuario sin permisos de Administrador en un ordenador sin WSL (es decir, sin las características opcionales ni el kernel instaladas previamente) hace aparecer un mensaje de UAC para elevar los permisos.

Diferentes ubicaciones del kernel

El kernel instalado usando el MSI o las actualizaciones directas desde Windows Update se encuentra en C:\Windows\System32\lxss\tools\kernel.

En cambio, si se ha instalado a través de la Microsoft Store o la descarga web desde GitHub, se encuentra en C:\Program Files\WSL\tools\kernel.

Nota: Se puede utilizar el fichero .wslconfig para indicar cuál de ellos se quiere utilizar.

Soluciones

Evitar instalar desde la Microsoft Store

Para evitar la instalación de componentes desde la Microsoft Store es necesario:

  • Instalar las características opcionales usando dism.exe
  • Instalar el kernel de WSL2 utilizando el fichero MSI (descargado desde el catálogo de WU)
  • Instalar WSLg utilizando el fichero MSI
  • Activar la opción Receive updates for other Microsoft products

Con esta instalación, un usuario sin permisos de Administrador puede instalar una distribución usando el comando wsl.exe --install -d <Distro> y que funcionen las aplicaciones gráficas.

Y, además, puede actualizar WSL desde la Microsof Store, usando el comando wsl.exe --update --web-download (aunque la ayuda indique lo contrario tal como he explicado en este hilo de X):

WSL Inbox to Store

Usar MakeMeAdmin

Otra opción, para evitar trabajar siempre con permisos de Administrador, es usar MakeMeAdmin, una aplicación de código abierto que permite elevar temporalmente los permisos de una cuenta de usuario estándard al nivel del Administrador.

La instalación de cualquier componente de WSL que requiera elevación, se haría mediante la ayuda de MakeMeAdmin para tener los permisos necesarios.

Referencias