Tutoriel sur l'utilisation du gestionnaire de terminaux Screen

Introduction

Screen est une sorte de gestionnaire de bureaux mais pour des terminaux. Il permet d'avoir plusieurs terminaux lancés dans la même application ce qui peut être utile sur les serveurs ou le nombre de connexions SSH est limité.
Nous verrons tout d'abord une utilisation standard de Screen puis ensuite quelques commandes avancées. Une dernière partie sera consacrée au scripting avec Screen.
Pour ce tutorial nous considéreront que la distribution Debian est installée (ou toute autre distribution intégrant le gestionnaire de paquet apt). Pour installez screen, tappez la commande suivante :

apt-get install screen

Pour les utilisateurs de Mandrake/Mandriva, vous pouvez l'installer en tapant la commande suivante. Pour les autres, il existe surement un paquet pour votre distribution, cherchez bien !

urpmi screen

Utilisation de base

Pour une utilisation de base, Screen sert surtout à lancer une application sur un serveur (typiquement MSN ou IRC) et pouvoir se déconnecter du serveur et retrouver sa connexion à sa prochaine connexion. Screen permet également de retrouver son application depuis un poste différent voire de l'afficher en même temps sur plusieurs machines (par exemple pour donner des cours de terminaux). Pour lancer votre screen, tappez tout simplement

screen

Ensuite, vous pouvez utiliser ce shell comme bon vous semble. Une fois que vous avez lancé l'application de votre choix (par exemple Pebrot, Irssi ou Htop), tappez les combinaisons de touches suivantes : Contrôle+a Contrôle+d (en respectant la casse). Vous verrez [detached] appara&icric;tre et une nouvel invite de commande. En réalité, l'application n'est pas arretée, c'est juste l'affichage qui a cessé. Pour reprendre votre application tappez

screen -r

Lorsque vous changez de poste, il arrive souvent que les terminaux n'aient pas la même taille. Or, screen prend en compte la taille du dernier terminal ouvert. L'option -A permet de contourner cela dans le sens ou elle prend en compte la taille du terminal actuel.

Même si vous vous déconnectez entre le moment où vous détachez l'application et le moment ou vous la raccrochez, elle continue de tourner. Ceci est une utilisation très basique de screen. Sachez que vous pouvez nommer les screens à l'aide de l'option -S et les rappeler par leurs noms comme suit :

screen -S mon_screen ma_commande
screen -r mon_screen

Ma commande permet de lancer directement la commande dans le screen.

Parfois, on est amené à avoir plusieurs screens. Pour s'y retrouver, la commande suivante permet de lister les screens lancés ainsi que leur état :

screen -ls

Sans être rabat joie, un minimum de vocabulaire s'impose pour cet outil. Un screen lancé et affiché est dit Attaché (il est virtuellement attaché à votre écran). La commande Contrôle+a permet de Détacher le screen (pour exécuter des commandes ou fermer le terminal. Dans l'utilisation avancée vous apprendrez à afficher un même screen dans plusieurs endroits.


Utilisation Avancée

Le paragraphe précédent présente screen comme un petit utilitaire bien pratique mais en réalité, il est un véritable gestionnaire de terminaux en mode console. Une liste (non exhaustive) de ses fonctionnalités est donnée ci dessous :

Comme promis vous pouvez rattacher un screen non détaché avec la commande ci-dessous

screen -x mon_screen

Cependant, parfois, on oublie de détacher un screen, ou on est obligé de tuer l'application qui tourne à l'intérieur. Bref, le screen n'est plus accessible mais toujours attaché. Il existe une parade, on peut détacher un screen attaché et le rattacher au terminal courant en l'appelant comme suit :

screen -rD mon_screen

Si vous avez plusieurs terminaux lancés dans le screen, il peut être utile de revenir directement à une certaine fenêtre. Avec son indice n ou son nom nomon peut réattacher le screen avec cette fenêtre directement :

screen -r mon_screen -p n (ou nom)

Bloquer le screen (mot de passe nécessaire pour réafficher son contenu) :

Contrôle+a x

Afficher la liste des terminaux lancés :

Contrôle+a "

Créer un nouveau terminal :

Contrôle+a c

Une fois que vous avez créé plusieurs terminaux virtuels, vous pouvez vous déplacer entre eux à l'aide de la liste (commande su-citée) et des commandes suivantes :

Contrôle+a n (suivant)
Contrôle+a Contrôle+p (précédent)

Diviser le terminal en 2 :

Contrôle+a S

Si votre terminal est coupé en deux et que vous le fermez à l'aide de Contrôle+a Contrôle+d, vous le retrouverez dans le même état à votre retour ! Super pratique non ?

Détruire la partie dans laquelle on est (dans un terminal divisé) :

Contrôle+a X

Dans la liste s'affichent des nom qui sont à chaque fois le nom de votre interpréteur de commande. Pour s'y retrouver plus facilement, vous pouvez nommer vos terminaux à l'aide de la commande suivante. Un petit champ s'affiche en bas dans lequel vous tapez le nouveau nom de votre terminal :

Contrôle+a A

Tout cela est bien gentil, mais encore faut-il être devant son ordinateur. Screen permet également d'envoyer des commandes dans un terminal sans l'attacher.

Screen dans un script

Dans toute cette partie nous considérerons que vous avec un screen lancé qui s'appelle mon_screen. Pour le lancer faites l'une des manipulations suivantes :

screen -S mon_screen puis Contrôle-a d
screen -d -m -S mon_screen

Les options -d -m permettent de lancer screen en mode détaché (pour le détail, consulter le man screen)

D'une manière générale on utilise l'option -X pour envoyer une commande dans un screen. Certaines commandes seront données ici. Cependant, le nombre de commandes étant plus que conséquent, je vous invite à consulter la page d'aide de screen (man screen) qui fournit une liste exhaustive des options.

Par exemple, pour détacher un screen attaché ailleurs sans l'afficher il suffit d'utiliser la comamnde suivante :

screen -S mon_screen -X detach

Et à partir de ce moment vous pouvez l'attacher à votre terminal.
De même, avec la commande suivante, vous pouvez tuer purement et simplement un screen lancé :

screen -S mon_screen -X kill

Lors de certaines sauvegardes, il est utile d'avoir un retour sur l'exécution de la sauvegarde. Pour ce faire, screen propose une option de log (sur la sortie standard). La commande suivante permet de récupérer la sortie standard dans un fichier :

screen -S mon_screen -X screen -L ma_commande

Cette commande crée le fichier screenlog.x (x le numéro du screen) contenant la sortie de la commande. ATTENTION : Le screen doit exister préalablement.

Il existe un nombre impressionnant d'options pour screen ce qui en fait un outil très puissant et donc indispensable pour une administration efficace. La documentation de cet outil est très bien faite et bien présentée. Un simple man screen vous dévoilera toute la puissance de ce logiciel.

Tutorial rédigé par Smurf et corrigé par toute l'équipe de GayuxLearn