WSL pour Windows SubSystem Linux, est une solution développée par Microsoft vous permettant de faire tourner différentes distributions Linux sur Windows 10.
Un peu de contexte
Note
Pour plus d'informations sur l'implémentation de WSL 2, une vidéo de présentation et des slides sont disponibles.
WSL premier du nom, est un driver pour Windows implémentant l'API du noyau Linux, qui transforme les appels au noyau en instructions compatibles Windows NT. Ce qui pose de nombreux problèmes de compatibilité notamment avec l'API permettant d'accéder au système de fichiers.

Pour résoudre les différents problèmes de compatibilité, de performances et pour réduire les coûts de maintenance de WSL, la version 2 fait tourner un véritable noyau Linux compilé et maintenu par Microsoft dans Hyper-V (qui est un hyperviseur de type 1).

Activation de WSL 2
À la rédaction de ce guide, pour profiter de WSL2, il vous faudra rejoindre le programme Windows Insider
- Ouvrez les paramètres Windows Insider
- Choisir le type de version d'évaluation "Rapide"
- Ouvir Windows Update
- Cliquer sur "Rechercher les mises à jour" pour télécharger le dernier build

Lancer PowerShell en tant qu'administrateur
- ⊞ Win + R
- Saisir
powershell - Ctrl + ⇧ Shift + ↵ Entrée
Activer les fonctionnalités optionnelles nécessaires
Enable-WindowsOptionalFeature -Online -NoRestart -FeatureName VirtualMachinePlatform Enable-WindowsOptionalFeature -Online -NoRestart -FeatureName Microsoft-Windows-Subsystem-Linux Restart-Computer
Important
Votre ordinateur va redémarrer pour activer les fonctionnalités optionnelles de Windows.
Installer une distribution Linux
Vous pouvez obtenir la liste des distribution disponibles ici
Dans ce guide nous allons installer Ubuntu, libre à vous d'expérimenter avec d'autres distributions.
- Installer Ubuntu puis cliquer sur le bouton Lancer (un terminal s'ouvre alors)
- Choisir un nom d'utilisateur et un mot de passe.
- Quitter le terminal
- Dans Powershell, lister les distributions Linux installées
wsl --list --verbose NAME STATE VERSION * Ubuntu Stopped 1
Passer Ubuntu en WSL2
wsl --set-version Ubuntu 2
Lancer Ubuntu et se positionner dans le répertoire de l'utilisateur courant.
wsl ~ -d Ubuntu
Installer Docker
Arrivé à cette étape, vous vous trouvez maintenant dans le shell Ubuntu.
Pour installer Docker, nous allons passer par le script d'installation de Docker
# Installation de Docker curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh
# On ajoute l'utilisateur courant au groupe Docker sudo usermod -aG docker $USER
# On se reconnecte avec l'utilisateur courant pour appliquer les droits su - $USER
# On lance le démon Docker sudo service docker start
# Tester Docker (Ctrl+C pour stopper le conteneur) docker run --rm -it -p 80:80 containous/whoami
Ouvrir votre navigateur et visiter http://localhost
Note
Les distributions Linux conçues pour tourner dans WSL2 ne sont pas livrées avec des scripts de démarrage tels que System V, Systemd ou encore Upstart. Ce qui veut dire qu'il faudra lancer vous-même le démon docker au démarrage d'Ubuntu via sudo service docker start.
À savoir
Par défaut Windows arrête les conteneurs Linux au bout de quelques secondes en l'absence de tâches de fond. Si telle est votre intention, pensez à arrêter le démon docker via sudo service docker stop avant d'éxécuter la commande exit ou de fermer votre terminal.
Utiliser Systemd
Si vous souhaitez démarrer automatiquement des services au lancement d'Ubuntu, Shayne Sweeney a écrit un guide plutôt complet permettant de lancer Systemd au démarrage d'Ubuntu.
Attention
La section de l'article Access localhost ports from Windows n'est plus nécessaire car la dernière version de WSL 2 le fait déjà.
Info
Dans les grande lignes, l'astuce consiste à remplacer le shell de l'utilisateur root par un script qui lance systemd et qui vous authentifie sur votre session utilisateur via nsenter
Windows Terminal

Windows Terminal (source) est un terminal moderne, configurable et personnalisable qui centralise PowerShell, Cmd, Azure Cloud Shell et vos shells Linux en une seule application.
Personnalisation
L'application est personnalisable via un fichier .json. Utilisez Ctrl + , pour y accéder ou utilisez l'interface de l'application.

Le schéma du fichier est décrit via JSON Schema, le lien est consultable via la propriété $schema. Si vous utilisez VSCode, vous aurez accès à de l'autocomplétion 🎉.
profilescontient toutes les configurations par défaut de chacun de vos shellsschemesvous permet de déclarer des thèmes, utilisables par la suite dans le profil de votre shell via la propriétécolorScheme.keybindingsvous permet de configurer vos raccourcis clavier
Pour plus d'informations sur la personnalisation de Windows Terminal, je vous invite à consulter les articles de Kayla Cinnamon, Program Manager chez Microsoft mais aussi cet article de Scott Hanselman
Info
Des thèmes pour Windows Terminal sont disponibles dans le dépôt Github mbadolato/iTerm2-Color-Schemes. Personnellement, j'utilise le thème Argonaut pour mon shell Ubuntu.
Copier/Coller
Windows identifie les fins de lignes avec la séquence CRLF \r\n.
Sous Linux, les fins de lignes n'utilisent que le caractère LF \n.
Pour éviter de vous retrouver avec des doublements de lignes dans Windows Terminal quand vous collez du texte, je vous suggère d'utiliser AutoHotKey, (qui est un utilitaire permettant d'automatiser des tâches sous Windows).

On va commencer par ouvrir le répertoire des scripts lancés au démarrage de Windows :
- ⊞ Win + R
- Saisissez
shell:startuppuis ↵ Entrée - Créez un fichier
copy-paste-on-windows-terminal.ahk - Éditez-le, et ajoutez le script suivant :
#NoEnv ; Recommended for performance and compatibility with future AutoHotkey releases. SendMode Input ; Recommended for new scripts due to its superior speed and reliability. SetWorkingDir %A_ScriptDir% ; Ensures a consistent starting directory. ; Replace Windows line termination from CRLF to LF while copy/pasting into Windows Terminal #if WinActive("ahk_exe WindowsTerminal.exe") RemoveCrlfFromClipBoard() { Var := Clipboard Clipboard := RegExReplace(Var, "\r\n?|\n\r?", "`n") return } RButton:: ^+v:: RemoveCrlfFromClipBoard() MouseClick, Right return #if
Info
Par défaut, dans Windows Terminal, l'opération coller se fait via 🖱️ Droit ou la combinaison Ctrl + ⇧ Shift + V. Le script les intercepte pour replacer les séquences \r\n par \n
Bug d'affichage
Windows Terminal étant en "Development Preview", il existe encore des bugs qui peuvent ruiner votre expérience utilisateur, mais dans l'ensemble, le terminal est plutôt stable et utilisable.
Si vous rencontrez un bug d'affichage rendant l'interface complètement noire en déplaçant la fenêtre sur votre bureau...

... Il suffit de renseigner une largeur initiale pour la fenêtre de 110 via l'option initialCols. Cela fonctionne aussi avec des valeurs au-delà de 130 🤷 (le mystère reste entier).
Lancer des applications graphiques Linux
Commencez par installer un serveur X pour Windows tel que :
- X410 (payant avec version d'essai),
- ou encore VcXsrv Windows X Server (open-source).
Astuce
Si vous utilisez X410, activez l'option Allow Public Access.

Astuce
Pour VcXsrv, utilisez l'utilitaire Xlaunch, conservez les options par défaut et choisissez Disable Access Control.

Pour finir, ajoutez dans le fichier de configuration de votre shell Linux (ex: .bashrc, .zshrc)
# Récupère l'adresse IP permettant d'accèder au server X tournant sur Windows export DISPLAY=$(cat /etc/resolv.conf | grep nameserver | awk '{print $2; exit;}'):0.0
Puis lancez une application graphique
apt update && apt install -y mesa-utils && glxgears
Vous pouvez même lancer les applications graphiques depuis Docker 🐳. Jess Frazelle, dans son article Docker Containers on the Desktop aborde en détail la marche à suivre. Son dépôt est disponible ici
# Exemple avec InkScape docker run --rm -it -e DISPLAY jess/inkscape
Les alias utiles
À ajouter dans votre fichier .bashrc ou .zshrc
# Rediriger la sortie d'une commande dans le presse-papier Windows # ex: cat ~/.ssh/id_rsa.pub | copy alias copy='clip.exe' # Permet d'ouvrir un fichier, un dossier ou une url dans Windows alias open="rundll32.exe url.dll,FileProtocolHandler" # Alias d'`open` pour des raisons de compatibilité alias xdg-open="open"
Logiciels Windows compatibles avec WSL
Précision
Ceci n'est pas une liste exhaustive, mais de plus en plus de logiciels prévoient le support de WSL 2.
Visual Studio Code
VSCode pour Windows supporte WSL avec le module Remote - WSL

PHPStorm
JetBrains PhpStorm @phpstorm
The 2019.3 Early Access Program gets close to the finish line. But we have something new for you in the fresh build – WSL Support! https://t.co/PgVZbyYoAU pic.twitter.com/wvzdEOrYAo
L'Early Access 2019.3 de PHPStorm pour Windows ajoute le support de WSL et la fonctionnalité ne tardera pas à rejoindre la version stable de L'IDE.

