WSL2 UBUNTU USB

Al momento de escribir estas líneas, prácticamente todo lo que conectamos a nuestros ordenadores y móviles es mediante el llamado Universal Serial Bus (USB): cámaras, micrófonos, almacenamiento externo… ¡Incluso es la manera más rápida y segura de sincronizar y respaldar información entre nuestro teléfono móvil y ordenador! ¿Pero qué tiene todo esto que ver con el Windows Subsystem for Linux(WSL)? Veamos.


Ya de entrada os dejé los enlaces a dos artículos publicados en este vuestro blog de Pandora FMS para así facilitar el conocimiento de la tecnología que iré nombrando, y agregaré más de ellos a lo largo de este escrito. Estad atento a dichos enlaces. Aquí tenemos tela marinera así que recomiendo una buena y humeante taza de café negro en vuestras manos antes que paséis a leer esto:


  • Este artículo que escribo es a título personal y el equipo técnico y editorial de Pandora FMS se limita estrictamente a la revisión somera y luego su publicación (ergo esto que leéis). Cualquier error, gazapo (o simplemente un consejo) allí tenéis el cajón de comentarios… ¡Realizad uno por favor!
  • Las pruebas que he realizado han sido sobre máquinas virtuales (VirtualBox®: se pueden crear, borrar, modificar, etcétera sobre Solid State Drive). En todo caso, si se aventuran a probar y comprobar, vosotros sois los únicos responsables de vuestras máquinas reales.

Breve retrospectiva

Siempre afirmo que «para saber a dónde vamos, necesitamos saber de dónde venimos». Desde 1989 yo he trabajado con los productos que vende la empresa Microsoft Corporation®: primero el sistema operativo MS-DOS® y su única forma de interacción por línea de comandos y luego Microsoft Windows® el cual utiliza además el entorno gráfico. Sí, ya lo se bien, el MS-DOS® como tal fue eliminado pero aún quedan sus comandos: fue sustituido con Powershell®, del cual hemos publicado por acá, y ya veremos que es importante para nuestro tema de hoy, por favor leed y volved .

Yo decidí de pleno incursionar y estudiar (repasando y actualizando conceptos) al Software Libre desde el año 2014. Finalizando el año 2016 la empresa Microsoft® nos sorprendió con la noticia de que su SQL Server® podía ser ejecutado sobre GNU/Linux. Yo, quien durante muchos años trabajé instalando y manteniendo servidores de datos para mis clientes, fue una noticia que me impactó mucho y dio cuenta de la firme decisión de esa casa de software en ampliar sus horizontes. Pero esperad, aún hay más.

Si ya la cafeína ha enraizado en vuestras neuronas, acá bosquejé lo que llaman en idioma inglés el BASHware que pudiera afectar a un sistema Windows® por medio del WSL. En el artículo de hoy entraremos en el manejo de los dispositivos USB (en particular atención a micrófonos y cámaras web) bajo WSL2 con Ubuntu 20.04.

WSL y WSL2

Repito de nuevo en recomendar el excelente artículo sobre WSL2 sin embargo el tiempo ha transcurrido y cambios significativos se han presentado. En aquella oportunidad el WSL2 se instalaba por medio de comandos. Ahora, y quiero recalcarlo, noto que por el Panel de Control de MS Windows®, «Programas y características», podemos agregar los dos componentes claves que son Virtual Machine Platform y, obviamente, Windows Subsystem for Linux en el apartado de «Activar o desactivar características de Windows»:

Virtual Machine Platform – MS Windows® feature.
Windows Subsystem for Linux- MS Windows® feature.

Después de esto se debe reiniciar el sistema operativo, ¡esto es ya idiosincrasia de la casa de Redmond! (Después vendrán muchos reinicios más que dejaré por fuera, estarán implícitos).

Reinicio de MS Windows®.

Otro aspecto que fue agregado en julio de 2021 es la posibilidad de agregar las distribuciones Linux que uno desee directamente por la línea de comandos en Powershell (dependiendo de la versión y tipo de MS Windows® que tengáis instalado).

Para ver las distribuciones disponibles:

wsl --list --online

Para instalar Ubuntu 20.04:

wsl --install -d Ubuntu-20.04

Después de cierto tiempo, dependiendo de la velocidad de descarga de internet, preguntará por nombre de usuario y contraseña. Inmediatamente mostrará el estado de las actualizaciones para Ubuntu.

Nuevo usuario en Ubuntu 20.04 para WSL2.

Para configurar a WSL2 como predeterminada:

wsl --set-default-version 2

La opción de descargar y usar desde  la Microsoft Store® sigue siendo válida y disponible, para Ubuntu 20.04 ocupa casi medio gigabyte de espacio.

Descargando Ubuntu 20.04 desde la Microsoft Store®.

La diferencia fundamental entre WSL y WSL2 es que la última descarga un kernel completo de Linux, pero no es un kernel cualquiera, es uno especialmente diseñado para que se acople con el kernel de Windows® (ahondaremos en esto más adelante). Esto quiere decir que las aplicaciones ejecutadas en WSL2 siempre deberán ser «pasadas» -más no interpretadas, como era en WSL- antes de interactuar con cualquier hardware, USB incluído.

En lo único que WSL supera a WSL2 es el intercambio de ficheros entre los dos sistemas operativos, de resto son todas puras ventajas y mejoras en WSL2.

Podman en WSL2

Para que tengáis una idea de lo útil de incluir un kernel completo de Linux en MS Windows®, el software Podman (sucesor de Docker), puede ser ejecutado sobre WSL2 (revisad de nuevo los requerimientos de hardware). Si aún no sabéis lo que es Podman, haced más café y visitad nuestro artículo.

Modo de desarrollador

Una característica que ofrece Powershell® y que podemos usar a nuestro favor una vez hallamos instalado y configurado WSL2 es el modo de desarrollador. Se accede pulsando la tecla de inicio de Windows®, tecleando «Powershell» y escogiendo la configuración de desarrollador. Lo primero es activar el modo de desarrollador y esperar que se termine de instalar el software necesario.

Instalando el modo de desarrollador de Powershell.

Este consta de dos componentes principales: 

  • Device Portal.
  • Device discovery.
Configurando Device Portal.

El Device Portal abrirá el puerto 50080 (recordad configurar debidamente el Windows Defender Firewall®) y desde cualquier navegador web podremos introducir las credenciales configuradas y acceder a una variedad de aspectos que podréis observar en la siguiente imagen (hay un tutorial para establecer conexiones seguras con HTTPS pero no viene al caso para este artículo):

Guardando las distancias, esto es parecido a lo que ofrece eHorus para una monitorización tanto básica como avanzada, si es utilizado en conjunto con Pandora FMS. He incluído esta característica porque las credenciales configuradas son necesarias para el siguiente punto

Por favor, lea también   Dependencias incumplidas en Ubuntu 18 ("usted ha retenido paquetes rotos")

El segundo componente es el Device discovery que, entre otros aspectos, abrirá un servidor SSH para realizar conexión.

Device discovery, modo de desarrollador de Powershell®.

Esto permite abrir una terminal con la línea de comandos de Windows® y una vez allí podremos utilizar directamente WSL2 para cualquier tarea que necesitemos desarrollar de manera remota desde otro equipo. En este caso de ejemplo he utilizado el software PuTTY para conectar desde la máquina real a la máquina virtual Windows 10® con WSL2 instalado y configurado:

Como veis, una vez se han establecido la configuración por defecto, solo con escribir el comando wsl estaremos listos en un ambiente Linux®, que no GNU/Linux sino lo que yo llamo MSW/Linux.

USB en WSL2

Y he aquí que estamos llegando al propósito de esta entrada en el blog: el manejo de USB en WSL2. Al momento de redactar estas líneas, pues hay dos noticias, una mala y otra buena.

  • La mala noticia es que no, por ahora WSL2 es incapaz de ofrecer soporte para USB, así que, por ejemplo, vuestras cámaras y micrófonos conectados por esta vía no estarán disponibles para ser utilizados desde WSL2.
  • La buena noticia es que podemos compilar nuestro propio kernel Linux para WSL2 y tener acceso a uno que otro micrófono o cámara web desde nuestra distribución Linux elegida…. ¿Pero cuáles aplicaciones podríamos usar para ello?

Compilando kernel Linux para WSL2

Antes de hacer cualquier cosa, primero debemos actualizar Ubuntu WSL2 con los comandos de siempre:

$ sudo apt update
$ sudo apt upgrade
Actualización de Ubuntu 20.04 en WSL2.

Y si creían que con esto era suficiente descarga de software… pues no. Ahora se debe instalar lo que yo llamo el entorno de programación (dependencias):

$ sudo apt install build-essential flex bison libssl-dev libelf-dev

Y ahora sí se puede descargar el código fuente del kernel base para Ubuntu en WSL2:

$ sudo git clone https://github.com/microsoft/WSL2-Linux-Kernel.git

Y son 3 gigabytes a descargar. El código fuente. Brutal. Aunque siempre se puede usar el parámetro git clone -depth=1 <repositorio> , esa opción no la utilicé. Recomiendo al menos 100 gigabytes libres en almacenamiento antes de entrar a la carpeta descargada (repositorio clonado) y ejecutar:

$ make -d KCONFIG_CONFIG=Microsoft/config-wsl

En este punto debo aclarar que encontré muchas opciones de configuración para compilar, por ejemplo hallé para instalar el software de manejo de paquetes Snap sobre Debian. Ahora bien, todo esto está por fuera del soporte de Microsoft®, nada podréis reclamar a esta empresa si algo sale mal en el proceso de compilación.

Gestor de paquetes snap en Ubuntu sobre WSL2

Para finalizar deberemos apagar WSL2 con el comando wsl –shutdown y copiar el kernel recién compilado en la siguiente vía no sin antes respaldar el kernel original:

C:\Windows\System32\lxss\tools\kernel

A esta altura ya tendríamos listo para conectar cualquier micrófono o cámara web y tener acceso desde WSL2… pues va a ser que tampoco. Resulta ser que primero debemos conseguir los controladores de hardware para MS Windows®, obvio, y luego los de Linux, meterlos en el código fuente estos últimos y volver a compilar de nuevo. Además a eso le sumamos instalar en Ubuntu WSL2:

sudo apt install linux-tools-5.4.0-77-generic hwdata
sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-tools/5.4.0-77-generic/usbip 20

Y de paso también se debe instalar del lado de Windows®, con un paquete instalador MSI, el proyecto USBIPD-WIN…

Como podemos observar, pues que nos hemos «mal acostumbrado» a la sencillez gráfica de Windows®, por ejemplo, si deshabilitamos el USB por el Administrador de dispositivos ningún hardware podrá conectarse con o sin nuestro consentimiento, ya que estará bloqueado a nivel de sistema operativo.

Bloqueo de dispositivos USB en MS Windows®

Instalando aplicaciones gráficas en WSL2

Para finalizar, aunque en el caso del instalador de paquetes snap está explícitamente sin soporte alguno en Ubuntu sobre WSL2, otras aplicaciones que interactúan con hardware (como el sonido, por ejemplo), podrán ser instaladas pero cuando intenten acceder a los ficheros de hardware (recordar que en Linux todo es un fichero) pues sencillamente no encontrarán tales recursos. Es el caso del software espeak (no, no estoy inventando spanglish, así se llama), mirad:

En teoría, en el blog de Ubuntu se indica que por medio de X Window System Architecture se puede «pasar» la interfaz gráfica de las aplicaciones instaladas en WLS2. Oficialmente Microsoft® anunció justo antes de terminar el año 2021 que las siguientes aplicaciones gráficas se pueden ejecutar:

  • Gedit (mi editor de texto GNU gráfico favorito).
  • GIMP (potente para diseño gráfico).
  • Nautilus (explorador de archivos).
  • VLC (reproductor de audio y vídeo).
  • Aplicaciones basadas en X11 (calculadora, reloj, etcétera).
  • Google Chrome® (bajo vuestro propio riesgo debido a su gran consumo de RAM y recursos).
  • Microsoft Teams® (por cierto, Pandora FMS tiene un conector especial).
  • ¡Incluso Microsoft Edge® web browser para Linux!

Pero esto tiene pega: primero se debe tener Windows 11 Build 22000®,  segundo el tener instalado los controladores de hardware de vídeo para WSL2 (sí, así como lo leéis) y tercero estar inscrito en el programa «Windows Insider®» (yo esto lo veo como «grupo de usuarios beta»).