WSL 2 - Windows Subsystem for Linux

Introduction

WSL 2 utilise une machine virtuelle plutôt qu’une couche de traduction entre Windows et Linux (WSL). Ça se lance plus vite et l’intégration avec Windows est bien plus aboutie.

Il faut être en Windows 10 Version 1903 ou supérieure. À vérifier avec l’utilitaire WinVer (à lancer avec WIN + R). En octobre 2020 je suis sous la version 2004.

Installation

  • Touche Win
  • Taper “Fe” (comme le début du mot “Features”)
  • Choisir “Activer ou Désactiver des fonctionnalités Windows”

Sélectionner “Sous-système Windows pour Linux” et “Plateforme d’ordinateur virtuel”. Cliquer sur “OK” et laisser le PC rebooter.

Quand on est de retour sous Windows

  • Aller sur le Windows Store
  • Chercher Ubuntu
  • Télécharger et installer la 20.04 (on est en Oct 2020). Lors de l’installation il faudra créer un utilisateur et lui attribuer un mot de passe.

Gestion

Pour connaître la version en cours d’utilisation, ouvrir PowerShell et saisir :

PS C:\Users\phili> wsl -l -v
  NAME            STATE           VERSION
* Legacy          Stopped         1
  Ubuntu-20.04    Running         2

On voit que j’ai un vieil Ubuntu qui traîne (Legacy) , qui est stoppé, qui est celui qui se lance par défaut si je tape “wsl” dans Powershell et qui est en version 1.

Pour faire en sorte que Ubuntu 20 devienne la distribution par défaut et vérifier que c’est bien pris en compte, on peut taper :

PS C:\Users\phili> wsl --setdefault Ubuntu-20.04
PS C:\Users\phili> wsl -l
Distributions du sous-système Windows pour Linux :
Ubuntu-20.04 (par défaut)
Legacy

Si Unbuntu 20 est en Version 1, pour le forcer à fonctionner en version 2, taper :

 PS C:\Users\phili> wsl --set-version Ubuntu-20.04 2

Cela ne sera peut-être pas possible directement et il vous sera demandé de télécharger un update du kernel sur la page https://docs.microsoft.com/fr-fr/windows/wsl/wsl2-kernel. Une fois téléchargé et installé on peut relancer la demande (–set-version). Ensuite la commande “wsl -l -v” doit retourner la version 2. Pour s’assurer de fonctionner en version 2 par défaut, dans PowerShell, on peut saisir :

PS C:\Users\phili> wsl --set-default-version 2

4 façons de lancer un shell

Dans PowerShell, pour passer en mode Linux, je tape wsl. Le prompt change. Au pire je peux saisir une commande du type “lsb_release -a” pour me rassurer. Pour quitter la session et revenir à Powershell je tape “exit”.

Si à partir du prompt PowerShell je ne veux pas lancer la distribution par défaut je peux, dans mon cas, saisir :

PS C:\Users\phili> wsl -d legacy

Il peut être utile de lire cette page : https://docs.microsoft.com/fr-fr/windows/wsl/wsl-config

Si j’utilise le Windows Terminal je peux lancer une session Ubuntu dans un autre onglet.

Pour lancer une console Linux dans une console indépendante

  • Touche Win
  • Taper “Ub”
  • Ubuntu apparaît
  • Cliquer sur Enter

Une fois sous Linux

philippe@SURFACE:~$ uname -a
Linux SURFACE 4.19.128-microsoft-standard #1 SMP Tue Jun 23 12:58:10 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux
philippe@SURFACE:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.1 LTS
Release:        20.04
Codename:       focal

Faire la mise à jour. C’est du Linux classique. Normal, on est sous Linux 😁

philippe@SURFACE:~$ sudo apt update
philippe@SURFACE:~$ sudo apt upgrade

Interactions avec Windows

Lancer VS Code à partir du prompt Linux. Ça c’est super cool et la réalisation est vraiment top.

philippe@SURFACE:~$ code .

Si besoin il va installer le serveur

philippe@SURFACE:~$ code .
Installing VS Code Server for x64 (d2e414d9e4239a252d1ab117bd7067f125afd80a)
Downloading: 100%
Unpacking: 100%
Unpacked 2357 files and folders to /home/philippe/.vscode-server/bin/d2e414d9e4239a252d1ab117bd7067f125afd80a.

Relancer VS Code à partir du prompt Linux

philippe@SURFACE:~$ code .

L’application Windows VS Code se lance. À gauche, en bas et en vert, je retrouve la connexion à WSL Ubuntu-20.04 et en haut j’ai bien la liste des fichiers du répertoire Linux à partir duquel j’ai invoqué VS Code.

À partir de là je peux créer des fichiers, les sauver etc. Attention tout sera sauver dans le contexte Linux. Bref, c’est le meilleur des 2 mondes.

Dans le cas d’un développement, je peux aussi débugger à partir de VSCode. Par exemple ci-dessous j’ai créé un répertoire Tmp ainsi qu’un fichier Python test.py. Pour débuguer, la toute première fois, VS Code m’a demandé d’installer pip. Pour cela j’ai fermé Code puis dans la console Linux j’ai tapé :

philippe@SURFACE:~/Tmp$ sudo apt install python3-pip

Ensuite, je relance VS Code à partir de la console Linux. VS Code me propose d’installer une extension pour Python puis un Linter. Je dis oui à tout. Bref, à un moment je peux taper F5 puis F10 pour tracer mon code. Là aussi, c’est que du bonheur. Merci les gars ✌

Je n’ai pas encore fait le test avec un bout de code C++ mais j’imagine que c’est le même principe. De même je ne sais pas encore si je peux appeler Visual Studio (Visual Studio 2019 par exemple, pas Visual Studio Code).

Accès aux fichiers

Depuis la console Linux, si je veux accéder à me fichiers Windows je vais dans /mnt/c. Ne pas hésiter à utiliser “sudo” dans certains cas.

Bien voir le format de l’adresse du répertoire qui est du style

\\wsl$\Ubuntu-20.04\home\philippe

Là, je peux faire ce que je veux. Copier, modifier, supprimer. Bien sûr, si je veux aller mettre le bronx dans \wsl$\Ubuntu-20.04\root, là ça ne va pas passer.

Depuis Windows, je peux bien sûr lancer Explorer (WIN + E) puis taper \wsl$ dans la barre d’adresse. C’est quand même plus pratique que ce que l’on avait avant. Lire le premier point de cette page si besoin.

Faut peut-être passer un peu de temps sur cette page : https://docs.microsoft.com/fr-fr/windows/wsl/reference

Dupliquer une distribution

# créer un répertoire pour stocker une image de base
PS C:\Users\phili\Documents\Temp> mkdir ./WSL-Copy

# Se déplacer dans le répertoire
PS C:\Users\phili\Documents\Temp> cd .\WSL-Copy\

# Y exporter l'image
PS C:\Users\phili\Documents\Temp\WSL-Copy> wsl  --export Ubuntu-20.04  Ubuntu-20.04-default.tar

# Vérifier
PS C:\Users\phili\Documents\Temp\WSL-Copy> ls
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        26/10/2020     23:37     1699194880 Ubuntu-20.04-default.tar

# importer l'image sous un nouveau nom
# wsl --import Nom_Nouvelle_Distro Chemin_Répertoire_Nouvelle_Distro Source_Distro --version [1,2]
PS C:\Users\phili\Documents\Temp\WSL-Copy> wsl --import Ubuntu-20.04-testing ./Ubuntu-20.04-testing ./Ubuntu-20.04-default.tar --version 2

# Vérifier le contenu du répertoire Ubuntu-20.04-testing
PS C:\Users\phili\Documents\Temp\WSL-Copy> ls .\Ubuntu-20.04-testing\
    Répertoire : C:\Users\phili\Documents\Temp\WSL-Copy\Ubuntu-20.04-testing
Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a----        26/10/2020     23:44     1911554048 ext4.vhdx

# Vérifier que la nouvelle distribution est bien disponible
PS C:\Users\phili\Documents\Temp\WSL-Copy> wsl -l -v
  NAME                    STATE           VERSION
* Ubuntu-20.04            Stopped         2
  Ubuntu-20.04-testing    Stopped         2

# La lancer depuis l'invite PowerShell
PS C:\Users\phili\Documents\Temp\WSL-Copy> wsl -d Ubuntu-20.04-testing

# Tout casser...

# Une fois sous Powershell la désinscrire
PS C:\Users\phili\Documents\Temp\WSL-Copy> wsl --unregister Ubuntu-20.04-testing

# Vérifier
PS C:\Users\phili\Documents\Temp\WSL-Copy> wsl -l
Distributions du sous-système Windows pour Linux :
Ubuntu-20.04 (par défaut)

# Vérifier qu'il n'y a plus rien dans le répertoire Ubuntu-20.04-testing où on avait stocké la distribution dupliquée
PS C:\Users\phili\Documents\Temp\WSL-Copy> ls .\Ubuntu-20.04-testing\

Bon, la suite au prochain épisode…


Back to top

Published on: Oct 24 2020 at 02:35 PM | Last updated: Jan 12 2023 at 12:10 AM

Copyright © 1964-2025 - 40tude