Windows Terminal – Installation et configuration: tutoriel complet

windows terminal screenshot

Windows Terminal est la nouvelle application de terminal pour les utilisateurs de ligne de commande fournie (gratuitement) par Microsoft. Celui-ci inclus les fonctionnalités les plus demandées par les utilisateurs des outils en lignes de commande sous Windows, comme les onglets, le texte riche, la globalisation, les possibilités de configuration avancées, les thèmes et styles de l’interface et plus encore.. Ce tutoriel présente en détail l’installation et la configuration complète du Windows Terminal. Tous les exemples sont accompagnés des fichiers source à télécharger depuis ce site.

Voici un exemple du résultat que nous allons obtenir:

Windows Terminal en action

Au sommaire de ce tutoriel:

  • 1. Installation de Windows Terminal
  • 2. Personnalisation de l’apparence
    • 2.1. Organisation du fichier profiles.json
    • 2.2. Settings par défaut
    • 2.3. Settings par profiles
  • 3. Ajout de shells Linux pour le sous-système Windows pour Linux (WSL)
    • 3.1. Ajout de Ubuntu (18.04.LTS)
  • 4. Ajout des shells utiles au dévelopeur
    • 4.1 Git Bash
    • 4.2. Visual Studio 2019 command line
  • 5. Informations utiles et ressources
    • 5.1. Obtenir plusieurs shells dans la même fenêtre
    • 5.2. Raccourcis claviers par défaut
    • 5.3. Fichiers des ressources utilisées dans ce tutorial
    • 5.4. Liens utiles

1. Installation de Windows Terminal

Tout d’abord, vous devez vérifier que votre OS/machine respecte les prérequis: (pour connaitre votre version vous pouvez saisir ver dans la barre de recherche de Windows 10)

  • OS: Windows 10 version 18362.0 ou supérieure (v1903==Build 10.0.18362.0)
  • architecture ARM64, x64, x86

Pour obtenir le logiciel, le plus simple et le plus rapide est de le télécharger depuis Windows App Store: https://www.microsoft.com/fr-fr/p/windows-terminal-preview/9n0dx20hk701?activetab=pivot:overviewtab

Microsoft app store
Téléchargement depuis le store

Et comme cet outil est un projet Microsoft Open Source ! vous pouvez l’obtenir depuis GitHub à: https://github.com/Microsoft/Terminal
Dans ce cas les prérequis sont augmentés avec les outils de compilation et les librairies nécessaires. Prévoir:

  • Visual Studio 2017 ou 2019 avec le SDK Windows 10 version 1903 (minimum)
  • package Desktop Development C++
  • Universal Windows Platform Development (le terminal est une application UWP)
  • Toolset v141 et Visual C++ ATL pour x86 et x64 (seulement Visual Studio 2019)
  • le mode ‘developer’ doit être activé dans Windows 10

Je n’aborderai pas la compilation dans ce post.

Un fois le téléchargement terminé, vous pouvez lancer l’application. Par défaut, l’interface est neutre mais ne demande qu’à être personnalisée. A l’ouverture, le shell par défaut PowerShell est activé:

Windows PowerShell
Windows PowerShell

L’accès aux shells et aux paramétrage se fait à partir du bouton [V]. Le bouton [+] ouvre le shell défini par défaut dans un nouvel onglet. Initialement, le terminal intègre la configuration des shells PowerShell, cmd (l’original shell de MSDos) et Azure Cloud Shell :

shells intégrés par défaut
shells intégrés par défaut

2. Personnalisation de l’apparence

Les settings sont décrits dans un fichier en syntaxe JSon. Ils sont accessibles depuis le bouton [V], items « settings ». Un click sur cet item entraîne l’ouverture du fichier JSon est ouvert dans votre éditeur de texte JSon par défaut. Il est préférable d’utiliser un éditeur compatible JSon, je recommande pour cela Visual Studio Code, afin de bénéficier du support du schéma et par conséquent de la complétion automatique IntelliSense. Le schéma est disponible à cette adresse: https://aka.ms/terminal-profiles-schema

Comme le terminal est une application UWP, ses données sont déployées dans AppData de l’utilisateur. Le path complet du fichier des settings est ici:
%USERPROFILE%\AppData\Local\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState\profiles.json
Pour la même raison, il est recommandé de placer les fichiers de données utilisés par les settings dans le répertoire ms-appdata:///roaming/ (soit %USERPROFILE%\AppData\Roaming) pour conserver les fichiers avec liaison au compte Microsoft (si activé) et itinérance de ceux-ci ou ms-appdata:///local/, mais cela fonctionnera également si les fichiers sont placés dans un autre path. Windows Terminal applique les settings à chaque fois que le fichier est sauvé dans l’éditeur de texte.

2.1. Organisation du fichier profiles.json

On trouve dans le fichier 3 sections principales:

  • à la racine du fichier, les settings concernant le comportement global de windows terminal. les settings les plus importants étant:
    • defaultProfile : indique le GUID du profile actif par défaut (les profils, resp. les shells sont identifiés par un GUID)
    • initialCols , initialRows : taille initiale de la fenêtre
  • profiles: dans cette section sont décrits les paramètres des shells:
  • profiles > defaults: section qui reçoit la personnalisation par défaut du windows terminal
VSCode Windows Terminal settings
VSCode Windows Terminal settings
  • profiles > list: liste des shells disponibles et surchage par shell de la personnalisation
  • schemes: reçoit la customisation de thèmes de couleurs
  • keybindings : settings d’affectation des touches

2.2. Settings par défaut

Dans la section defaults on place les paramètres pour personnaliser le terminal quelque soit le shell ouvert. On pourra changer la personnalisation par shell dans les entrées de la section list.  Voici un exemple complet des settings disponibles avec une description de leurs valeurs:

nom du setting type description / exemple
colorScheme string thème de couleurs parmi un des thèmes prédéfinis
valeurs possibles: « Campbell », « One Half Dark », « One Half Light », « Solarized Dark », « Solarized Light »
« colorScheme » :  « Campbell »
useAcrylic boolean indique si le fond de fenêtre utilise le pinceau ‘acrylic’ de windows 10
« useAcrylic » : true
acrylicOpacity float entre 0 et 1
(inclus)
opacité du fond acrylique (si activé)
« acrylicOpacity » : 0.1
background string couleur du pinceau acrylique (si activé)
« background » : « #012456 »
backgroundImage string path d’une image de fond
« ms-appdata:///local/84314.jpg »
backgroundImageOpacity float entre 0 et 1
(inclus)
opacité de l’image de fond (quand la fenêtre du terminal est active)
« backgroundImageOpacity » : 1
backgroundImageStretchMode string
façon dont l’image est ajustée pour occuper le fond de la fenêtre. valeur parmi « uniformToFill », « fill », « none », « uniform »
« backgroundImageStretchMode » : « uniformToFill »
backgroundImageAlignment string positionnement de l’image de fond. valeur parmi « center », « bottom », « bottomLeft », « bottomRight », « center », « left », « right », « top », « topLeft », « topRight »
« backgroundImageAlignment » : « center »
cursorColor string couleur du curseur
« cursorColor » :  « #88FF00 »
cursorShape string forme du curseur. valeur parmi: « vintage » ( ▃ ), « bar » ( ┃ ), « underscore » ( ▁ ), « filledBox » ( █ ), « emptyBox » ( ▯ )
« cursorShape » :  « filledBox »
cursorHeight integer hauteur du curseur (seulement pour curseur ‘vintage’). entre 25 et 100 compris
fontFace string nom de la fonte
fontSize float taille de la fonte
closeOnExit boolean indique le mode de fermeture du terminal suite à un événement de demande de fermeture:

  • « graceful » (ou true, par défaut) : fermeture si ‘exit’ est tapé ou quand le process termine normalement
  • « always » : toujours fermer
  • « never » (ou false) : ne jamais fermer
    « closeOnExit »  : « false »
historySize integer nombres de lignes dans le buffer (que l’on peut revoir en scrollant au dessus de la ligne de saisie). par défaut 9001, minimum -1
startingDirectory string path par défaut à l’ouverture d’un shell.
« startingDirectory » : « %USERPROFILE% »
padding string largeur du cadre intérieur de la fenêtre de texte du terminal
« padding » : « 4,4,4,4 »
snapOnInput boolean si true, la fenêtre de texte est scrollée sur la ligne de saisie lorsque une frappe de touche est effectuée
« snapOnInput » : true 
tabTitle string si true, remplace le « name » pour le titre a passer au shell lors du démarrage. Certains shells ignorent cette valeur (bash) tandis que d’autres l’acceptent (cmd,powershell)
suppressApplicationTitle boolean si true, tabTitle remplace le titre par défaut de l’onglet et chaque demande de changement de titre de l’application sera supprimé
alwaysShowTabs boolean si true, les onglets sont tout le temps affichés. sinon et si showTabsInTitleBar n’est pas activé les onglets apparaissent seulement après l’ouverture d’un nouvel onglet. ou il faut presser Ctrl+Tab pour les voir
showTabsInTitlebar boolean si true, les onglets sont déplacés dans la barre de titre et la barre d’onglets disparait

Après avoir modifié ces settings, l’apparence du terminal ressemblera à la copie d’écran visible en début du post… (retrouvez tous les fichiers nécessaires à la fin de cette page)

2.3. Settings par profiles

Un jeu de paramètres est stocké dans un profil, stockés dans la section profiles > list . Initialement, chaque shell intégré possède son propre profile. Chaque profil peut être identifié de manière unique par un GUID. Le profil par défaut (« defaults ») permet d’effectuer des règlages par défaut pour tous les profiles, qui peuvent être surchargés pour chaque profil dans sa section respective.  Ainsi initialement on dispose des entrées suivantes correspondantes aux 3 shells intégrés :

{
// powershell.exe profile
"guid": "{61c54bbd-c2c6-5271-96e7-009a87ff44bf}",
"name": "Windows PowerShell",
"commandline": "powershell.exe",
"hidden": false
},
{
// cmd.exe profile
"guid": "{0caa0dad-35be-5f56-a8ff-afceeeaa6101}",
"name": "cmd",
"commandline": "cmd.exe",
"hidden": false
},
{
// azure cloud shell profile
"guid": "{b453ae62-4e3d-5e58-b989-0a998ec441b8}",
"hidden": false,
"name": "Azure Cloud Shell",
"source": "Windows.Terminal.Azure"
}

Les profils listés ici apparaissent dans le menu [V] si l’attribut hidden n’a pas la valeur true. On utilisera cette section pour ajouter et configurer individuellement des shells ajoutés au terminal.

3. Ajout de shells Linux pour le sous-système Windows pour Linux (WSL)

Le sous-système Windows pour Linux permet d’exécuter un environnement GNU/Linux (et notamment la plupart des utilitaires, applications et outils en ligne de commande) directement sur Windows (à partir de Windows 10 Fall Creators Update et ultérieur (build Windows 16215 ou ultérieur)), sans modification et tout en évitant la surcharge d’une machine virtuelle. Cela permet de:

  1. Choisir vos distributions GNU/Linux préférées à partir du Microsoft Store
  2. Exécuter des logiciels en ligne de commande courants gratuits tels que grepsed et awk ou d’autres fichiers binaires ELF-64
  3. Exécuter des scripts de shell Bash et des applications en ligne de commande GNU/Linux, notamment :
    • Outils : vim, emacs, tmux
    • Langages : Javascript/node.js, Ruby, Python, C/C++, C# & F#, Rust, Go, etc…
    • Services : SSHD, MySQL, Apache, lighttpd
  4. Installer des logiciels supplémentaires en utilisant votre propre gestionnaire de package de distribution GNU/Linux
  5. Appeler des applications Windows à l’aide d’un shell de ligne de commande de type UNIX
  6. Appeler des applications GNU/Linux sur Windows

La première chose à faire afin de pouvoir intégrer dans le Windows Terminal des shells linux (bash,..) est d’installer WSL. Pour cela, il faut activer la fonctionnalité facultative WSL dans Windows. Ouvrez PowerShell en tant qu’administrateur et exécutez:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

installation WSL en cours
installation WSL en cours

Redémarrez l’ordinateur lorsque vous y êtes conviés.

Maintenant, il est possible d’installer une distribution Linux depuis l’App Store dans Windows (Windows build 1615 requis).  Vous pouvez choisir sur le store parmi la liste suivante la distribution de votre choix:

nom url
 Ubuntu 16.04 LTS  https://www.microsoft.com/store/apps/9pjn388hp8c9
 Ubuntu 18.04 LTS  https://www.microsoft.com/store/apps/9N9TNGVNDL3Q
 OpenSUSE Leap 15  https://www.microsoft.com/store/apps/9n1tb6fpvj8c
 OpenSUSE Leap 42  https://www.microsoft.com/store/apps/9njvjts82tjx
 SUSE Linux Enterprise Server 12  https://www.microsoft.com/store/apps/9p32mwbh6cns
 SUSE Linux Enterprise Server 15  https://www.microsoft.com/store/apps/9pmw35d7fnlx
 Kali Linux  https://www.microsoft.com/store/apps/9PKR34TNCV07
 Debian GNU/Linux  https://www.microsoft.com/store/apps/9MSVKQC78PK6
 Fedora Remix pour WSL  https://www.microsoft.com/store/apps/9n6gdm4k2hnc
 Pengwin  https://www.microsoft.com/store/apps/9NV1GV1PXZ6P
 Pengwin Enterprise  https://www.microsoft.com/store/apps/9N8LP0X93VCP
 Alpine WSL  https://www.microsoft.com/store/apps/9p804crf0395

3.1.  Ajout de Ubuntu (18.04.LTS)

A partir du store, téléchargez la distribution Ubuntu (https://www.microsoft.com/store/apps/9N9TNGVNDL3Q) et lancez l’application téléchargée. Le premier lancement entraîne la décompression et le déploiement des fichiers.

Dans le shell qui s’ouvre alors (un shell WSL a déjà été installé automatiquement à windows terminal), on est invité à créer un compte utilisateur dans le Linux:

initialisation Linux Ubuntu dans windows terminal
initialisation Linux Ubuntu dans windows terminal

tant qu’on est dans le bash de Ubuntu, on va générer un GUID pour notre future configuration dans Windows Terminal, en utilisant la commande: uuidgen. Notez le code obtenu on s’en servira plus tard.

Maintenant on va simplement ajouter une entrée dans profiles > list de profiles.json comme suit:

// Ubuntu 18.04 LTS
{
// indiquez ici votre GUID obtenu avec uuidgen
"guid": "{ff649c13-a1a0-44c6-84b4-0e3a5a23b0d6}",
"hidden": false,
"name": "Ubuntu 18.04 LTS",
// indiquez ici votre chemin vers l'icone (fourni en fin de page)
"icon": "C:/Users/franc/Pictures/Icones/iconfinder_OS_Ubuntu_99950.ico",
"commandline": "wsl -d Ubuntu-18.04"
},

la ligne de commande invoque l’outil wsl. Astuce: pour connaitre la liste des identifiants des distributions linux installées lancez la commande wsl -l dans votre shell préféré.

4. Ajout des shells utiles au dévelopeur

4.1 Git Bash

Prérequis: Git on Windows doit être installé. Si nécessaire, télécharger et installez depuis https://git-scm.com/downloads.  Les options par défaut conviennent tout à fait pour l’utilisation dans Windows Terminal.

On peut alors ajouter l’entrée suivante dans profiles > list de profiles.json de Windows Terminal (un guid a été généré comme vu plus haut pour identifier le profile/shell):

// Git Bash
{
"name" : "Git Bash 2.26.0",
"guid": "{5822e4e8-056e-4ce6-bafb-0d36360df0c4}",
// adapter le path
"icon": "C:/Users/franc/Pictures/Icones/git.ico",
// adapter la ligne de commande si nécessaire
"commandline": "c:/Program Files/Git/bin/bash.exe",
"startingDirectory" : "%USERPROFILE%"
},

4.2. Visual Studio 2019 command line

Evidement cela concerne ceux d’entre vous qui ont déjà installé Visual Studio 2019. L’entrée a ajouter sera simplement comme suit (avec les paths a adapter selon votre version de Visual Studio, dans ce cas précis il sagit de ‘Community’):

// Visual Studio 2019 cmd line
{
"name" : "Visual Studio 2019 cmd",
"icon": "C:/Users/franc/Pictures/Icones/iconfinder_Visual_Studio_1082427.ico",
"commandline" : "cmd.exe /k \"C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/Common7/Tools/VsDevCmd.bat\"",
"startingDirectory" : "%USERPROFILE%"
}

5. Informations utiles et ressources

5.1. Obtenir plusieurs shells dans la même fenêtre

Il est possible de splitter la vue d’un shell (l’onglet actif) en plusieurs panneaux, et ainsi obtenir plusieurs lignes de commandes. Le nouveau panneau reçoit le shell par défaut. Pour cela il suffit d’utiliser les raccourcis claviers définis par défaut:

  • alt+shift+ : splitte le panneau courant horizontalement
  • alt+shift+plus : splitte le panneau courant verticalement

Mais comment faire pour avoir des shells différents dans la même fenêtre (ce qui revient a regrouper des onglets différents dans les splits panes d’un onglet unique au départ) ?

==> Cela est possible en lancant le Windows Terminal via une ligne de commande. La syntaxe donnée ici est valable depuis le shell Cmd à l’intérieur du terminal ou un fichier .bat

  • l’exécutable est wt
  • l’option magique de wt est split-pane :
    • -p pour indiquer le GUID ou le libellé du shell (celui qui apprait dans le menu [V])
    • -H pour indiquer un split horizontal
    • V pour indiquer un split vertical

exemple: Windows PowerShell + Ubuntu + Cmd dans la même fenêtre :

wt ; split-pane -p "Ubuntu 18.04 LTS" ; split-pane -H Cmd

multi shell
multi shell

5.2. Raccourcis claviers par défaut

Retrouvez ici la liste des raccourcis claviers pré-définis. Vous pourrez changer ces définitions dans la section keybindings

affectations de touches action
ctrl+shift+w ferme le panneau courant
alt+f4 ferme la fenêtre du terminal
ctrl+shift+c copie la sélection courante
ctrl+insert copie la sélection courante
ctrl+- diminue la taille de la police de caractères
ctrl+shift+d duplique l’onglet courant
ctrl+= augmente la taille de la police de caractères
alt+down déplace le focus vers le panneau du dessous
alt+left déplace le focus vers le panneau de gauche
alt+right déplace le focus vers le panneau de droite
alt+up déplace le focus vers le panneau du haut
ctrl+shift+t ouvre un nouvel onglet avec le shell par défaut
ctrl+shift+1 à ctrl+shift+9 ouvre un nouvel onglet avec le shell d’index le chiffre appuyé
ctrl+tab passe à l’onglet suivant
ctrl+shift+space ouvre le menu de sélection ([V]) d’un shell pour ouverture nouvel onglet
ctrl+, ouvre le fichier de settings
ctrl+shift+v paste
shift+insert paste
ctrl+shift+tab passe à l’onglet précédent
ctrl+0 réinitialise la taille de la police de caractères
alt+shift+down retaille le panneau courant
alt+shift+left retaille le panneau courant
alt+shift+right retaille le panneau courant
alt+shift+up retaille le panneau courant
ctrl+shift+down scrolle vers le bas
ctrl+shift+pgdn scrolle une page vers le bas
ctrl+shift+up scrolle vers le haut
ctrl+shift+pgup scroll une page vers le haut
alt+shift+- splite le panneau courant horizontalement
alt+shift+plus splite le panneau courant verticalement
ctrl+alt+1 à ctrl+alt+9 passe sur l’onglet n° frappé
ctrl+shift+f recherche
alt+enter bascule le mode fenêtré / plein écran et vice versa
f11 bascule le mode fenêtré / plein écran et vice versa

5.3. Fichiers des ressources utilisées dans ce tutorial

5.4. Liens utiles


A suivre: Dans un prochain post, nous verrons comment définir un thème pour le prompt dans le Windows Terminal avec entre autres une police de caractères avec glyphes avancés (powerline)