Screen

Utilisation basique

Lancement de l’application

Il existe plusieurs manières de lancer screen : soit en créant une nouvelle session du programme soit en en récupérant une existante. Voici une petite liste de paramètres utiles de la commande screen :

aucun paramètre   lancer une nouvelle session de screen
-ls               lister les sessions existantes avec leur identifiants
-r                récupérer ("rattacher") une ancienne session (fonctionne uniquement s'il n'existe qu'une session)
-r identifiant    rattacher une ancienne session par son identifiant
-S identifiant    créer une nouvelle session en définissant son identifiant

Gestion des fenêtres dans une session

<ctrl-a> c           créer une nouvelle fenêtre
<ctrl-a> <ctrl-p>    revenir à la fenêtre précédente (dans l'ordre)
<ctrl-a> <ctrl-n>    aller à la fenêtre suivante (dans l'ordre)
<ctrl-a> <ctrl-a>    retour rapide à la fenêtre précédente
<ctrl-a> "           afficher la liste des fenêtres existantes
<ctrl-a> '           aller à une fenêtre en spécifiant son nom ou numéro
<ctrl-a> A           renommer la fenêtre actuelle (utile pour la commande ci-dessus)
<ctrl-a> k           tuer (kill) une fenêtre (en cas de blocage)

Sortir d’une session

<ctrl-d> (ou exit)   quitter screen (comme en Bash)
<ctrl-a> <ctrl-d>    détacher l'application du terminal
<ctrl-a> D D         détacher l'application du terminal et se délogger
<ctrl-a> <ctrl-\>    tuer toutes les fenêtres et quitter l'application

Divers

<ctrl-a> ?           afficher l'aide
<ctrl-a> C           effacer le contenu de la fenêtre
<ctrl-a> <ctrl-x>    verrouiller la session (mot de passe - shell - de l'utilisateur requis pour déverrouiller)

Trucs & astuces

Les directives suivantes sont à consigner dans le fichier de configuration utilisateur ~/.screenrc, ou dans /etc/screenrc afin de leur donner une portée globale au système.

Supprimer le message d’accueil au lancement de screen

startup_message off

Détacher automatiquement le screen en cas de coupure de connexion

autodetach on

Utiliser la séquence de commande dans une application/shell

Si vous avez besoin d’utiliser la séquence <ctrl-a> dans une fenêtre - typiquement, pour le raccourci clavier identique en Bash - deux solutions sont possibles :

utiliser la séquence de commande littérale

<ctrl-a> a

modifier la séquence de commande en autre chose que

escape ^ww      la séquence de commande est désormais <ctrl-w> (autre exemple : ^zz donnera <ctrl-z>, etc.)

Note : il est également possible de modifier cette directive lors de la création d’une session avec l’option -e (exemple : screen -e ^ww)

Prendre une “capture d’écran” d’une fenêtre

<ctrl-a> h

ℹ️ Note : manipulation à effectuer dans une fenêtre, pas dans les fichiers de configuration.

Remonter dans l’historique (mode scrollback)

Il n’est pas possible de consulter l’affichage de commandes précédentes de la même manière qu’en console traditionnelle, il existe pour ce faire un mode dit “scrollback” :

<ctrl-a> [      passer en mode scrollback (fonctionne également avec <ctrl-a> <Echap>

Une fois en mode scrollback, vous pouvez remonter/redescendre dans l’historique avec les flèches Haut/Bas, ainsi que PageUp/PageDown.

<Echap>      quitter le mode scrollback

Faire des copier/coller

En mode “scrollback” vous pouvez remonter dans les lignes précédentes du buffer d’affichage de la fenêtre (manipulation à effectuer dans une fenêtre, pas dans les fichiers de configuration).

<ctrl-a> [      passer en mode scrollback : appuyez sur la touche <Espace> une première fois pour 
                commencer à sélectionner, sélectionnez votre texte et appuyez une deuxième fois pour copier en mémoire tampon.
<ctrl-a> ]      coller le contenu de la mémoire tampon

ℹ️ Vous pouvez copier/coller entre plusieurs fenêtres également :)

Être averti de l’activité dans les autres fenêtres du screen

Avoir plusieurs fenêtres ouvertes en même temps c’est bien, mais on ne peut pas les regarder en même temps. La séquence suivante (dés)active la notification d’événements dans les autres fenêtres par un message dans la barre d’état :

<ctrl-a> M

Changer le dossier courant

<ctrl-a> :chdir /mon/nouveau/chemin

Exécuter une commande dans toutes les fenêtres d’un screen

Il peut être très pratique de pouvoir exécuter une même commande dans plusieurs fenêtres d’une session screen, typiquement si vous avez une fenêtre ouverte sur plusieurs machines d’un “cluster” à la manière d’un dsh ou cluster-ssh :

<ctrl-a> :at "#" stuff "unecommande^M"

ℹ️ Vous pouvez remplacer "#" par \#, et ^M indique à screen qu’il doit exécuter la commande (l’équivalent d’appuyer sur la toucher pour exécuter une commande) : sans cela screen ne fera qu’écrire la ligne de commande sans l’exécuter.

Il est également possible de spécifier une fenêtre dans laquelle exécuter la commande en précisant son numéro ou encore son nom, si vous l’avez renommée :

<ctrl-a> :at "2#" stuff "uname -a^M"      exécute la commande "uname -a" dans la fenêtre n°2
<ctrl-a> :at "plop#" stuff "top^M"        exécute la commande "top" dans la fenêtre nommée "plop"

Se connecter à un routeur ou un switch via le port série avec GNU Screen

Si vous n’avez pas de minicom ou cu sous la main, sachez que vous pouvez utiliser screen pour vous logger à un routeur ou tout équipement doté d’un port série (dit “null modem”). La syntaxe est screen <device modem> [vitesse], par exemple :

screen /dev/ttyS0 9600

Remanier l’ordre des fenêtres

Afin de remanier l’ordre des fenêtres ouvertes dans une session, vous pouvez changer le numéro attribué à une fenêtre en utilisant la commande suivante (où X est un numéro) :

<ctrl-a> :number X