Cet article est d'abord paru quand je l'ai écris pour kuro5hin. Si vous voulez lire la version originale de l'article avec des commentaires contenant des astuces utiles sur Screen, il est ici, archivé sur Kuro5hin.

La plupart des systèmes d'exploitations modernes basés sur Unix (par exemple Linux, MacOS X, et BSD) sont livrés avec un petit utilitaire en mode console appelé GNU Screen. C'est un outil puissant entre les mains d'un guerrier de la ligne de commande, un véritable couteau suisse de l'interaction homme-ordinateur en mode console.

Cet utilitaire, bien que d'une utilité considérable, reste utilisé par très peu de personnes. Pourquoi ? Peu de gens en connaissent seulement l'existence, et ceux-là comprennent rarement les problèmes qu'il résoud. Dans cet article, j'expliquerais ce que screen fait pour vous, et fournirais un jeu de commandes pour accomplir des tâches basiques avec screen. Je m'adresse ici à ceux qui sont compétents avec la ligne de commande mais qui n'ont peu ou pas d'expérience avec screen lui même.

Ce que screen fait

Screen peut-être décrit comme un multiplexeur de terminal. En l'utilisant, vous pouvez executer toutes les applications en mode console -- commandes de shell interactives, applications basées sur curses, éditeurs de textes, etc. -- que vous voulez dans un seul terminal. C'est cela qui accroche la plupart des utilisateurs de screen. J'avais l'habitude de lancer une demi-douzaine de terminaux quand je me connectais à ma machine: j'en voulais un pour lire mes e-mails, un pour éditer mon code, un pour compiler mon code, un pour mon lecteur de news, un pour un shell sur mon hébergeur, et ainsi de suite. Maintenant, je lance un terminal et execute screen à l'intérieur. Problème résolu.

L'autre fonctionnalitée cool de screen est sa capacité à détacher le terminal des programmes executés. Cela signifie que vous pouvez utiliser screen pour laisser tourner les programmes après avoir fermé accidentellement le terminal, ou même après vous être déconnecté et, plus tard, reprendre là où vous en étiez. Cela signifie que le concept de session dans laquelle vous executé des programmes est une entité flottant librement que vous pouvez attacher à n'importe quel terminal depuis n'importe où, ou aucun terminal si vous le voulez.

Débuter avec screen: lancer des programmes et permutage de fenêtres

Lancez screen en tapant screen dans votre shell preferré. Vous serez probablement accueilli par un message de bienvenue. Quittez le message de bienvenue et vous obtiendrez un prompt shell, qui ressemble beaucoup à ce que vous aviez avant de lancer screen. Que s'est-il passé ?

Chaque programme qui tourne dans screen s'execute dans une fenêtre, et chaque fenêtre est identifié par un numéro unique. Screen a créé une nouvelle fenêtre, l'a numérotée 0, et a lancé un shell a l'intérieur. Tapez quelque chose dans votre nouvelle fenêtre pour pouvoir la reconnaître quand vous y repasserez plus tard.

Maintenant créez une nouvelle fenêtre; ce sera la fenêtre 1. Pour cela, tapez C-a c; c'est à dire, tapez Ctrl-a puis tapez c (mnemotechnique:Create)

Maintenant que vous avez deux fenêtres, essayez de basculer de l'une à l'autre. Pour cela, tapez C-a C-a, ce qui vous fera basculer à la fenêtre que vous utilisez avant celle en cours. D'autres méthodes de basculement utiles dont vous aurez besoin si vous comptez lancer plus de deux programmes:

  • Utilisez C-a n et C-a p pour basculer respectivement vers la fenêtre suivante et précédente, par numéro.
  • Utilisez C-a N, où N est un numéro de 0 à 9, pour basculer vers la fenêtre correspondante.
  • Utilisez C-a " pour avoir une liste des fenêtres. Vous pouvez naviguer dans cette liste avec les flèches (ou en style vi, avec j et k), et activer une fenêtre en la mettant en surbrillance et en pressant Entrée. C-a w vous donnera une petite liste non interactive des fenêtres.
Détacher et réattacher: la magie du découplage de terminal

Si vous avez effectuer l'exercice ci-dessus, vous avez créer une session screen. Vous pouvez vous détacher de cette session en pressant C-a d. Vous pouvez aussi vous détacher juste en fermant l'émulateur de terminal qui contient la session. Cependant, gardez à l'esprit qu'aucune de ces manipulations ne termine votre session. Tout ce qu'elles font, c'est de détacher votre session du terminal courant. Tous les programmes qui sont lancés sous screen tournent encore. Vraiment.

Essayez: fermez l'émulateur de terminal que vous utilisiez pour l'exercice ci-dessus. Puis, si vous le désirez, déloguez vous et reloguez vous. Démarrez un nouvel émulateur de terminal, et tapez screen -r (r pour reattach). Vous serez exactement là vous en étiez quand vous avez détaché la session.

Vous pouvez surement imaginer moultes utilisations interressantes à cela. Vous pouvez lancer tous vos programmes console preferrés une fois et les laisser tourner dans une session screen persistante. Certaines personnes ont des uptime de screen de plusieurs mois.

Un autre d'exemple d'utilisation est d'avoir un bureau distant. Vous pouvez détacher une session au travail, vous vous connecter à la machine depuis chez vous et réattacher la session. Très très pratique. Avec un peu de pratique, vous pouvez même avoir plusieurs terminaux attachés à la même session, très utile pour le travail collaboratif et les rencontres.

Copier, coller, et remonter dans le buffer

Screen se souvient d'un nombre configurable de lignes de buffer, et vous en aurez besoin car vous ne pourrez pas utiliser les fonctionnalités de défilement de votre émulateur de terminal en utilisant screen. Vous pouvez accéder au buffer en vous mettant en mode copie (Copy Mode), en tapant C-a [. Vous pouvez marquer du texte n'importe où dans le buffer et le coller avec C-a ]. Screen est aussi capable d'écrire des fichiers de log, mais ceci dépasse le cadre de ce tutoriel.

Surveiller le silence et l'activité

Un des désavantage de faire tourner plusieurs programmes dans screen est que vous ne pouvez pas garder un oeil sur tous en même temps, puisqu'en général vous ne pouvez en voir qu'un seul à la fois (En fait, vous pouvez découper l'écran et voir plusieurs programmes à la fois, mais c'est un sujet avancé qui dépasse le cadre de ce tutoriel). Pour aider à atténuer ce problème, screen possède une fonctionnalité qui permet de surveiller le silence d'une fenêtre -- utile pour savoir quand une compilation est terminée par exemple -- ou son activité -- utile pour savoir quand quelqu'un parle finalement dans votre channel IRC preferré par exemple.

Pour commencer ou arrêter de surveiller une fenêtre pour un silence de 30 secondes, tapez C-a _; pour commencer ou arrêter de surveiller l'activité d'une fenêtre, tapez C-a M.

Le faire partir

Comme vous l'avez vu dans la section sur le déttachement et le réattachement, screen n'est pas facile à tuer. Vous ne pouvez pas juste fermer le terminal qui le contient (En fait vous pouvez, mais tous les programmes tournent encore sur votre système, prêts a être réattachés).

A ma connaissance, le seul moyen de quitter screen en douceur (cad sans envoyer de méchants signaux aux processus qui ne méritent pas ça) est de fermer chaque fenêtre de screen. Quittez tous les programmes ou shells qui tournent dans une fenêtre, et elle se fermera. Quand le dernier programme qui tourne dans screen est terminé, screen lui même se termine. Vous pouvez forcer l'arret de screen avec C-a C-_, mais je ne vous le recommande pas.

Autres trucs

Screen est capable de bien plus que ce que j'ai décris ci-dessus, mais c'est assez pour que vous débutiez. Vous pouvez taper C-a ? pour obtenir une liste laconique des commandes disponibles quand vous êtes sous screen. La page man de screen contient pas mal d'informations aussi. Et voilà quelques ressources web si vous avez des questions:

Yahoo GNU Screen Group
Une mailing-list à traffic relativement élevé pour screen. Beaucoup de personnes expérimentées trainent dessus.

La page screen de Sven Guckes
Une autre vue d'ensemble; un peu plus laconique que celle ci.

La page officielle de screen
Pas besoin d'explications. Les détails sont étonnemment clairsemés.

La page de manuel de screen
Formattée agréablement et divisée en sections. Bonne référence. N'oubliez pas de voir les sections sur .screenrc pour customiser screen.

Screen FAQ
Pas pour débutant, mais une bonne ressource pour régler les problèmes.