<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Linux on kenji.blog</title><link>http://kenji.blog/fr/categories/linux/</link><description>Recent content in Linux on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>fr</language><copyright>kenjinote</copyright><lastBuildDate>Sat, 12 Sep 2026 23:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/fr/categories/linux/index.xml" rel="self" type="application/rss+xml"/><item><title>Le guide ultime de configuration de l'environnement de développement pour WSL2 (Windows Subsystem for Linux)</title><link>http://kenji.blog/fr/p/wsl2-ultimate-development-setup-guide/</link><pubDate>Sat, 12 Sep 2026 23:00:00 +0900</pubDate><guid>http://kenji.blog/fr/p/wsl2-ultimate-development-setup-guide/</guid><description>&lt;img src="http://kenji.blog/p/wsl2-ultimate-development-setup-guide/img/eyecatch.jpg" alt="Featured image of post Le guide ultime de configuration de l'environnement de développement pour WSL2 (Windows Subsystem for Linux)" />&lt;p>WSL2 (Windows Subsystem for Linux 2), qui offre un environnement de développement Linux natif sur Windows, est devenu un outil indispensable dans le développement de logiciels moderne. Cependant, il y a un monde de différence en termes de performances et d&amp;rsquo;expérience de développement entre l&amp;rsquo;utiliser dans son état par défaut et le régler de manière appropriée en comprenant son architecture.&lt;/p>
&lt;p>Dans cet article, nous expliquerons de manière exhaustive, avec plus de 10 000 caractères, toutes les étapes pour construire l&amp;rsquo;« environnement de développement ultime » exigé par les ingénieurs professionnels, en commençant par l&amp;rsquo;explication de l&amp;rsquo;architecture fondamentale de WSL2, les paramètres pour maximiser les performances, la construction d&amp;rsquo;un environnement de terminal confortable, l&amp;rsquo;intégration transparente avec Docker et VS Code, et enfin les paramètres réseau avancés.&lt;/p>
&lt;hr>
&lt;h2 id="1-architecture-de-wsl2-et-évolution-par-rapport-à-wsl1">1. Architecture de WSL2 et évolution par rapport à WSL1
&lt;/h2>&lt;p>Afin de libérer tout le potentiel de WSL2, il est d&amp;rsquo;abord important de comprendre sa structure interne. L&amp;rsquo;approche pour exécuter des binaires Linux sur Windows est fondamentalement différente entre le premier WSL (WSL1) et WSL2.&lt;/p>
&lt;h3 id="wsl1--couche-de-traduction-des-appels-système">WSL1 : Couche de traduction des appels système
&lt;/h3>&lt;p>WSL1 a adopté un mécanisme qui traduisait les appels système Linux en API Windows NT en temps réel. Cela avait l&amp;rsquo;avantage d&amp;rsquo;une surcharge de ressources très faible, car aucune machine virtuelle (VM) n&amp;rsquo;était utilisée. Cependant, il était difficile d&amp;rsquo;émuler complètement les appels système complexes, tels que les opérations d&amp;rsquo;E/S du système de fichiers, ce qui entraînait des baisses de performances désespérantes, notamment dans les processus traitant un grand nombre de petits fichiers, comme &lt;code>npm install&lt;/code> de Node.js ou les opérations sur les dépôts Git.&lt;/p>
&lt;h3 id="wsl2--vm-utilitaire-légère-et-noyau-linux-complet">WSL2 : VM utilitaire légère et noyau Linux complet
&lt;/h3>&lt;p>Dans WSL2, l&amp;rsquo;architecture a été remaniée pour qu&amp;rsquo;un véritable noyau Linux, construit par Microsoft, s&amp;rsquo;exécute directement sur une &lt;strong>« VM utilitaire légère » qui utilise un sous-ensemble de l&amp;rsquo;architecture Hyper-V&lt;/strong>. Cela garantit une compatibilité à 100 % des appels système, et en utilisant un disque virtuel (VHDX) avec un système de fichiers natif Linux ext4, les performances d&amp;rsquo;E/S des fichiers ont été considérablement améliorées par rapport à WSL1.&lt;/p>
&lt;p>Le diagramme Mermaid suivant illustre la différence structurelle entre WSL1 et WSL2.&lt;/p>
&lt;pre class="mermaid">
flowchart TD
subgraph &amp;#34;Environnement du système d&amp;#39;exploitation Windows&amp;#34;
A[&amp;#34;Noyau Windows NT&amp;#34;]
A --&amp;gt; F[&amp;#34;Système de fichiers NTFS (Lecteur C:)&amp;#34;]
end
subgraph &amp;#34;Architecture WSL2&amp;#34;
B[&amp;#34;Hyperviseur Hyper-V&amp;#34;]
B --&amp;gt; C[&amp;#34;VM utilitaire légère&amp;#34;]
C --&amp;gt; D[&amp;#34;Noyau Linux (Microsoft)&amp;#34;]
D --&amp;gt; E[&amp;#34;Espace utilisateur Ubuntu (glibc, bash, etc.)&amp;#34;]
D --&amp;gt; G[&amp;#34;Disque virtuel ext4 (.vhdx)&amp;#34;]
end
A -.-&amp;gt;|&amp;#34;Partage de fichiers réseau par le protocole Plan 9 (9P)&amp;#34;| D
style B fill:#f9f,stroke:#333,stroke-width:2px
style D fill:#bbf,stroke:#333,stroke-width:2px
&lt;/pre>
&lt;p>La leçon importante à tirer de cette structure est que &lt;strong>« l&amp;rsquo;accès aux fichiers côté Linux (dans le VHDX) est extrêmement rapide, mais l&amp;rsquo;accès aux fichiers côté Windows (&lt;code>/mnt/c/&lt;/code>) est très lent car il passe par le protocole 9P »&lt;/strong>. Le code source de vos projets doit toujours être placé dans le répertoire personnel côté WSL (&lt;code>~&lt;/code>).&lt;/p>
&lt;hr>
&lt;h2 id="2-analyse-mathématique-des-performances--pourquoi-wsl2-est-il-rapide-">2. Analyse mathématique des performances : Pourquoi WSL2 est-il rapide ?
&lt;/h2>&lt;p>Évaluons quantitativement l&amp;rsquo;amélioration des performances de WSL2 à l&amp;rsquo;aide d&amp;rsquo;un modèle mathématique. L&amp;rsquo;une des opérations les plus chronophages dans le développement de logiciels est le traitement impliquant des E/S pour un grand nombre de fichiers (ex. : installation de bibliothèques ou compilation).&lt;/p>
&lt;p>Le temps d&amp;rsquo;exécution global $T_{total}$ d&amp;rsquo;un traitement est exprimé par la somme du temps de calcul par le processeur $T_{compute}$ et du temps consacré aux E/S disque $T_{io}$.&lt;/p>
$$ T_{total} = T_{compute} + T_{io} $$&lt;p>Dans le cas de WSL1, une surcharge se produit lors de la conversion des opérations côté Linux en opérations NTFS, le temps d&amp;rsquo;E/S est donc modélisé comme suit. Ici, $n$ est le nombre d&amp;rsquo;opérations sur les fichiers, $t_{ntfs\_syscall}$ est le temps d&amp;rsquo;exécution de l&amp;rsquo;appel système côté Windows, et $t_{trans}$ est la surcharge de la couche de traduction.&lt;/p>
$$ T_{wsl1\_io} = \sum_{i=1}^{n} (t_{ntfs\_syscall_i} + t_{trans_i}) $$&lt;p>D&amp;rsquo;autre part, dans le cas de WSL2, le noyau émet directement des E/S vers le système de fichiers ext4, de sorte que la surcharge n&amp;rsquo;est qu&amp;rsquo;un très léger retard $t_{virt}$ dû à la virtualisation.&lt;/p>
$$ T_{wsl2\_io} = \sum_{i=1}^{n} (t_{ext4_i} + t_{virt_i}) $$&lt;p>Dans un système de fichiers classique, comme $t_{ext4} \ll t_{ntfs\_syscall} + t_{trans}$, lorsque $n$ est très grand (des dizaines à des centaines de milliers d&amp;rsquo;opérations sur les fichiers), la différence de temps d&amp;rsquo;E/S entre WSL1 et WSL2 augmente de manière exponentielle.&lt;/p>
&lt;p>De plus, si le taux de surcharge des calculs du processeur dans un environnement virtualisé est $\rho$, avec la dernière virtualisation assistée par matériel (Intel VT-x / AMD-V), il se situe autour de $\rho \approx 0.01 \sim 0.03$ (1 à 3 %). Par conséquent, même dans des tâches purement de calcul, des performances comparables à un environnement Linux natif de $97\% \sim 99\%$ sont atteintes.&lt;/p>
&lt;hr>
&lt;h2 id="3-installation-et-construction-des-bases">3. Installation et construction des bases
&lt;/h2>&lt;p>Sur Windows 10/11, l&amp;rsquo;installation de WSL2 est devenue très simple. Il suffit d&amp;rsquo;ouvrir PowerShell avec les privilèges d&amp;rsquo;administrateur et d&amp;rsquo;exécuter la commande suivante.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># WSL2 et Ubuntu sont installés par défaut&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">wsl&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-install&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Pour spécifier une distribution particulière&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Peut être vérifié avec wsl --list --online&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">wsl&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-install&lt;/span> &lt;span class="n">-d&lt;/span> &lt;span class="n">Ubuntu&lt;/span>&lt;span class="p">-&lt;/span>&lt;span class="mf">24.04&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Après l&amp;rsquo;installation et un redémarrage, il vous sera demandé de configurer un nom d&amp;rsquo;utilisateur et un mot de passe UNIX lors du premier lancement. Cet utilisateur est indépendant de l&amp;rsquo;utilisateur Windows et n&amp;rsquo;est valide qu&amp;rsquo;au sein de WSL.&lt;/p>
&lt;p>Si vous utilisez déjà WSL1, vous pouvez le convertir en WSL2 avec les commandes suivantes.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Convertir une distribution existante en WSL2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">wsl&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-set-version&lt;/span> &lt;span class="n">Ubuntu&lt;/span> &lt;span class="mf">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Définir WSL2 comme version par défaut pour les distributions ajoutées à l&amp;#39;avenir&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">wsl&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-set-default-version&lt;/span> &lt;span class="mf">2&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="4-les-secrets-du-contrôle-des-ressources--wslconfig-et-wslconf">4. Les secrets du contrôle des ressources : .wslconfig et wsl.conf
&lt;/h2>&lt;p>L&amp;rsquo;un des plus grands pièges de WSL2 est la « consommation illimitée de mémoire (gonflement du processus Vmmem) ». Comme WSL2 utilise le cache de page du noyau Linux, chaque opération d&amp;rsquo;E/S consomme de la mémoire de l&amp;rsquo;hôte (Windows) de manière infinie. Pour éviter cela, il est impératif de limiter les ressources via des fichiers de configuration.&lt;/p>
&lt;p>Les fichiers de configuration de WSL2 sont divisés en deux : &lt;strong>&lt;code>.wslconfig&lt;/code> qui affecte l&amp;rsquo;ensemble de Windows&lt;/strong> et &lt;strong>&lt;code>wsl.conf&lt;/code> qui affecte l&amp;rsquo;intérieur de chaque distribution&lt;/strong>.&lt;/p>
&lt;h3 id="41-wslconfig-côté-windows">4.1. .wslconfig (Côté Windows)
&lt;/h3>&lt;p>Créez un fichier dans le répertoire de profil utilisateur de Windows (&lt;code>C:\Users\&amp;lt;Nom_d_utilisateur&amp;gt;\.wslconfig&lt;/code>) pour contrôler l&amp;rsquo;allocation des ressources à la VM.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-ini" data-lang="ini">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># C:\Users\&amp;lt;Nom_d_utilisateur&amp;gt;\.wslconfig&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">[wsl2]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Quantité maximale de mémoire allouée à la VM. Il est recommandé d&amp;#39;utiliser environ 50 % à 75 % de la mémoire totale de l&amp;#39;hôte&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">memory&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">16GB&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Nombre de cœurs de processeur à utiliser (tous les cœurs sont utilisés si omis)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">processors&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">8&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Taille du fichier d&amp;#39;échange (swap)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">swap&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">8GB&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Emplacement du fichier d&amp;#39;échange (si vous souhaitez économiser de l&amp;#39;espace sur le lecteur C)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># swapfile=D:\\wsl\\swap.vhdx&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Activer le transfert localhost (pour accéder à WSL depuis Windows via localhost)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">localhostForwarding&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Libérer automatiquement la mémoire (Windows 11 uniquement)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Libère dynamiquement le cache de page et empêche le gonflement de Vmmem&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">autoMemoryReclaim&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">dropcache&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">[experimental]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Fonctionnalités réseau avancées disponibles dans Windows 11 22H2 et versions ultérieures&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Cela permet la prise en charge d&amp;#39;IPv6 et le partage de la même adresse IP entre WSL et Windows&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">networkingMode&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">mirrored&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">dnsTunneling&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">firewall&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">autoProxy&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">true&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="42-wslconf-côté-linux">4.2. wsl.conf (Côté Linux)
&lt;/h3>&lt;p>Modifiez &lt;code>/etc/wsl.conf&lt;/code> à l&amp;rsquo;intérieur de WSL pour contrôler le comportement spécifique de la distribution.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-ini" data-lang="ini">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># /etc/wsl.conf (Modifié à l&amp;#39;intérieur de WSL)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">[network]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Désactiver la génération automatique de /etc/resolv.conf au démarrage de WSL&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Utile si vous souhaitez configurer un DNS personnalisé (ex. : 8.8.8.8)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">generateResolvConf&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">false&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Définir un nom d&amp;#39;hôte personnalisé&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">hostname&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">WSL-DevNode&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">[automount]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Paramètres lors du montage de lecteurs Windows&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">enabled&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">options&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">&amp;#34;metadata,uid=1000,gid=1000,umask=022&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Changer le point de montage du lecteur C de /mnt/c à /c (pour raccourcir le chemin)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">root&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">/&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">[boot]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Activer systemd (WSL 0.67.6 et versions ultérieures)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Cela permet à snap et à divers démons (tels que Docker) de fonctionner nativement&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">systemd&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">true&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">[user]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Utilisateur connecté par défaut&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="na">default&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s">kenji&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Pour appliquer ces paramètres, vous devez exécuter &lt;code>wsl --shutdown&lt;/code> dans PowerShell pour arrêter complètement la VM WSL avant de redémarrer.&lt;/p>
&lt;hr>
&lt;h2 id="5-lenvironnement-de-terminal-ultime--zsh--powerlevel10k">5. L&amp;rsquo;environnement de terminal ultime : Zsh + Powerlevel10k
&lt;/h2>&lt;p>Rester avec le bash par défaut n&amp;rsquo;augmentera pas votre productivité. En combinant Zsh, qui se vante de puissantes capacités de complétion et de visibilité, avec le thème ultra-rapide « Powerlevel10k », nous allons construire l&amp;rsquo;invite de commande (prompt) la plus puissante.&lt;/p>
&lt;h3 id="51-installation-et-configuration-de-windows-terminal">5.1. Installation et configuration de Windows Terminal
&lt;/h3>&lt;p>Installez « Windows Terminal » à partir du Microsoft Store. Ouvrez la configuration JSON (&lt;code>settings.json&lt;/code>), définissez le profil par défaut sur WSL (Ubuntu) et changez la police pour une Nerd Font orientée développement (par ex., &lt;code>HackGen Console NF&lt;/code> ou &lt;code>MesloLGS NF&lt;/code>).&lt;/p>
&lt;h3 id="52-installation-de-zsh-et-oh-my-zsh">5.2. Installation de Zsh et Oh My Zsh
&lt;/h3>&lt;p>Exécutez les commandes suivantes dans le terminal WSL.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Mise à jour des paquets et installation de Zsh&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt update &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> sudo apt upgrade -y
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt install -y zsh git curl
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Exécuter le script d&amp;#39;installation de Oh My Zsh&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sh -c &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="k">$(&lt;/span>curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh&lt;span class="k">)&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="53-introduction-de-powerlevel10k-et-des-plugins">5.3. Introduction de Powerlevel10k et des plugins
&lt;/h3>&lt;p>Nous allons introduire des plugins pour améliorer encore Zsh (coloration syntaxique et auto-complétion) ainsi que le thème Powerlevel10k.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Powerlevel10k&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git clone --depth&lt;span class="err">=&lt;/span>&lt;span class="m">1&lt;/span> https://github.com/romkatv/powerlevel10k.git &lt;span class="si">${&lt;/span>&lt;span class="nv">ZSH_CUSTOM&lt;/span>&lt;span class="k">:-&lt;/span>&lt;span class="nv">$HOME&lt;/span>&lt;span class="p">/.oh-my-zsh/custom&lt;/span>&lt;span class="si">}&lt;/span>/themes/powerlevel10k
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># zsh-autosuggestions&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git clone https://github.com/zsh-users/zsh-autosuggestions &lt;span class="si">${&lt;/span>&lt;span class="nv">ZSH_CUSTOM&lt;/span>&lt;span class="k">:-&lt;/span>&lt;span class="p">~/.oh-my-zsh/custom&lt;/span>&lt;span class="si">}&lt;/span>/plugins/zsh-autosuggestions
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># zsh-syntax-highlighting&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git clone https://github.com/zsh-users/zsh-syntax-highlighting.git &lt;span class="si">${&lt;/span>&lt;span class="nv">ZSH_CUSTOM&lt;/span>&lt;span class="k">:-&lt;/span>&lt;span class="p">~/.oh-my-zsh/custom&lt;/span>&lt;span class="si">}&lt;/span>/plugins/zsh-syntax-highlighting
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Modifiez &lt;code>~/.zshrc&lt;/code> pour activer le thème et les plugins.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Changements dans ~/.zshrc&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">ZSH_THEME&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s2">&amp;#34;powerlevel10k/powerlevel10k&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Ajouter au tableau des plugins&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">plugins&lt;/span>&lt;span class="o">=(&lt;/span>git zsh-autosuggestions zsh-syntax-highlighting&lt;span class="o">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Enregistrez et exécutez &lt;code>source ~/.zshrc&lt;/code>, l&amp;rsquo;assistant de configuration de Powerlevel10k (&lt;code>p10k configure&lt;/code>) se lancera. Suivez les instructions à l&amp;rsquo;écran pour personnaliser l&amp;rsquo;invite selon vos préférences (style de l&amp;rsquo;invite, présence d&amp;rsquo;icônes, informations à afficher, etc.). Le nom de la branche Git et son statut, la version de Node.js, le temps d&amp;rsquo;exécution des commandes, etc. seront affichés en temps réel, ce qui améliorera considérablement l&amp;rsquo;efficacité du développement.&lt;/p>
&lt;hr>
&lt;h2 id="6-intégration-transparente-de-vs-code-remote---wsl">6. Intégration transparente de VS Code Remote - WSL
&lt;/h2>&lt;p>Pour le développement dans WSL2, l&amp;rsquo;extension « Remote - WSL » est le mécanisme qui permet d&amp;rsquo;accéder de manière transparente aux fichiers dans WSL depuis l&amp;rsquo;IDE (Visual Studio Code) installé côté Windows.&lt;/p>
&lt;h3 id="explication-de-larchitecture">Explication de l&amp;rsquo;architecture
&lt;/h3>&lt;p>Le diagramme de séquence suivant montre comment VS Code communique avec WSL2.&lt;/p>
&lt;pre class="mermaid">
sequenceDiagram
autonumber
participant U as &amp;#34;Développeur&amp;#34;
participant V as &amp;#34;Interface utilisateur de VS Code (Windows)&amp;#34;
participant S as &amp;#34;Serveur VS Code (WSL2)&amp;#34;
participant F as &amp;#34;Système de fichiers ext4 (WSL2)&amp;#34;
U-&amp;gt;&amp;gt;V: &amp;#34;Tapez `code .` dans le terminal WSL&amp;#34;
V-&amp;gt;&amp;gt;S: &amp;#34;Établir une connexion RPC via Vsock&amp;#34;
Note over V,S: Communication via les sockets Hyper-V sans utiliser TCP/IP
S-&amp;gt;&amp;gt;F: &amp;#34;Lire les fichiers sources / Exécuter le Linter&amp;#34;
F--&amp;gt;&amp;gt;S: &amp;#34;Retourner les données et l&amp;#39;analyse&amp;#34;
S--&amp;gt;&amp;gt;V: &amp;#34;Diffuser les résultats du serveur de langage vers l&amp;#39;UI&amp;#34;
V--&amp;gt;&amp;gt;U: &amp;#34;Afficher la coloration syntaxique et les erreurs&amp;#34;
&lt;/pre>
&lt;p>Le VS Code côté Windows fonctionne comme un simple « client léger (UI) », et tous les traitements lourds tels que le Language Server, le débogueur et l&amp;rsquo;exécution du terminal sont gérés par le « VS Code Server » côté WSL. Cela vous permet de garder votre environnement propre uniquement du côté WSL, sans avoir à installer Node.js ou Python du côté Windows.&lt;/p>
&lt;h3 id="paramètres-essentiels-de-vs-code">Paramètres essentiels de VS Code
&lt;/h3>&lt;p>Installez &lt;strong>&amp;ldquo;WSL&amp;rdquo; (ms-vscode-remote.remote-wsl)&lt;/strong> depuis les « Extensions » de VS Code. Ensuite, allez simplement dans le répertoire de votre projet dans le terminal WSL et exécutez &lt;code>code .&lt;/code>, VS Code se lancera côté Windows avec ce répertoire ouvert.&lt;/p>
&lt;p>&lt;strong>Point important (problème des codes de fin de ligne) :&lt;/strong>
Les codes de fin de ligne diffèrent entre Windows et Linux (Windows utilise &lt;code>CRLF&lt;/code>, Linux utilise &lt;code>LF&lt;/code>). Lors d&amp;rsquo;un développement sur WSL, assurez-vous d&amp;rsquo;unifier le paramètre &lt;code>core.autocrlf&lt;/code> de Git et les paramètres de fichier par défaut de VS Code à &lt;code>LF&lt;/code>. Si vous négligez cela, vous rencontrerez des erreurs mystérieuses lors de l&amp;rsquo;exécution de scripts shell ou de conteneurs Docker.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Configuration du code de fin de ligne de Git côté WSL&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">git config --global core.autocrlf input
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Ajoutez également ce qui suit dans le fichier &lt;code>settings.json&lt;/code> de VS Code (Paramètres distants).&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-json" data-lang="json">&lt;span class="line">&lt;span class="cl">&lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;files.eol&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;\n&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nt">&amp;#34;terminal.integrated.defaultProfile.linux&amp;#34;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s2">&amp;#34;zsh&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;hr>
&lt;h2 id="7-optimisation-de-docker-desktop-et-de-lintégration-wsl2">7. Optimisation de Docker Desktop et de l&amp;rsquo;intégration WSL2
&lt;/h2>&lt;p>Pour utiliser Docker dans un environnement WSL2, il existe principalement deux approches.&lt;/p>
&lt;ol>
&lt;li>Installer &lt;strong>Docker Desktop pour Windows&lt;/strong> et activer la fonctionnalité d&amp;rsquo;intégration WSL2&lt;/li>
&lt;li>Installer &lt;strong>nativement le moteur Docker&lt;/strong> directement à l&amp;rsquo;intérieur de WSL2 (ex. : Ubuntu)&lt;/li>
&lt;/ol>
&lt;h3 id="approche-1--docker-desktop-recommandé">Approche 1 : Docker Desktop (Recommandé)
&lt;/h3>&lt;p>Dans la plupart des cas, cela est recommandé car la gestion via l&amp;rsquo;interface graphique et l&amp;rsquo;accès transparent aux conteneurs entre Windows/WSL sont faciles. Vérifiez les points suivants depuis les paramètres de Docker Desktop (Settings).&lt;/p>
&lt;ul>
&lt;li>Cochez &lt;code>General&lt;/code> -&amp;gt; &lt;code>Use the WSL 2 based engine&lt;/code>.&lt;/li>
&lt;li>Cochez &lt;code>Resources&lt;/code> -&amp;gt; &lt;code>WSL Integration&lt;/code> -&amp;gt; &lt;code>Enable integration with my default WSL distro&lt;/code> et activez la distribution à utiliser (Ubuntu) avec le bouton à bascule.&lt;/li>
&lt;/ul>
&lt;p>Cela vous permet d&amp;rsquo;exécuter la commande &lt;code>docker&lt;/code> directement depuis le terminal WSL2, et la communication avec le démon Docker s&amp;rsquo;effectue via des machines virtuelles légères dédiées (&lt;code>docker-desktop&lt;/code> et &lt;code>docker-desktop-data&lt;/code>) gérées par Docker Desktop.&lt;/p>
&lt;h3 id="approche-2--installation-directe-du-moteur-docker-natif">Approche 2 : Installation directe du moteur Docker natif
&lt;/h3>&lt;p>Si vous avez des contraintes de réseau d&amp;rsquo;entreprise (comme éviter la monétisation de Docker Desktop) ou si vous souhaitez réduire au maximum la surcharge de performances, installez Docker en tant que pur serveur Ubuntu après avoir activé &lt;code>systemd&lt;/code> dans &lt;code>/etc/wsl.conf&lt;/code>.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Extrait des instructions officielles d&amp;#39;installation de Docker sur WSL2 Ubuntu avec systemd activé&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt-get update
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt-get install ca-certificates curl gnupg
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo install -m &lt;span class="m">0755&lt;/span> -d /etc/apt/keyrings
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">curl -fsSL https://download.docker.com/linux/ubuntu/gpg &lt;span class="p">|&lt;/span> sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo chmod a+r /etc/apt/keyrings/docker.gpg
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Ajout du dépôt&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">echo&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> &lt;span class="s2">&amp;#34;deb [arch=&amp;#34;&lt;/span>&lt;span class="k">$(&lt;/span>dpkg --print-architecture&lt;span class="k">)&lt;/span>&lt;span class="s2">&amp;#34; signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="s2"> &amp;#34;&lt;/span>&lt;span class="k">$(&lt;/span>. /etc/os-release &lt;span class="o">&amp;amp;&amp;amp;&lt;/span> &lt;span class="nb">echo&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="nv">$VERSION_CODENAME&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="k">)&lt;/span>&lt;span class="s2">&amp;#34; stable&amp;#34;&lt;/span> &lt;span class="p">|&lt;/span> &lt;span class="se">\
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="se">&lt;/span> sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt-get update
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Ajouter l&amp;#39;utilisateur actuel au groupe docker (pour exécuter sans sudo)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">sudo usermod -aG docker &lt;span class="nv">$USER&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Après le redémarrage, &lt;code>systemctl start docker&lt;/code> fonctionnera exactement comme dans un environnement Linux natif et offrira des performances élevées.&lt;/p>
&lt;hr>
&lt;h2 id="8-intégration-des-clés-ssh--authentification-transparente-entre-windows-et-wsl">8. Intégration des clés SSH : Authentification transparente entre Windows et WSL
&lt;/h2>&lt;p>Lors de la réalisation de clones SSH Git ou de la connexion SSH à des serveurs distants, gérer des clés SSH séparées côté Windows et côté WSL est très fastidieux. Pour allier sécurité et commodité, nous allons configurer un pont pour transférer l&amp;rsquo;agent SSH en cours d&amp;rsquo;exécution côté Windows (ou un gestionnaire de mots de passe comme 1Password) vers le côté WSL.&lt;/p>
&lt;p>Ici, nous expliquerons l&amp;rsquo;approche la plus sécurisée et moderne consistant à utiliser la &lt;strong>fonctionnalité d&amp;rsquo;agent SSH de 1Password&lt;/strong> ou &lt;strong>l&amp;rsquo;OpenSSH Authentication Agent de Windows&lt;/strong>, et à la transférer vers un socket de domaine UNIX de WSL2 en utilisant &lt;code>npiperelay&lt;/code> et &lt;code>socat&lt;/code>.&lt;/p>
&lt;h3 id="transfert-de-socket-ssh-agent">Transfert de socket ssh-agent
&lt;/h3>&lt;p>Habituellement, l&amp;rsquo;agent SSH, qui est fourni en tant que Named Pipe (tube nommé) sous Windows, doit être converti en un fichier socket côté WSL. Il est facile d&amp;rsquo;utiliser des fonctionnalités fournies par &lt;code>wsl-ssh-agent&lt;/code> ou 1Password.&lt;/p>
&lt;p>Depuis l&amp;rsquo;écran des paramètres de 1Password, activez « Developer » -&amp;gt; « Use the SSH agent » (Utiliser l&amp;rsquo;agent SSH).
Ensuite, ajoutez la configuration suivante dans le fichier &lt;code>~/.zshrc&lt;/code> ou &lt;code>~/.bashrc&lt;/code> côté WSL pour lier automatiquement le socket lors de la connexion.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-bash" data-lang="bash">&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Ajout dans ~/.zshrc (exemple lors de l&amp;#39;utilisation de 1Password SSH Agent)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">export&lt;/span> &lt;span class="nv">SSH_AUTH_SOCK&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="nv">$HOME&lt;/span>/.ssh/agent.sock
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Transférer avec socat et npiperelay si le socket n&amp;#39;existe pas ou si le processus n&amp;#39;est pas lié au démarrage de WSL&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nv">ALREADY_RUNNING&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="k">$(&lt;/span>ps -aux &lt;span class="p">|&lt;/span> grep &lt;span class="s2">&amp;#34;[n]piperelay.exe -ei -s //./pipe/openssh-ssh-agent&amp;#34;&lt;/span> &lt;span class="p">|&lt;/span> wc -l&lt;span class="k">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">if&lt;/span> &lt;span class="o">[&lt;/span> &lt;span class="nv">$ALREADY_RUNNING&lt;/span> -eq &lt;span class="m">0&lt;/span> &lt;span class="o">]&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="k">then&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="o">[&lt;/span> -S &lt;span class="nv">$SSH_AUTH_SOCK&lt;/span> &lt;span class="o">]&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="k">then&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> rm &lt;span class="nv">$SSH_AUTH_SOCK&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">fi&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Démarrer socat en arrière-plan et connecter le Named Pipe côté Windows au socket UNIX côté WSL&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="o">(&lt;/span>setsid socat UNIX-LISTEN:&lt;span class="nv">$SSH_AUTH_SOCK&lt;/span>,fork EXEC:&lt;span class="s2">&amp;#34;npiperelay.exe -ei -s //./pipe/openssh-ssh-agent&amp;#34;&lt;/span>,nofork &lt;span class="p">&amp;amp;&lt;/span>&lt;span class="o">)&lt;/span> &amp;gt;/dev/null 2&amp;gt;&lt;span class="p">&amp;amp;&lt;/span>&lt;span class="m">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="k">fi&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;ul>
&lt;li>L&amp;rsquo;installation de &lt;code>npiperelay.exe&lt;/code> et l&amp;rsquo;ajout à la variable d&amp;rsquo;environnement PATH côté Windows sont nécessaires au préalable.&lt;/li>
&lt;/ul>
&lt;p>Une fois cette configuration terminée, lors de l&amp;rsquo;exécution de &lt;code>ssh-add -l&lt;/code> depuis le terminal WSL, la liste des clés publiques des clés SSH enregistrées dans 1Password ou côté Windows s&amp;rsquo;affichera. Cela vous permet de passer l&amp;rsquo;authentification en toute sécurité sans avoir à copier les fichiers de clé privée dans WSL.&lt;/p>
&lt;hr>
&lt;h2 id="9-maintenance--optimisation-compression-dun-vhdx-gonflé">9. Maintenance : Optimisation (compression) d&amp;rsquo;un VHDX gonflé
&lt;/h2>&lt;p>L&amp;rsquo;un des plus grands inconvénients de WSL2 est sa spécification selon laquelle « la taille du fichier du disque virtuel côté Windows (.vhdx) ne rétrécit pas automatiquement, même si vous supprimez des images Docker ou des fichiers ». Si vous continuez à développer pendant une longue période, le fichier ext4.vhdx va gonfler jusqu&amp;rsquo;à des dizaines ou des centaines de gigaoctets.&lt;/p>
&lt;p>Pour libérer de l&amp;rsquo;espace disque, vous devez optimiser (Compacter) régulièrement le VHDX depuis le côté Windows.&lt;/p>
&lt;ol>
&lt;li>Tout d&amp;rsquo;abord, arrêtez complètement WSL.
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="n">wsl&lt;/span> &lt;span class="p">-&lt;/span>&lt;span class="n">-shutdown&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;/li>
&lt;li>Ouvrez PowerShell avec des privilèges d&amp;rsquo;administrateur et exécutez la commande &lt;code>diskpart&lt;/code> suivante, ou la commande &lt;code>Optimize-VHD&lt;/code> du module Hyper-V (cette dernière n&amp;rsquo;est disponible que si Hyper-V est activé).&lt;/li>
&lt;/ol>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-powershell" data-lang="powershell">&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Si le module Hyper-V est disponible&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">Optimize-VHD&lt;/span> &lt;span class="n">-Path&lt;/span> &lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="nv">$env:LOCALAPPDATA&lt;/span>&lt;span class="s2">\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx&amp;#34;&lt;/span> &lt;span class="n">-Mode&lt;/span> &lt;span class="n">Full&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Si vous utilisez diskpart&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">diskpart&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c"># Entrez interactivement dans l&amp;#39;invite suivante&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">DISKPART&lt;/span>&lt;span class="p">&amp;gt;&lt;/span> &lt;span class="nb">select &lt;/span>&lt;span class="n">vdisk&lt;/span> &lt;span class="n">file&lt;/span>&lt;span class="p">=&lt;/span>&lt;span class="s2">&amp;#34;C:\Users\&amp;lt;Nom_d_utilisateur&amp;gt;\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu_79rhkp1fndgsc\LocalState\ext4.vhdx&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">DISKPART&lt;/span>&lt;span class="p">&amp;gt;&lt;/span> &lt;span class="n">attach&lt;/span> &lt;span class="n">vdisk&lt;/span> &lt;span class="n">readonly&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">DISKPART&lt;/span>&lt;span class="p">&amp;gt;&lt;/span> &lt;span class="n">compact&lt;/span> &lt;span class="n">vdisk&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">DISKPART&lt;/span>&lt;span class="p">&amp;gt;&lt;/span> &lt;span class="n">detach&lt;/span> &lt;span class="n">vdisk&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">DISKPART&lt;/span>&lt;span class="p">&amp;gt;&lt;/span> &lt;span class="n">exit&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>En effectuant cette opération régulièrement, vous pouvez récupérer la capacité du lecteur C inutilement consommée.&lt;/p>
&lt;hr>
&lt;h2 id="10-conclusion">10. Conclusion
&lt;/h2>&lt;p>WSL2 a complètement dépassé le cadre d&amp;rsquo;être un simple « Linux bonus fonctionnant sur Windows » et a évolué vers une puissante plateforme de développement qui n&amp;rsquo;est pas inférieure, et peut-être même supérieure, à macOS et aux machines Linux natives.&lt;/p>
&lt;p>En appliquant tous les paramètres expliqués cette fois-ci (optimisation des ressources avec &lt;code>.wslconfig&lt;/code>, amélioration du terminal avec Zsh + Powerlevel10k, accès transparent avec VS Code Remote, intégration SSH et maintenance VHDX), un « environnement de développement ultime » rapide, sécurisé et sans stress est achevé.&lt;/p>
&lt;p>La configuration de l&amp;rsquo;environnement demande un peu d&amp;rsquo;effort, mais une fois les paramètres fixés, il ne fait aucun doute que votre future productivité en ingénierie s&amp;rsquo;améliorera considérablement. N&amp;rsquo;hésitez pas à explorer des personnalisations supplémentaires sur la base de ce guide, en fonction de vos propres projets et préférences.&lt;/p></description></item></channel></rss>