Sous-système Windows pour Linux : Ubuntu sur Windows

Ubuntu sur Windows est une variante d'Ubuntu proposée officiellement par Microsoft et Canonical, et qui se déploie nativement sur Windows 10 (uniquement) au moyen de la couche de compatibilité WSL.

Le Windows Subsystem for Linux (WSL), en français "Sous-système Windows pour Linux", parfois grossièrement appelé "Bash sur Windows" est une couche de compatibilité permettant d'exécuter des fichiers ELF (binaires exécutables) pour Linux à partir d'un système Windows.
Le principe est le même que Wine, mais "dans l'autre sens".

Le but de cette distribution est de simplifier le travail des développeurs (en particulier dans le domaine du web) en rendant possible la mise en place d'une structure et d'outils Linux sous Windows, et ainsi d'harmoniser les environnements de développement Windows avec les environnements GNU/Linux qu'on trouve couramment sur les serveurs de production.

Cet outil n'est donc pas destiné au grand public et son intérêt n'est pas de déployer "nativement" un environnement de bureau GNU/Linux sous Windows, même si c'est techniquement envisageable.

Le WSL ne permet pas de faire fonctionner n'importe quelle distribution : seules les versions LTS d'Ubuntu sont supportées. La première distribution Linux concernée fut Trusty (14.04), puis Xenial (16.04) et maintenant Bionic (18.04).
D'autres distributions GNU/Linux sont également proposées : Debian, openSUSE, SUSE Linux Enterprise et Kali Linux.

Les applications graphiques ne fonctionnent pas aussi facilement que les applications en ligne de commande, car elles nécessitent un serveur d'affichage X externe, et les applications utilisant certaines fonctionnalités très spécifiques du noyau Linux risquent aussi de rencontrer des problèmes.

  • Une copie à jour de Windows 10 de type 64 bits.
  • Une session Windows avec les droits d'administrateur.

Pour savoir si votre système est compatible, allez dans les Paramètres → Système → Informations Système. Regardez la build du système ("Version du système d'exploitation") et son type ("Type du système").

Installer le système principal

Autoriser l'application à fonctionner.

Ubuntu sur Windows s'installe depuis le Microsoft Store.

Sur le Microsoft Store vous avez le choix entre plusieurs version d'Ubuntu (et également d'autres variantes de Linux).

  • L'application Ubuntu (tout court) installe la dernière version LTS et pourra être mise à niveau d'une version LTS à la suivante via la commande do-release-upgrade.
  • Ubuntu 16.04 installe Xenial.
  • Ubuntu 18.04 installe Bionic.

Il n'est pas indispensable de créer un compte Microsoft ni de s'identifier pour télécharger ces applications.

Il est possible d'utiliser plusieurs de ces applications simultanément. Vous trouverez de l'aide pour les faire cohabiter (ou sélectionner la distribution par défaut) sur la documentation officielle.

Une fois l'application installée, lancez-la. Son nom est Ubuntu , et vous devriez voir apparaître un message Installing, this may take a few minutes…
( Compter 5 minutes sur un SSD et 15 minutes sur un disque dur.) Après quoi vous devriez être invité·e à entrer un identifiant et un mot de passe.

Installer les logiciels voulus

Le système installé permet d'utiliser des applications en ligne de commande (nano, vim, ssh, git, npm, gem, …), des applications sans interface graphique (apache, nginx, mysql, nodejs, ruby, …) et d'exécuter des scripts bash.

La gestion des paquets en ligne de commande se fait comme sur un système Ubuntu normal, au moyen de la commande apt, par exemple.

Dans le terminal Ubuntu, tapez tout d'abord :

sudo apt update
sudo apt upgrade

Puis, par exemple si on veut utiliser l'éditeur de texte vim :

sudo apt install vim

Installer un serveur X

Pour pouvoir lancer des applications graphiques, il faut installer un serveur X externe pour Windows, comme Xming ou VcXsrv.

Installez par exemple la dernière version de VcXsrv depuis sa page SourceForge, c'est le serveur d'affichage qui sera utilisé dans la suite de cet article.

Les paramétrages applicables au shell bash devraient être valables ici (prompt, couleurs, etc.).

Paramétrage du serveur X

Cliquez sur XLaunch, qui a du apparaître dans votre menu démarrer suite à l'installation de VcXsrv.

Le mode "multiple windows" permet d'utiliser chaque application graphique Linux dans une fenêtre différente du bureau Windows 10, alors que les autres modes permettent de réunir toutes les applications graphiques Linux dans une seule fenêtre (avec ou sans barre de titre, voire en plein écran).
Faites attention à bien régler "0" dans le champ en bas.

Les autres paramètres (après avoir cliqué sur Suivant) ont des valeurs par défaut normalement correctes.

Un message d'erreur suggérant qu'il manque des fichiers .log peut apparaître après avoir cliqué sur Terminer, il ne m'a personnellement pas gêné pour la suite.

Lorsque cette application va se lancer, le parefeu Windows va s'activer et dire qu'il empêche les communications. Il faudra autoriser

Paramétrages divers

Ensuite, éditez le fichier ~/.bashrc (dans le terminal Ubuntu) :

nano .bashrc

À la fin du fichier, ajoutez la ligne

export DISPLAY=:0.0
Pour WSL 2, rajouter cette ligne (source) :
export DISPLAY=$(grep -oP "(?<=nameserver ).+" /etc/resolv.conf):0

Fermez nano en enregistrant. Fermez la fenêtre Ubuntu, et relancez-la depuis le menu démarrer. Il devrait normalement être possible de lancer des applications graphiques, mais des erreurs peuvent subsister :

Paramétrage de DBus

A ne pas prendre en compte avec WSL 2 !

Le WSL n'a pas vraiment été conçu pour les applications desktop : un message d'erreur devrait vite vous indiquer des problèmes avec DBus.

Avec la commande

sudo nano /usr/share/dbus-1/session.conf

éditez le fichier de configuration de DBus et changez-y

<listen>unix:tmpdir=/tmp</listen>

par

<listen>tcp:host=localhost,port=0</listen>

Enregistrez le fichier.
Fermez puis ré-ouvrez "Bash sur Ubuntu sur Windows" afin que les modifications prennent effet.

Vérification du mode graphique

Il est possible d'installer un éditeur de fichier en mode graphique, par exemple vim avec une commande de ce style:

sudo apt install vim-gtk

Puis de vérifier le bon fonctionnement,par exemple avec ces commandes:

echo essai > ESSAI.txt
gvim ESSAI.txt

Installation d'un bureau graphique

Malgré beaucoup de bugs, le bureau Unity peut techniquement être lancé via le WSL (avec énormément d'efforts).

Malgré beaucoup de bugs, le bureau Unity peut techniquement être lancé via le WSL (avec énormément d'efforts)

Si la commande gnome-session se termine prématurément, c'est probablement lié a ce bug
  sudo service dbus restart
        * Stopping system message bus dbus                                                                              [ OK ]
        * Starting system message bus dbus                                                                              [ OK ]
 gnome-session
        gnome-session-is-accelerated: No hardware 3D support.
        gnome-session-check-accelerated: GL Helper exited with code 256
        (gnome-session-check-accelerated-gles-helper:2164): WARNING **: 15:30:56.092: eglGetDisplay() failed
        gnome-session-check-accelerated: GLES Helper exited with code 256
        gnome-session-is-accelerated: No hardware 3D support.
        gnome-session-check-accelerated: GL Helper exited with code 256
        (gnome-session-check-accelerated-gles-helper:2167): WARNING **: 15:31:01.530: eglGetDisplay() failed
        gnome-session-check-accelerated: GLES Helper exited with code 256
        gnome-session-binary[2142]: WARNING: software acceleration check failed: Child process exited with code 1
        gnome-session-binary[2142]: CRITICAL: We failed, but the fail whale is dead. Sorry....

Généralités

Ouvrez Ubuntu sur Windows, et lancez-y vos commandes ou vos applications. Remarquez que rien n’empêche le lancement de plusieurs terminaux.

Le serveur X, si il s'avère nécessaire, doit être lancé depuis le menu démarrer (VcXsrv) avant le lancement de la commande dans le terminal "Ubuntu".

Des environnements de bureau complets peuvent en pratique être installés et lancés, mais remarquez tout de même que le WSL n'a pas été premièrement conçu pour faire ce genre de choses, et des bugs peuvent survenir.

Pour expérimenter ce genre de manipulation, des environnements légers, avec un gestionnaire de fenêtres sans composition graphique avancée, sont à privilégier (Xfce, LXDE, OpenBox, …).

Pour avoir un système plus convivial, l'installation de polices de caractères plus modernes sera sans doute nécessaire.

Pour quitter le WSL, fermez le serveur d'affichage et le terminal.

Accès aux fichiers Windows depuis Linux

Le disque C: est automatiquement monté par Ubuntu au chemin /mnt/c, et il en est de même pour les autres lecteurs (/mnt/d/, …) du système Windows.

Tous ces chemins sont accessibles avec les séparateurs Unix (/ au lieu de \ pour Windows).

Par défaut, tous les fichiers du système Windows appartiennent à l'utilisateur courant avec toutes les permissions (777) et on ne peut pas modifier ces permissions. Il est possible de changer ce comportement, mais avec quelques limitations, en suivant cette documentation (en anglais).

Accès aux fichiers Linux depuis Windows

Pour information, la racine du système de fichiers Linux est
C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs

Si vous avez choisi une version spécifique dans le Windows Store, le chemin sera légèrement différent :
C:\Users\%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs

Si vous avez choisi de nommer votre instance ubuntu, le chemin sera aussi légèrement différent :
C:\Users\TEMP.%USERNAME%\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs

Ne modifiez jamais ces fichiers directement depuis Windows.

Les systèmes de fichiers n'étant pas les mêmes entre Windows et Linux, les programmes Windows ne savent pas les gérer et les fichiers seraient corrompus à coup sûr.

Utiliser des commandes Linux dans l'invite de commande Windows

Pour utiliser une commande Linux depuis l'invite de commande Windows, faites-la précéder de ubuntu run.

Si vous avez installé une version spécifique d'Ubuntu sur Windows, la commande est légèrement différente : ubuntu1604 run ou ubuntu1804 run par exemple.

Par exemple pour faire ls -al depuis l'invite de commande Windows, tapez :

ubuntu run ls -al

Utiliser des programmes Windows depuis Linux

Il est aussi possible d'exécuter des programmes Windows depuis la console Ubuntu. Il suffit d'appeler les commandes avec leurs extensions Windows (couramment .exe, .bat ou .cmd) :

notepad.exe

Désinstallation

Pour supprimer le logiciel installé en conservant les données de l'utilisateur, effectuer la commande windows

 lxrun /uninstall 

Pour tout supprimer, effectuer la commande windows

lxrun /uninstall /full 

Pour réinstaller facilement, effectuer la commande windows

lxrun /install 

Il devrait bientôt être possible d'accéder de façon standard aux répertoires "linux" stockés par wsl dans la partition C: sans avoir besoin de l'utiliser.

Cela serait possible avec la version 19h1 qui sera diffusée en avril 2019

Les partitions formatées EXT4 ne sont toujours pas montables manuellement. Seules les partitions FAT32 le deviennent.


Contributeurs : roschan, Revoxandco, krodelabestiole

  • wsl.txt
  • Dernière modification: Le 09/01/2020, 15:19
  • (modification externe)