Catégories
VSCode

WSL: un shell Linux sous Windows 10

Lorsqu’on travaille sous Windows, il nous faut parfois la possibilité d’accéder à un environnement Linux.
Pour cela nous pouvons utiliser les distributions Debian, Ubuntu ou encore Kali avec une technologie dénommée WSL (maintenant WSL2) pour Windows Subsystem for Linux (MSDN, aperçu global de l’archi et interop Win/Linux) dispo dans Microsoft dans Windows 10 64 bit.

Pourquoi Linux dans Windows ?

Historiquement on utilisait (et on utilises toujours pour des raisons de perf) des ordinateur en dual boot (Bootcamp pour OSX) ou des machines virtuelles et depuis peu des conteneur Docker.

Linux est parfois encore « nécessaire » pour les développeurs, en raisons de compatibilité/perf avec l’outillage Javascript (Node, React, Webpack etc.) même s’il est possible d’utiliser Nodejs et ses packages npm sous Windows nativement.
Il est également possible d’utiliser des outils dispos uniquement sous Linux (comme des CLI) et aussi d’automatiser des taches avec des scripts shell par exemple.

Pour les développeurs qui utilisent VSCode, ce Linux est également disponible dans le terminal intégré (CTRL + ALT + O).

Installer WSL Debian

installer Linux (WSL) pour Windows 10 depuis le Microsoft Store (build > 1709) et choisir sa distribution parmi celles-ci (Debian forever 😜):

pour les anciennes build de Windows 10 précédent la Fall Creators Update, suivre le tuto de Korben ou la doc Ubuntu-fr et plus d’infos ici)

Configurer la distribution à utiliser

Il est possible d’installer plusieurs distros Linux en mode WSL, et il faut pouvoir les gérer (fixer celle qu’on veut utiliser par défaut par ex).
Pour cela il existe: wslconfig.exe (anciennement lxrun.exe) à utiliser dans un shell DOS:

wslconfig /l 
wslconfig /s <DistributionName>

Home directory

Avec WSL2 il est possible de configurer le home directory qui par défaut pointe sur le dossier Windows %HOMEPATH% et pour avoir le dossier de démarrage correspondant au ~ Linux, il suffit d’ajouter ce paramètre dans le settings.json (fichier de conf du Terminal):

"startingDirectory": "//wsl$/Debian/home/behrouze"

Voir d’autres config et astuces là: devblogs.microsoft.com/commandline/windows-terminal-tips-and-tricks

WSL et Visual Studio Code

Configuration

Il est possible d’exploiter ce nouveau shell Linux depuis le du terminal intégré de VSCode, pour cela la configuration s’effectue en ajoutant dans les User Settings (CTRL + , ) le chemin vers le binaire bash de WSL:

"terminal.integrated.shell.windows": "C:\\WINDOWS\\System32\\wsl.exe"

anciennement:

"terminal.integrated.shell.windows": "C:\\WINDOWS\\sysnative\\bash.exe"

doc MS à propos du Terminal Intégré de VSCode

Debugger Nodejs WSL dans VSCode

Pour debugger une application Nodejs lancée à travers WSL avec VSCode, il suffit de rajouter l’attribut "useWSL": true  dans le launch.json

{
  "type": "node",
  "request": "launch",
  "name": "Launch Program",
  "program": "${workspaceFolder}/bin/www",
  "useWSL": true
}

Pièges à éviter

WSL dans le terminal VSCode

Si aucun terminal ne s’ouvre dans VSCode, le petit piège à éviter (et dans lequel je suis tombé) c’est que VsCode doit être installé en version 64 bits sur votre Windows10.
J’aurai pu éviter de perdre du temps si je l’avais installé avec Chocolatey

Error: 0x800703fa

WSL peut planter au démarrage de la machine avec une erreur Error: 0x800703fa  il suffit de rebooter ou de relancer le service qui gère le l’instance du sous-système Windows pour Linux:

sc queryex LxssManager
sc start LxssManager

Runas et dossier de démarrage

blog post expliquant pourquoi la fonctionnalité d’un raccourci « Start in » (dossier de démarrage) peut ne pas être respecté lors d’un runas:admin.

Et voilà !!