Intoduction

Si vous vous êtes déjà retrouvé dans les situations suivantes :

  • votre écran est couvert de fenêtre de terminal (vous travaillez sur plusieurs emplacements en même temps et c'est lourd de basculer) ;
  • vous avez déjà ouvert plusieurs connection sur un serveur pour pouvoir travailler sur plusieurs emplacements différents ;
  • vous avez déjà laissé ouvert un terminal plusieurs heures car vous deviez attendre la fin d'une tâche …

Si oui, screen est fait pour vous !, si non, ça pourra toujours vous servir un jour, si ce que je viens d'écrire est incomphéensible, vous n'êtes pas prêt...

Installation

Sur la majorité des distributions, screen n'est pas installé par défaut, mais via le gestionnaire de paquet, l'installation est triviale, par exemple sur une debian/unbuntu/mint :

apt-get install screen

L'installation prend quelques secondes, dès que c'est bon, retroussez vos manches, ouvrez une console (une seule :P), on va décoler !

Prise en main

Bon, déjà screen c'est pas du tunning, ne vous attendez pas à voir un chouilla de changement dans la console, elle restera tel que vous l'avez laissée avant l'installation.

Pour lancer screen utilisez la commande screen :

$ screen
    

Un écran d'accueil apparait

Screen version 4.00.03jw4 (FAU) 2-May-06

Copyright (c) 1993-2002 Juergen Weigert, Michael Schroeder
Copyright (c) 1987 Oliver Laumann

This program is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free Software
Foundation; either version 2, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with
this program (see the file COPYING); if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.

Send bugreports, fixes, enhancements, t-shirts, money, beer & pizza to
screen@uni-erlangen.de


                        [Press Space or Return to end.]
    

Appuyez sur la touche espace, vous devrier revenir dans votre console... Etrange non ? Et pourtant, screen est bien lancé. Nous allons vérifier ça tout de suite.

Pour cela nous allons afficher du contenu dans la console, par exemple avec un simple ls :

$ ls -l

Maintenant nous allons mettre screen en arrière-plan, on dit également détacher screen, cela se fait avec un raccourcis : CTRL+a, puis relacher les touches, et enfoncez la touche d :

L'utilisation des raccouris est systématiquement la même, vous commencez par faire le raccouri Ctrl+a suivi d'un lettre (attention au dérapage de touche).

Vous devriez basculer dans le terminal de départ, celui qui avait disparu lorsque que l'on a tapé la commande screen, noter la présence du message de screen avant l'invite :

[detached from 26555.pts-0.ED209]
Cette information entre crochets permet de récupérer une instance précise de screen, elle se compose d'un numéro unique, puis du pts suivi du nom de la machine. Nous verrons ça en détaille un peu plus loin.

Vous pouvez continuer d'utiliser le terminal standard normalement, tout l'intérêt est de pouvoir récupérer le screen passé en arrière plan, pour faire, vous devez de nouveau lancer screen avec l'argument -r :

$ screen -r
  

Cette fois pas d'invite, vous retrouvez ce que vous aviez laisser avant de détacher screen (le résultat du ls -l).

Pour la partie suivant, vous allez lancer la commande top dans ce screen, puis le détacher avec le raccourcis Ctrl+a d.

Plusieurs screen

Une des grande force de screen, c'est de nous permettre d'avoir plusieurs screen de lancer en même temps.

Cette fois, au lieu de récupérer le screen ouvert (celui ou tourne le top), nous allons en créer un nouveau en tappant screen tout seul.

L'invite apparait, appuyez sur espace, nous allons lancer une petite commande qui donner un peu d'activiter à notre terminal :

while true; do date; sleep 1; done;
    

Cela va nous afficher la date toute les 1 secondes.

Faites Ctrl + a d pour détacher le screen, puis tapez screen -d, la liste des instances de screen actifs va s'afficher :

There are several suitable screens on:
  28382.pts-0.ED209 (05/02/2012 14:37:46) (Detached)
  26555.pts-0.ED209 (05/02/2012 12:16:56) (Detached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.
    

Pour récupérer un des 2 screens ouverts, vous devez utiliser la commande screen -d suivie par l'identifiant du screen, dans mon cas de figure les identifiants sont 28382.pts-0.ED209 et 26555.pts-0.ED209.

Notez que la saisie de l'identifiant peut être laborieuse, surtout si le copié/collé n'est pas actif (dans un vieux terminal par exemple). Heureusement, la commande screen support l'autocompletion, tappez la commande screen -d, puis un espace et enfoncé la touche TAB.

Entrainez vous a passer d'un screen à l'autre, pour rappel :

  • screen : Lance une nouvelle instance de screen ;
  • screen -r (id) : Permet de récupérer une instance de screen ;
  • screen -d ou Ctrl+a d : Détache le screen ;

C'est bien beau, mais les screens vont s'accumuler, comment on les referme ?

Pour cela plusieurs solution, la plus simple consiste à simplement utiliser la commande exit depuis le screen pour refermer ce dernier.

Et si par malheur vous n'avez pas la main, vous pouvez utiliser le raccourci Ctrl+a k. Normalement un message apparait en bas du terminal vous demandant de confirmer en enfoncant la touche y.

Pour la suite du tutoriel, vous allez refermer tous les screens lancés.

Un screen, plusieurs fenêtres

Dans la partie précédente, nous avons vu qu'il était possible de lancer plusieurs instances de screen, et de basculer de l'une à l'autre via quelques enchaînements de raccourci.

Cependant, la manipe c'est pas forcement très pratique.

Dans cette partie nous allons voir comment, dans une instance de screen, utiliser plusieurs fenêtres (ou onglet).

On commence par lancer une instance de screen

screen

Vous êtes dans screen, pour vous aidez à différencier les fenêtres, faites un ls -l. Nous allons maintenant créer une nouvelle fenêtre, pour cela, première solution, simplement utiliser (à nouveau) la commande screen.

Vous êtes dans un nouveau terminal vièrge. Voyons comment revenir dans la fenêtre où nous venons de faire notre ls -l. Pour cela, plusieurs solutions :

Navigation par numéro

Les fenêtres créées sont numérotées à partir de 0.

le raccourci Ctrl+a N (où N correspond au numéro de la fenêtre) permet de basculer d'une fenêtre à une autre. Dans notre cas, Ctrl+a 0 affichera la fenêtre de notre ls -l et Ctrl+a 1 affichera la deuxième.

Navigation suivant, précédent et dernière

Vous pouvez également utiliser les raccourcis Ctrl+a n (n pour next) ou Ctrl+a Espace pour basculer dans la fenêtre suivante et Ctrl+a p (p pour previous) pour basculer dans la fenêtre précédente.

En utilisant ces raccourci, on retiendra que l'enchaînement est infini, en effet, basculer vers la fenêtre précédente si vous êtes dans la fenêtre 1 (index 0) vous fait passer dans la dernière fenêtre.

Probabement le plus utilisé, le Ctrl+a Ctrl+a (vous pouvez laissé enfoncé la touche Ctrl) permet de basculer vers la dernière fenêtre ouverte (equivalent au Alt+Tab dans les applications)

Liste des fenêtres

Vous pouvez également afficher une liste des fenêtres interactive avec le raccourci Ctrl+a ". Utilisez ensuite les flèches directionnelles pour selectionner une fenêtre en enfoncez la touche enter pour basculer dans cette fenêtre. Très pratique quand on a ouvert beaucoup de fenêtre...

Cependant, on notera que retenir que notre surveillance de log est dans le bash 4 n'est pas forcement très intuitif.

Dans la section qui suit, nous alons voir quelques outils pratique et surtout comment configurer screen.

Autres commandes utiles

Nommer ces fenêtres

Nous vennons de voir comment afficher la liste des fenêtres, pas pratique, sauf si l'on sait renommer les fenêtres

Faites Ctrl+a A (Le A est bien en majuscule). Un prompt apparaît en bas du terminal pour saisir un nom de fenêtre. Si vous êtes dans le fenêtre du ls -l, nommez là liste fichiers puis faites Enter pour validez.

Puis afficher la liste des fenêtres avec Ctrl+a ". Passer sur la fenêtre qui n'a pas encore été baptisée. refaites Ctrl+a A et nommez la TOP.

C'est plus clair comme ça.

Nouvelle fenêtre, variantes

Pour créer une nouvelle fenêtre, nous avons vu qu'il fallait, depuis une instance de screen, saisir de nouveau scren. Mais il existe d'autres méthodes :

le Ctrl+a c (c pour create) va créé une nouvelle fenêtre vide.

Mais plus pratique encore, vous pouvez exécuter une commande qui va ouvrir son résultat dans une nouvelle fenêtre, par exemple :

$ screen top

Va créer une nouvelle fenêtre où sera affiché le top. En plus la fenêtre créé de cette façon porte le nom de la commande.

Dans le même esprit, combien de fois avez vous utilisé man pour vérifié une syntaxe, refermé le man pour tester, puis ouvert le man à nouveau pour chercher autre chose ! Entrainez vous à faire la manipulation suivante.

$ screen man screen

Vous êtes dans la documentation de screen. Puis faites Ctrl+a Ctrl+a, de retour dans le terminal, Ctrl+a Ctrl+a a nouveau dans la doc... Difficile de faire plus rapide :)

Configuration de screen, le .screenrc

à l'instar d'un emacs ou d'autres programmes shell, screen est customisable via un fichier .screenrc spécifique à chaques utilisateur. On trouve ce fichier à la racine du dossier utilisateur. Par défaut il n'exise pas.

Je ne vais vous détailler les possibilitées, je n'en ai pas fait le tour, donc je vais m'en tenir à quelques options de base. Utilisez votre éditeur favori pour éditer / créer le fichier ~/.screenrc. Voici son contenu :

# Mode UTF8 par défaut
defutf8 on

# On supprime le message d'accueil
startup_message off

# Intitulé en bas du terminal
caption always
    

L'activation du caption est très pratique car elle va afficher une bordure avec un indication permettant de savoir dans quel fenêtre on se trouve (et aussi nous permettre de savoir qu'on est dans une fenêtre screen du fait de sa présence).

Allé, voici un exemple de customisation de caption :

# Caption JCK (met en évidence %{=b kg} le screen actif [%n %t]
# puis la liste des autres screen %{=s ky}%W
# affiché à droite %=
# le nom de la machine %{=b}%H 
# et l'heure %{=s}%c sont affichés
caption string "%{=b kg} [%n %t] %{=s ky}%W  %= %{=b}%H %{=s}%c "
    
Lors d'une modification du .screenrc, les modifications ne sont appliquées qu'aux nouvelles instances de screen. Pour forcer le rechargement du fichier .screenrc dans une instance de screen déjà ouverte, faites Ctrl+A :, dans le prompt, entrez le chemin du fichier (~/.screenrc). Enjoy.

Bon après cette petite scéance de relooking, nous allons terminer sur les régions.

Les régions

L'idée des régions, c'est de permettre de scinder une fenètre pour afficher plusieurs fenêtres en même temps.

Scinder une fenêtre horizontalement

Cela se fait avec le raccourci Ctrl+a S. Par défaut, la fenêtre obtenu est une fenètre vide. Pour afficher une fenêtre déjà ouverte dedans, nous allons devoir lui donner le focus, pour ça on utilise le raccourci Ctrl+a TAB.

Une fois le focus placé dans la fenêtre, vous pouvez utilisé les raccouris déjà vu pour afficher une fenêtre dedans, mais cela va être l'occasion de voir une petite commande. Commencez par activé le mode commande avec Ctrl+a :, une fois le prompt ouvert, saisissez screen top. Le top est affiché dans la nouvelle fenêtre :)

Taille d'une région

Pour ajuster la hauteur d'une région, vous devez utiliser une instruction screen en mode commande, faites Ctrl+A : puis saisissez l'instruction resize puis, séparé par un espace la hauteur de la fenêtre en nombre de ligne.

Voici quelques raccourcis affiliés :

  • resize +NOMBRE Augmente la hauteur de NOMBRE lignes ;
  • resize -NOMBRE Réduit la hauteur de NOMBRE lignes ;
  • resize = Equilibre la hauteur des régions.

Scinder verticalement

Cela se fait uniquement en mode commande, faites Ctrl+a : et saisissez la commande split -v.

Je n'ai pas réussi à faire fonctionner l'ajustement de la largeur de le région chez moi. Pour plus d'information je vous renvoi donc vers la documentation officielle.

  • Ctrl+a S Scinde horizontalement en 2 la fenètre en 2 régions ;
  • Ctrl+a TAB Bascule dans la région suivante ;
  • Ctrl+a Q Ferme toutes les régions sauf la région active ;
  • Ctrl+a X Ferme la région active.

Les dieux du screen

Je n'irai pas plus loin car je n'en ai pas personnellement l'usage, cependant si vous êtes administrateur réseau et que l'outil a attiré votre attention, voici quelques fonctionnalitées que je n'ai pas abordé mais qui sont possibles :

  • Monitoring Permet de configurer des signaux dans certaines fenêtres pour demander à screen de signaler une activité dans la fenêtre (avec un raccourci dédié pour basculer dans la fenêtre qui a émis le signale) ;
  • Shell permet de spécifier le type de shell utilisé dans la fenêtre, une autre partie de la documentation parle de terminaux virtuels (ça ne me parle pas mais vous peut-être), on peut également modifier le prompt selon la fenêtre ;
  • Encodage Permet de gérer différent encodage dans chaque fenêtre ;
  • Buffer Permet de faire des selections, copié, collé à la manière de emacs pour faire des coller dans d'autres fenêtre, propose également des système de recherche incrémentale ;
  • Customisation On peut apparement customiser avec des couleurs le caption, très utile si vous utilisez un screen pour administrer plusieurs serveurs ;

Et beaucoup d'autres choses qui échappe totalement au webmaster que je suis :) Mais la documentation fait 120 pages

Infos

Probablement l'un des utilitaires les plus pratique quand on commence à avoir une utilisation plus intensive de la console.

  • Niveau : Débutant
  • Catégorie : Linux - Shell
  • Publié le : 06 février 2012
  • Dernière Mise à jour : 06 février 2012
  • Notions abordées :

Commentaires

par mattux

le 22 avril 2012 à 03:55:30

Pour une ptite montre un peu plus propre:

while true;
do
clear;
date +%H:%M:%S;
sleep 1;
done;

Laisser un commentaire


Votre email ne sera pas publié