Table de Matieres
- 1 I. Présentation
- 2 II. Création du fichier /etc/wsl.conf
- 3 III. WSL (user) : modifier l’utilisateur par défaut
- 4 IV. WSL (automount) : Monter les disques locaux de Windows
- 5 V. WSL (network) : reprendre le contrôle de resolv.conf et hosts
- 6 VI. WSL (interop) : empêcher l’ouverture des programmes Windows depuis Linux
- 7 VII. WSL (boot) : exécuter une commande au démarrage de Linux
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…
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.
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.
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
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
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=""
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 :
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 !