WSL : personnaliser le démarrage de Linux avec /etc/wsl.conf

I. Présentation

Le démarrage de chaque distribution Linux qui tourne via WSL (Windows Subsystem for Linux) peut être personnalisé avec le fichier de configuration /etc/wsl.conf.

Si vous souhaitez maîtriser le fichier de configuration "/etc/wsl.conf", vous êtes au bon endroit ! Dans ce tutoriel, je vais vous expliquer comment utiliser le fichier wsl.conf pour personnaliser le démarrage de la distribution Linux gérée par WSL.

Ready ? Go...

🎥 Ce 7ème épisode sur WSL est également disponible au format vidéo :

II. Création du fichier /etc/wsl.conf

Par défaut, le fichier de configuration /etc/wsl.conf n'existe pas. Nous devons le créer grâce à une simple commande :

sudo touch /etc/wsl.conf

Ensuite, il ne reste plus qu'à le modifier à l'aide de notre éditeur préféré (oui, mon éditeur préféré c'est nano, ahah) :

sudo nano /etc/wsl.conf

Le fichier est créé, il est ouvert, c'est bien, mais on fait quoi maintenant ?

Sachez que pour le moment, il y a quatre sections prises en charge sur les versions stables de Windows :

[user]
[automount]
[network]
[interop]

Passons à la suite, où je vais vous montrer quelques exemples.

Reportez-vous aussi à la documentation Microsoft de wsl.conf.

III. WSL [user] : modifier l'utilisateur par défaut

Commençons en douceur : la section [user] accepte un seul paramètre nommé "default". Il sert à spécifier l'utilisateur qui doit être connecté par défaut lorsque l'on démarre la distribution Linux. Bien entendu, cet utilisateur doit exister au préalable, ce qui signifie qu'il doit être créé avec la commande "adduser".

Au sein du fichier wsl.conf, le principe est le suivant : on commence par déclarer le bloc :

[user]

Puis, on ajoute notre directive en dessous. Pour définir "itconnect" comme utilisateur par défaut, cela donne :

[user]
default=itconnect

Au prochain redémarrage, on sera directement connecté avec ce compte sur cette distribution.

Fichier wsl.conf - Exemple [user]

IV. WSL [automount] : Monter les disques locaux de Windows

La section [automount] va permettre de monter les disques locaux de Windows au sein de la distribution Linux. De cette manière, vous pouvez accéder aux données de votre machine Windows depuis Linux. Cette section permet aussi de monter un partage SMB au sein de Linux, automatiquement.

Au sein du fichier wsl.conf, voici comment monter automatiquement les disques Windows dans Linux, au sein de la racine "/windows/" :

[automount]
enabled=true
root=/windows/

Après redémarrage de la machine Linux, ici Ubuntu, on voit bien que je suis directement au sein du dossier "/windows/c/" qui correspond au disque C de Windows.

ls -l
Accès au disque C de Windows depuis Linux

L'alternative consiste à monter manuellement le lecteur ou à partir du fichier /etc/fstab qui permet de déclarer les points de montage (et donc de monter un partage distant via SMB). Cela est possible grâce à la directive mountFsTab de la section [automount] qui est par défaut sur True.

V. WSL [network] : reprendre le contrôle de resolv.conf et hosts

La section [network] sert à paramétrer deux options :

  • generateHosts : est-ce qu'il faut générer le fichier /etc/hosts ? Il sert à déclarer l'adresse localhost, mais aussi d'autres adresses si l'on veut (idéale pour des tests). Avec WSL, il reprend le contenu du fichier hosts de Windows.
  • generateResolvConf : est-ce qu'il faut générer le fichier /etc/resolv.conf ? Il sert à déclarer le DNS, sans lui impossible d'utiliser Internet

Par défaut, ces deux options sont à "True" c'est-à-dire que les fichiers sont générés et préconfigurés. Ce qui permet d'avoir Internet sur la machine, en s'appuyant sur votre machine Windows. Le problème, c'est que si vous modifiez ces fichiers, à chaque redémarrage ce sera écrasé.

Définir ces options à "False" va permettre de reprendre le contrôle sur ces deux fichiers. Par exemple, cela va permettre de définir un DNS personnalisé sur votre machine.

[network]
generateHosts=false
generateResolvConf=false

Si l'on prend l'exemple de "generateResolvConf" qui correspond au fichier /etc/resolv.conf. Actuellement, son contenu est le suivant :

# 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.30.224.1

Si l'on veut définir un DNS personnalisé dans WSL, par exemple le DNS local de notre entreprise, voici ce qu'il faut faire. Définir l'option sur "False" comme ci-dessus :

[network]
generateResolvConf=false

Redémarrer la machine WSL (depuis Windows ou Linux) :

wsl --shutdown

Retourner sur le Shell Linux et supprimer le fichier /etc/resolv.conf dans le but de le recréer, sinon nous ne pouvons pas le modifier.

sudo rm /etc/resolv.conf

On modifie le fichier (ce qui va le recréer en même temps) :

sudo nano /etc/resolv.conf

On ajoute notre serveur DNS personnalisé :

nameserver 192.168.100.11

On valide, voilà nous avons défini un serveur DNS personnalisé sur notre distribution Linux ! Au prochain redémarrage, le fichier ne sera pas écrasé ! 😉

Il est à noter que si vous déclarez generateResolvConf sur "False" et que vous ne définissez pas de DNS vous-même dans le fichier, votre machine Linux ne pourra plus résoudre les noms.

VI. WSL [interop] : empêcher l'ouverture des programmes Windows depuis Linux

La section [interop] agit sur l'interopérabilité entre les deux systèmes : Windows et Linux. En fait, à partir du shell Linux, vous pouvez exécuter des commandes Windows pour ouvrir des programmes. Essayez les deux commandes ci-dessous, vous verrez :

notepad.exe
calc.exe

La section [interop] a deux paramètres possibles :

  • enabled : permets d'activer ou désactiver la prise en charge des commandes Windows depuis Linux. Par défaut, c'est sur "True" (vrai). Lorsque c'est False (faux), ce n'est plus possible
  • appendWindowsPath : permet d'ajouter les chemins de la variable Windows "PATH", notamment "C:\Windows\System32", à la variable d'environnement $PATH de Linux. Par défaut, c'est sur "True" ce qui permet de trouver le Bloc-notes d'un simple "notepad.exe".

L'image ci-dessous permet de voir le contenu de la variable $PATH de Linux lorsque l'option appendWindowsPath est sur True, puis en bas de l'image, lorsqu'elle est sur False.

Sur le même principe que pour les directives précédentes, voici comment déclarer ces options :

[interop]
enabled=false
appendWindowsPath=false

Un redémarrage s'impose, et le tour est joué : le divorce entre la machine Windows et la machine Linux commence maintenant ! 😉

VII. WSL [boot] : exécuter une commande au démarrage de Linux

Comme je vous l'indiquais en janvier 2021, Microsoft a introduit la possibilité d'exécuter une commande au démarrage de Linux via WSL. Néanmoins, c'est disponible uniquement au sein des versions en cours de développement de Windows 10. À l'époque, au sein de Windows 10 Build 21286. À ce jour, et malgré la sortie de Windows 10 21H1, cette nouvelle section [boot] n'est toujours pas incluse dans une version stable de Windows 10.

Malgré tout, je vais vous expliquer son fonctionnement. Comme ça, quand ce sera disponible en version stable, l'article sera déjà au point. Voici comment elle se déclare dans le fichier wsl.conf :

[boot]
command="<commande>"

Reprenons l'exemple proposé par Microsoft et qui permet d'écrire dans un fichier (/home/florian/wslBootHistory.txt) la date et l'heure à chaque fois que la distribution Linux est lancée. Ce qui donne :

[boot]
command="echo WSL booted at $(/bin/date +'%Y-%m-%d %H:%M:%S') >> /home/florian/wslBootHistory.txt"

En image :

Fichier wsl.conf avec [boot]
Fichier wsl.conf avec [boot]
Il n'est pas utile de créer le fichier TXT en amont. Pour tester le bon fonctionnement de notre commande, nous allons faire un shutdown de WSL et relancer le shell de la distribution. Depuis Windows, exécutez :

wsl --shutdown

Ensuite, depuis Linux, si l'on regarde le contenu de notre fichier, on verra qu'il y a bien du contenu :

cat /home/florian/wslBootHistory.txt

Voilà, le tour est joué !

Pour exécuter un script, ce n'est pas plus compliqué :

command="bash /home/florian/monscript.sh"

La section [boot] est très pratique, car elle va permettre de faciliter l'exécution de commandes et de scripts, par exemple pour démarrer un service. Vivement qu'elle soit disponible sur la version stable de WSL !

Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Partager sur Google+ Envoyer par mail

Florian Burnel

Ingénieur système et réseau et cofondateur d'IT-Connect. Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.

florian a publié 3118 articlesVoir toutes les publications de cet auteur

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

 

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.