La vie d’un utilisateur Linux peut être un peu difficile. Parfois, vous devez ou voulez exécuter Windows. Pourquoi Windows ? Parfois, vous avez un ordinateur de travail ou un ordinateur portable que Linux ne prend pas bien en charge. Ou il peut s’agir d’un logiciel. Bien qu’il existe de nombreux programmes qui peuvent éditer, disons, des documents Word, il y a toujours un document qui ne se traduit pas tout à fait correctement. Des choses comme les logiciels de visioconférence fonctionnent parfois sous Linux mais peuvent avoir moins de fonctionnalités.

Donc que fais-tu? Vous pouvez bien sûr dual boot, mais ce n’est pas très pratique. Vous pouvez exécuter Windows dans une machine virtuelle si vous disposez de suffisamment de puissance. Il y a aussi Wine, mais qui a souvent ses propres problèmes avec les fonctionnalités et la stabilité des programmes complexes. Cependant, les versions récentes de Windows fournissent le sous-système Windows pour Linux (WSL).

Avec WSL, vous pouvez avoir la plupart de ce que vous aimez à propos de Linux dans votre session Windows. Vous devez juste savoir comment le configurer, et je vais vous montrer une méthode qui fonctionne pour moi avec des versions raisonnablement stables de Windows 10.

À propos de WSL

WSL est assez puissant car il vous offre un bon environnement Linux et il est étroitement optimisé avec Windows. Cependant, il y a quelques mises en garde. WSL a en fait deux variantes. Le premier, la version 1, fonctionne assez bien, mais n’a pas une compatibilité complète et a des vitesses d’E/S disque plus lentes. La plupart des programmes normaux fonctionneront, mais des choses comme Docker et FUSE ne fonctionneront pas. La version 2 nécessite la prise en charge de la virtualisation sur votre ordinateur, mais fonctionne beaucoup plus rapidement. Il fournit également un véritable noyau Linux, donc presque tout fonctionnera avec WSL2.

Si vous êtes prêt à utiliser les versions récentes pour les développeurs de Windows 10, vous pouvez même exécuter des programmes graphiques si vous êtes prêt à les exécuter bien au-delà du bord. Mais il s’avère que vous n’avez pas du tout besoin d’utiliser la version développeur. S’il y a une chose dans laquelle X est bon, c’est d’avoir un serveur exécuté sur une machine et des clients exécutés sur une autre. Il n’y a donc aucune raison pour que vous ne puissiez pas exécuter des clients X dans WSL et utiliser un serveur X basé sur Windows pour afficher.

Tout d’abord, obtenez un serveur X

Les serveurs X basés sur Windows ne manquent pas, à la fois gratuits et commerciaux. J’ai utilisé celui de Cygwin et, plus précisément, j’ai utilisé une configuration préconfigurée de Cygwin X11 appelée Swan. Malheureusement, le projet Swan semble disparu, mais Cygwin existe toujours et fonctionne bien.

Une autre option est VcXsrv et plusieurs autres projets similaires. La meilleure partie de ceux-ci est qu’ils n’ont pas beaucoup de choses superflues. Cygwin a beaucoup de choses qui, normalement, seront très utiles, mais ces choses seront des doublons de ce que vous voudrez installer sous WSL.

Je vous suggère de démarrer le serveur X en premier et de le tester à partir d’une autre machine Linux ou d’une machine virtuelle. Si vous avez un système comme Cygwin, vous pouvez simplement exécuter des applications natives. Si votre serveur X ne fonctionne pas pour une raison quelconque, WSL ne pourra pas non plus l’utiliser.

Version 2 pour les performances

Si vous utilisez WSL depuis un certain temps, vous devriez vérifier si vous utilisez toujours la version 1. Vous pouvez assez facilement basculer entre les versions et même avoir plusieurs installations avec différentes versions. Pour savoir ce que vous avez, ouvrez un PowerShell en tant qu’administrateur :

wsl --list --verbose

Vous devriez voir une ligne pour chaque distribution Linux que vous avez installée et un numéro de version. Si vous disposez de la version 1, assurez-vous que la prise en charge de la virtualisation est activée dans votre BIOS et assurez-vous également que la fonctionnalité Windows « Plateforme de machine virtuelle » est activée. Saisissez ensuite :

--set-version Ubuntu 2

Bien sûr, utilisez le nom que vous avez vu dans la liste, qui peut être ou non « Ubuntu ». Cela prendra un peu de temps ou vous obtiendrez un message d’erreur si vous n’avez pas les bons paramètres du BIOS et de Windows. Vous pouvez également obtenir des instructions pour télécharger une prise en charge du noyau mise à jour. Suivez simplement les instructions. Si la commande ne prend pas un peu de temps à s’exécuter, elle se plaint probablement de quelque chose qui n’est pas configuré correctement. Vous pouvez le vérifier à nouveau avec la commande list.

La version est importante car la configuration réseau est différente de l’ancienne version. Bien qu’il soit possible de configurer l’ancien WSL de la même manière, autant profiter de l’augmentation des performances. Cependant, si votre machine ou votre système d’exploitation ne répondent pas aux exigences, vous devrez peut-être vous en tenir à la version 1.

Vous pouvez également définir la version 2 comme valeur par défaut à partir de PowerShell :

wsl --set-default-version 2


Si vous utilisez Windows 10 version 2004 ou ultérieure, il est plus facile à installer wsl à présent. Cependant, vous voulez toujours vous assurer que vous utilisez la version 2.

Connectivité

Les clients X11 savent accéder à leur affichage via la variable DISPLAY. Normalement, vous le verrez défini sur :0 ou :0.0 et il s’agit du premier écran sur la machine actuelle. Cela ne fonctionnera pas ici, cependant, car WSL est sur un réseau virtuel qui n’est pas le même que votre système d’exploitation Windows.

Il y a essentiellement trois étapes que vous devrez suivre pour que les choses fonctionnent :

  1. Ouvrez le port 6000 sur le pare-feu de votre PC, si vous en utilisez un
  2. Dites au serveur X d’autoriser les connexions depuis un autre ordinateur (dans ce cas, un ordinateur virtuel)
  3. Définissez la variable DISPLAY pour qu’elle pointe vers l’adresse WSL qui correspond à l’ordinateur Windows

Les étapes exactes dépendront du pare-feu et du serveur que vous utilisez. Cependant, les étapes générales sont les mêmes pour tous les outils que vous utilisez.

Si vous utilisez le pare-feu Windows Defender, vous pouvez ouvrir le port 6000 en recherchant les paramètres du pare-feu Windows Defender. Sélectionnez Avancé, puis créez une nouvelle règle de trafic entrant pour le port TCP 6000. Cependant, Windows peut afficher une fenêtre de pare-feu la première fois que vous exécutez le serveur vous demandant si vous souhaitez autoriser les connexions. Dans ce cas, vous n’aurez probablement pas à configurer le pare-feu manuellement.

La configuration du contrôle d’accès pour votre serveur X dépendra du serveur que vous utilisez. Pour Cygwin, essayez de lancer xhost + à partir d’une invite Cygwin. Pour VcXsv, vous voudrez vérifier l’option de démarrage qui autorise les connexions externes. Vous n’aimerez peut-être pas l’idée d’ouvrir votre serveur X, mais si vous pouvez restreindre les paramètres de votre pare-feu ou utiliser un fichier XAuthority. Tout d’abord, faites-le fonctionner, puis vous pouvez renforcer la sécurité. Si vous êtes derrière un routeur domestique, vous pouvez bloquer les choses à l’aide de son pare-feu.

La variable DISPLAY est la plus simple de toutes. Un moyen rapide d’apprendre l’adresse IP Windows du côté WSL est de regarder comment le serveur de noms est défini. Décharger /etc/resolv.conf et vous devriez voir quelque chose comme ceci :

# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateResolvConf = false
nameserver 172.25.32.1

Cela signifie que la variable DISPLAY doit être définie sur 175.25.32.1:0.0 comme ceci :

export DISPLAY=175.25.32.1:0.0

Vous pouvez automatiser cela avec, disons, awk mais rappelez-vous qu’un script shell approprié ne définira pas votre environnement. Vous auriez besoin de sourcer le script pour permettre cela. Par exemple, voici un script qui réside dans /usr/local/bin/setWinX:

WINIP=$(awk '/^nameserver / { gsub("nameserver ",""); print; }' /etc/resolv.conf)
export DISPLAY="$WINIP:0.0"

Vous pouvez, bien sûr, faire en sorte que cela s’exécute au démarrage, également en l’achetant à partir de .profile:

source /usr/local/bin/setWinX

En fonction de votre serveur X et de vos applications, vous devrez peut-être inciter les programmes à utiliser des pilotes de sortie particuliers. Par exemple, j’ai entendu dire que cette ligne résoudrait certains problèmes :

export LIBGL_ALWAYS_INDIRECT=1

Une fois que vous avez une bonne intégration Linux/Windows, vous pouvez ajouter une prise en charge du lanceur. Configurez votre serveur X pour qu’il démarre automatiquement et vous pourrez mélanger et assortir joyeusement les applications Windows et Linux sur le même écran.

Injuste!

Cela ne semble guère juste. Faire fonctionner Windows sous Linux est délicat car Windows est fermé. Faire fonctionner Linux sous Windows est beaucoup plus facile car Linux est ouvert. Bien sûr, parfois, vous devez vraiment exécuter Linux pour de vrai. Par exemple, j’avais besoin de lire directement une souris et j’ai découvert que la façon dont WSL achemine les événements d’entrée ne ressemble pas beaucoup à une installation Linux normale. Pourtant, cela fonctionne très bien et fonctionne bien aussi.

Ce n’est pas la première fois que nous examinons WSL et cet article contient de bonnes astuces si vous débutez. Comment gérez-vous l’utilisation de Windows et Linux ? La réponse idéale est que vous ne le faites pas et que vous vous en tenez à l’un ou à l’autre. Mais dites-nous ce que vous faites dans les commentaires.