<
Media
>
Article

Top 4 des astuces WSL

7
min
03
/
06
/
2025

Introduction

Connaissez-vous le WSL ou Windows Subsystem for Linux, cette fonction très pratique permettant d'exécuter un système Linux au sein de Windows, mais sans passer par une virtualisation lourde comme VirtualBox ?

En tant que développeur, sous Windows, c'est l'outil idéal au quotidien. Il permet de travailler facilement et simultanément avec les environnements Windows et Linux pour différents besoins.

La techno du WSL s'améliorant chaque année, il nous paraissait logique aujourd'hui de partager avec vous nos meilleures trouvailles, de la petite ligne de commande astucieuse jusqu'à la fonctionnalité cachée 🙂 (oui, il y en a !).

Astuce n°1 : Manager ses WSL en CLI

Gérer de multiples instances

Le programme WSL2 nous permet de gérer non pas une, mais plusieurs instances Linux, et ce, directement depuis l'invité de commande (ou PowerShell).

Avant d'installer une distribution de Linux, nous pouvons commencer par afficher les distributions disponibles au téléchargement :

wsl --list --online
Voici une liste des distributions valides qui peuvent être installées.
Installer en utilisant 'wsl.exe --install <Distro>'.

NAME                            FRIENDLY NAME
Ubuntu                          Ubuntu
Debian                          Debian GNU/Linux
kali-linux                      Kali Linux Rolling
Ubuntu-18.04                    Ubuntu 18.04 LTS
Ubuntu-20.04                    Ubuntu 20.04 LTS
Ubuntu-22.04                    Ubuntu 22.04 LTS
Ubuntu-24.04                    Ubuntu 24.04 LTS
OracleLinux_7_9                 Oracle Linux 7.9
OracleLinux_8_7                 Oracle Linux 8.7
OracleLinux_9_1                 Oracle Linux 9.1
openSUSE-Leap-15.6              openSUSE Leap 15.6
SUSE-Linux-Enterprise-15-SP5    SUSE Linux Enterprise 15 SP5
SUSE-Linux-Enterprise-15-SP6    SUSE Linux Enterprise 15 SP6
openSUSE-Tumbleweed             openSUSE Tumbleweed

Avec la commande <span class="css-span">wsl --install</span>, la distribution installée par défaut sera normalement la dernière version LTS d'Ubuntu.

Mais il est possible d'installer également une 2e distribution spécifique qui nous intéresse. Par exemple, la 22.04 LTS, plus ancienne :

wsl --install -d Ubuntu-22.04

On peut alors lister toutes nos versions installées avec un <span class="css-span">wsl -l</span> :

Ubuntu-22.04 (par défaut)
Ubuntu-24.04
Note : il faut bien se rappeler que chaque distribution est une instance bien différente avec un espace de stockage différent :
- toutes les instances Linux peuvent accéder aux fichiers du lecteur <span class="css-span">C:\</span> avec un <span class="css-span">cd /mnt/c/</span>,
- mais depuis le PowerShell, on accède aux fichiers Linux via <span class="css-span">cd \\wsl$\Ubuntu-24.04</span> (ou <span class="css-span">cd \\wsl$\Ubuntu-22.04</span>, etc.)

Maintenant que plusieurs instances WSL sont présentes sur Windows, il faudra penser à désigner la bonne à chaque commande <span class="css-span">wsl</span>, histoire de ne rien laisser au hasard.

Pour cela, deux options s'offrent à nous :

  • soit sélectionner l'instance par défaut avec un <span class="css-span">wsl --set-default Ubuntu-24.04</span>, qui sera implicitement choisie pour toutes les futures commandes <span class="css-span">wsl</span>
  • soit indiquer l'instance utilisée uniquement pour la commande actuelle : <span class="css-span">wsl -d Ubuntu-22.04</span>

Exécuter des commandes dans WSL depuis Windows

Avec l'argument <span class="css-span">--exec</span>, on peut exécuter une commande simple directement dans la machine Linux, mais sans quitter son PowerShell ! 😯

Par exemple, avec cette commande qui nous permet d'obtenir la version du système :

wsl --exec cat /etc/os-release

Ce qui nous affiche :

PRETTY_NAME="Ubuntu 22.04.3 LTS"
NAME="Ubuntu"
VERSION_ID="22.04"
VERSION="22.04.3 LTS (Jammy Jellyfish)"
VERSION_CODENAME=jammy
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=jammy

Et pour des commandes plus complexes, on peut exécuter un script bash présent sur le système de fichiers Linux :

wsl --exec ~/my_script.sh

D'expérience, lancer des commandes avec <span class="css-span">--exec</span> permet de réduire les intermédiaires en agissant directement dans l'environnement voulu, ce qui est très pratique pour lancer des commandes dans une double virtualisation avec Docker Linux par exemple (voir section "Docker dans WSL").

Changer l'emplacement du disque virtuel WSL

Il n'y a pas de magie : s'il y a un système de fichiers persistant dans les WSL, c'est qu'il y a un emplacement de stockage réservé quelque part !

Les fichiers des environnements Linux sont en réalité stockés dans <span class="css-span">C:\Users\<UserName>\AppData\Local\Packages\CanonicalGroupLimited.<Distrib>_<ID>\LocalState\</span> sous forme de fichier <span class="css-span">*.vhdx</span>.

Pour rappel, un fichier <span class="css-span">vhdx</span> ou "Virtual Hard Disk V2" est un disque dur virtuel. Créé initialement par Connectix puis repris par Microsoft, il peut être utilisé avec les émulateurs VirtualBox, Parallels Desktop, ou Hyper-V. Il peut s'étendre jusqu'à 64 To (contre 2 To avec l'ancien format <span class="css-span">vhd</span>).

Pour en revenir à notre espace de stockage WSL : si on voulait stocker nos instances sur un autre disque physique situé sur le lecteur <span class="css-span">D:</span> ? (Au hasard, un bon SSD 🙃)

Eh bien, c'est possible. Pour déplacer ce fameux fichier VHDX :

wsl --shutdown
wsl --manage Ubuntu-24.04 --move D:\My-WSLs

Astuce n°2 : Une IHM avec WSLg

Nous avons appris comment installer et accéder à WSL en ligne de commande. Mais depuis le build 19044 de Windows 10 (et depuis le début de Windows 11), il est également possible d'exécuter des applications possédant une interface graphique. Ces applications sont alors intégrées dans notre environnement Windows (raccourci dans le menu démarrer, icône dans la barre des tâches durant l'exécution, accès au presse-papier, etc.)

Sur une machine Windows 10 sur laquelle WSL était déjà installé, il est nécessaire de réaliser quelques vérifications avant de lancer des applications :

1. Vérifier que la distribution se lance bien en mode WSL version 2

wsl --list --verbose

  NAME      STATE           VERSION
  * Ubuntu    Running         2

  Si ce n'est pas le cas, la commande suivante y remédiera : <span class="css-span">wsl --set-version Ubuntu 2</span>.

2. S'assurer que le noyau WSL soit à jour :

wsl --update
wsl --shutdown # Attention: cela équivaut a éteindre WSL, toute application éxécutée sera terminée"

Une fois cela fait, ou si la machine était suffisamment à jour, la manipulation est transparente :

On commence par installer une application possédant une interface graphique (ex : GIMP) : <span class="css-span">sudo apt install gimp</span>

Il ne nous reste plus qu'à lancer l'application :

  • Soit par l'icône qui est apparue dans le menu démarrer (sous le dossier qui porte le nom de votre distribution)
  • Soit lancer l'application via une CLI ouverte dans la distribution WSL

L'application devrait maintenant s'afficher sur votre bureau.

Gimp depuis le WSL

Astuce n°3 : Docker dans WSL

Docker Desktop est le moyen le plus courant pour installer Docker sous Windows. Cependant l'application Docker Desktop (pas le moteur d'exécution de conteneur docker lui-même) requiert maintenant une licence dans un cadre professionnel pour toute entreprise d'une certaine taille.

Comment faire pour utiliser docker si nous n'avons pas besoin de Docker Desktop ?

Utilisons WSL !

Nous allons principalement suivre les instructions pour la distribution que nous avons installée, ici, Ubuntu : https://docs.docker.com/engine/install/ubuntu/.

Toute commande fournie ci-dessous devra être exécutée dans le contexte de votre distribution WSL, sauf mention contraire.

Commençons par nous assurer de commencer sur une base propre et de désinstaller tout paquet existant pouvant avoir un lien avec docker :

for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

Il est possible qu'aucun de ces paquets ne soient installés et qu'apt vous en notifie.

Configurons le dépôt apt de docker (pour avoir des versions à jour) :

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

Maintenant, installons docker et ses utilitaires :

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

Nous pouvons maintenant utiliser docker, mais nous avons besoin de le faire en utilisant <span class="css-span">sudo</span> :

sudo docker run hello-world
Logo Docker

Pour pouvoir l'utiliser de manière plus fluide, il nous faut ajouter notre utilisateur au groupe <span class="css-span">docker</span>.

Commençons par le créer : <span class="css-span">sudo groupadd docker</span>.

Puis, ajoutons ce groupe à notre utilisateur : <span class="css-span">sudo usermod -aG docker $USER</span>.

Forçons la déconnexion en lançant depuis un terminal windows (non WSL) : <span class="css-span">wsl --shutdown</span>.

Et nous pouvons maintenant utiliser : <span class="css-span">docker run hello-world</span>.

Astuce bonus : un alias pour utiliser docker directement depuis windows

Sous PowerShell éditez votre fichier de profil :

notepad $profile.CurrentUserAllHosts

et ajoutez-y ce contenu :

function docker {
    wsl -- docker $args
}

Vous pourrez maintenant, pour vos prochaines sessions PowerShell appeler les commandes docker directement (ex : <span class="css-span">docker ps</span>).

Pour CMD, la mise en place d'alias est bien plus complexe et sort du cadre de cet article.

Astuce n°4 : Passerelle USB avec Usbipd

D'accord, il est possible d'échanger des fichiers entre l'hôte Windows et l'environnement Linux. Mais qu'en est-il des périphériques USB ?

En vérité cette passerelle existe depuis un certain nombre d'années, mais aujourd'hui elle est grandement simplifiée avec l'outil en CLI usbipd.

Comme son nom l'indique, c'est un programme qui va ouvrir un canal d'échange TCP/IP sur un réseau local à la machine, et rediriger les flux d'un périphérique USB vers et depuis ce canal.

IHM Usbip

Notez qu'il existe une version IHM de l'outil (capture d'écran ci-dessus), mais en tant que développeurs, nous allons nous concentrer sur la version CLI qui nous offre une interopérabilité plus intéressante, par exemple avec des scripts.

Après avoir installé l'outil depuis le setup ou le package manager de Windows : <span class="css-span">winget install usbipd</span>, nous allons être capables de lister les devices disponibles :

usbipd list

Connected:
BUSID  VID:PID    DEVICE                                                        STATE
2-6    0c45:6a17  Integrated Webcam, Integrated IR Webcam                       Not shared
2-10   8087:0033  Intel(R) Wireless Bluetooth(R)                                Not shared
13-6   0424:284c  Hub Feature Controller, Périphérique d’entrée USB             Not shared
14-3   0bda:8153  Realtek USB GbE Family Controller #2                          Not shared

Sur cette liste, on notera le BUSID qui nous permettra de désigner un périphérique spécifique à partager, ainsi que le STATE qui nous indique l'état de partage à proprement parler.

En ouvrant un PowerShell administrateur, on saisit la commande <span class="css-span">bind</span> pour ouvrir un canal de partage, par exemple sur la webcam :

usbipd bind -b 2-6

À ce stade, si on liste à nouveaux les périphériques, on doit voir apparaître le statut <span class="css-span">Shared</span> :

Connected:
BUSID  VID:PID    DEVICE                                                        STATE
2-6    0c45:6a17  Integrated Webcam, Integrated IR Webcam                       Shared

Il ne nous reste plus qu'à assigner le périphérique à une instance WSL :

usbipd attach --wsl --busid 2-6

usbipd: info: Using WSL distribution 'Ubuntu-22.04' to attach; the device will be available in all WSL 2 distributions.
usbipd: info: Using IP address 172.25.224.1 to reach the host.

Le device passe alors dans l'état <span class="css-span">Attached</span> côté Windows, et apparaît dans le contexte Linux :

lsusb

Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 002: ID 0c45:6a17 Microdia Integrated_Webcam_FHD
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Le tour est joué ! 🙂

Le mot de la fin

Nous avons pu vous montrer plusieurs astuces assez étonnantes autour du WSL qui, en parallèle, continue d'évoluer, permettant ainsi de se passer d'outils de virtualisation lourde comme VirtualBox.

Si, comme nous, vous aimez en apprendre toujours plus, il reste encore d'autres sujets très intéressants à explorer du côté des IHM de configuration, de la nouvelle distribution Red Hat RHEL, ou encore de l'import/export des WSL sous forme de fichier, etc.

Cet article a été coécrit avec Antoine-Ali. N'hésitez pas à aller voir également ses publications !

No items found.
ça t’a plu ?
Partage ce contenu
Jean-Noël

Jean-Noël aime sa guitare, sa PS4 (quoi de mieux que de réaliser un super combo sur sa manette) et coder... mais de préférence en Typescript !

Et oui, le Typescript, c’est son dada ! Il y a une très forte interopérabilité, le typage apporte de la rigueur au JS, et tout fonctionne très bien, très vite ! En revanche, quand il s’agit d’algorithmes, il préfère le Rust ! C’est le seul langage pour lequel, lorsqu’il a réussi à compiler, il peut respirer en criant : « MON CODE EST SUUUUR !!! ».

On ne sait pas si c’est pour pouvoir rédiger des tas d’articles pour le blog YOUNUP mais il nous a confié rêver de pouvoir regénérer ses cellules pour une jeunesse et un savoir sans limite. Un mix entre le film « Bienvenue à Gattaca » et les écrits de « Laurent Alexandre » ?

Retrouvez le sur Linkedin