Las aplicaciones de Windows ahora pueden crear e interactuar con los procesos de Linux que se ejecutan dentro del Subsistema de Windows para Linux (WSL) con complementos WSL. En este artículo se proporciona información general sobre cómo funcionan y cómo empezar a usarlos.
Descripción de la funcionalidad del complemento
Los complementos WSL proporcionan estas funcionalidades principales:
Permite a las aplicaciones especificar un ejecutable de Windows que se inicia cuando se inicia la máquina virtual WSL.
El ejecutable de Windows puede crear procesos de Linux dentro de WSL y puede comunicarse directamente con ellos mediante un socket virtualizado.
Con estas, las aplicaciones de Windows pueden basarse en experiencias de WSL y proporcionar funcionalidad adicional relacionada con el Subsistema de Windows para Linux.
Instalación de un complemento
Como creador del complemento WSL, puede instalar el complemento en una máquina estableciendo una clave del Registro para que apunte al archivo DLL del complemento.
Y como usuario de WSL, cualquier aplicación que use instalará automáticamente los complementos WSL como parte de su proceso de instalación normal.
Creación de su propio complemento
Para iniciar un proyecto de complemento, deberá compilar un archivo dll Win32. La manera más sencilla de configurar con esto es probar nuestro proyecto de ejemplo de complemento de WSL. Para ello, puede clonar el repositorio de ejemplo del complemento WSL de una carpeta local con git clone y abrirlo en Visual Studio.
A continuación, puede presionar la “pestaña Compilar” y compilar el proyecto, que generará un archivo DLL listo para usar, probablemente en wsl-plugin-sample\x64\Debug\WSLPluginSample.dll.
Prueba del complemento
Los complementos WSL solo se ejecutarán si firmados digitalmente. Para probar esto, deberá habilitar la firma de prueba en el equipo.
Habilitación de la firma de pruebas y creación de una certificación de prueba
Abra una ventana de PowerShell con privilegios elevados y habilite la firma de pruebas mediante la ejecución de este comando:
## If this command results in "The value is protected by Secure Boot policy and cannot be modified or deleted"
## Then reboot the PC, go into BIOS settings, and disable Secure Boot. BitLocker may also affect your ability to modify this setting.
Bcdedit.exe -set TESTSIGNING ON
Una vez habilitada la firma de prueba (un reinicio puede ser necesario), en un símbolo del sistema de PowerShell con privilegios elevados que se encuentra en el directorio del archivo WSLPluginSample.dll creado anteriormente, crearemos un certificado de prueba de WSL:
# Create the cert
$certname = "WSLPluginTestCert"
$cert = New-SelfSignedCertificate -Subject "CN=$certname" -CertStoreLocation "Cert:\CurrentUser\My" -KeyExportPolicy Exportable -KeySpec Signature -KeyLength 2048 -KeyAlgorithm RSA -HashAlgorithm SHA256 -Type CodeSigningCert
# Export it to a local path
Export-Certificate -Cert $cert -FilePath ".\$certname.cer"
# Sign the DLL file
Set-AuthenticodeSignature -FilePath "C:\dev\Path\To\Your\WSLPlugin.dll" -Certificate $cert
Importe por última vez el certificado a la entidad de certificación raíz de confianza:
En la misma ventana de PowerShell con privilegios elevados, ejecute el siguiente comando para instalar el complemento y asegúrese de cambiar la ruta de acceso al archivo DLL del complemento a la ruta de acceso existente:
Y, cuando haya terminado, puede ejecutar este comando para quitar el complemento (tenga en cuenta que deberá reiniciar el servicio WSL para que surta efecto):
Wsl/Service/CreateInstance/CreateVm/Plugin/ERROR_MOD_NOT_FOUND:> No se pudo cargar el archivo DLL del complemento. Compruebe que la ruta de acceso de registro del complemento es correcta
Wsl/Service/CreateInstance/CreateVm/Plugin/TRUST_E_NOSIGNATURE:> el archivo DLL del complemento no está firmado o el equipo no confía en su firma
Wsl/Service/CreateInstance/CreateVm/Plugin/*:> el archivo DLL del complemento devolvió un error en WSLPLUGINAPI_ENTRYPOINTV1 o OnVmStarted()
Wsl/Service/CreateInstance/Plugin/*:> el archivo DLL del complemento devolvió un error en OnDistributionStarted()
Espacio de usuario de Linux en complementos
Los procesos de Linux creados a través de ExecuteBinary() se ejecutarán en el espacio de nombres raíz de la máquina virtual WSL2. Este espacio de nombres no está asociado a ninguna distribución y tiene un sistema de archivos raíz basado en Mariner muy mínimo.
Ese sistema de archivos es un tmpfs grabable, lo que significa que todos los cambios realizados en él se quitarán cuando se apague la máquina virtual WSL2.
Puede inspeccionar el contenido del espacio de nombres raíz ejecutando wsl --debug-shell mientras WSL se está ejecutando.
Consideraciones adicionales
Todos los enlaces del complemento WSL son sincrónicos, lo que significa que WSL esperará a que se completen los enlaces del complemento antes de continuar.
WSL considera irrecuperable cualquier error devuelto por un complemento (lo que significa que la distribución del usuario no se iniciará)
El código del complemento se ejecuta en el mismo espacio de direcciones que el servicio WSL. Cualquier bloqueo de un complemento bloqueará todo el servicio WSL, lo que podría provocar la pérdida de datos.
Colaborar con nosotros en GitHub
El origen de este contenido se puede encontrar en GitHub, donde también puede crear y revisar problemas y solicitudes de incorporación de cambios. Para más información, consulte nuestra guía para colaboradores.
Comentarios de Windows Subsystem for Linux
Windows Subsystem for Linux es un proyecto de código abierto. Seleccione un vínculo para proporcionar comentarios:
En este módulo, aprenderá a usar el Subsistema de Windows para Linux (WSL) con Visual Studio Code (VS Code). Exploraremos el proceso de instalación y los conceptos básicos del uso del WSL. Además, instalaremos y utilizaremos la extensión WSL de Visual Studio Code. Por último, mostraremos cómo depurar y ejecutar código de Python en VS Code en nuestro entorno de WSL.