Screen sur Linux : multiplexeur pour exécuter plusieurs commandes et sans perdre leurs exécutions

malekalmorte

Création :

24 août 2018

Modification :

Les administrateurs ou utilisateurs Linux débutants rencontrent toujours ce problème au départ lors de connexion SSH.
Comment faire en sorte que les commandes lancées continuent même si la session SSH se ferme et est perdue ?
Vous souhaitez lancer plusieurs commandes qui prennent du temps sans devoir lancer de nouvelle session SSH ?

Screen sur Linux est un multiplexeur qui permet de gérer plusieurs sessions de terminal à partir d’une seule interface.
De plus, il vous permet exécuter une ou plusieurs commandes, dans des sessions multiples depuis un même terminal virtuel.
Ainsi, ce terminal virtuel perdure même si l’utilisateur ferme la session SSH.

Ce tutoriel vous explique comment utiliser screen sur Linux pour exécuter ou ou plusieurs commandes.

Screen sur Linux : multiplexeur pour exécuter plusieurs commandes et sans perdre leurs exécutions

Comment installer Screen

Cet utilitaire screen n’est pas installé par défaut sur votre distribution, il faut l’installer manuellement en utilisant les commandes de packages de votre distribution :

Avec APT Sur Debian, Linux Mint, Ubuntu et autres dérivés :

apt-get install screen

Avec Dnf sur Fedora :

dnf install screen

Comme toute commande Linux, screen accepte de multiples options :

screen sur Linux : lancer plusieurs commandes sans perdre leurs exécutions

Créer un terminal virtuel avec screen

screen permet de créer des terminaux virtuels auquel un ou plusieurs utilisateurs peuvent s’attacher et lancer des commandes.
Cela permet en outre de partager un terminal qui sera visible de plusieurs utilisateurs connectés.
Mais surtout screen permet de laisser ces terminaux en cours de fonctionnement même si l’utilisateur est déconnecté.

Les sessions à l’écran peuvent être démarrées puis détachées du terminal de contrôle, ce qui permet de les laisser fonctionner en arrière-plan et de les reprendre à tout moment et même à n’importe quel endroit. Il vous suffit de démarrer votre session à l’écran et, lorsque vous le souhaitez, de la détacher du pseudo-terminal (ou du terminal de contrôle) et de vous déconnecter. Lorsque vous le souhaitez, vous pouvez vous reconnecter et reprendre la session.

Rapidement donc pour débuter et manipuler un ou plusieurs écrans virtuels :

screen -a

Les terminaux virtuels sont identifiés par un nom de session ou un identifiant.
Si vous souhaitez donner un nom spécifique à la session, utilisez l’option -s :

screen -S <nom_de_la_session>

Comment détacher une session

Pour détacher la session actuelle (la laisser en arrière-plan tout en maintenant les processus actifs) :

Ctrl+a puis d

Vous revenez alors sur votre terminal classique.

Comment attacher une session existante

Tout d’abord, vous devez lister les sessions en cours afin d’obtenir leurs identifiants :

screen -ls

Puis pour s’attacher à un terminal virtuel dont l’identifiant est 1234 :

screen -r 1234

Pour forcer à détacher une session déjà ouverte et la ré-attacher, ajoutez l’option -d

screen -dr <nom/identifiant session>

Cela détache la session d’un autre endroit et la rattache à votre terminal actuel.

A partir de là, vous créez des terminaux virtuels lancés une commande qui peut prendre un certains temps à s’exécuter.
Pendant ce temps, vous pouvez revenir au terminal d’origine et continuez à travailler afin d’attendre que cette commande se soit terminée.
Cela est beaucoup plus pratique que de passer la commande en arrière plan et revenir dessus avec la commande fg.

Utiliser les raccourcis clavier de screen

Une fois que vous êtes entré dans un bureau virtuel, ce dernier accepte de multiples touches raccourcis pour effecteur diverses actions.
La plupart de ces touches raccourcies débutent par CTRL+a suivi d’une lettre.
On très facilement obtenir la liste des raccourcis clavier avec CTRL+a suivi de ?.
Ce qui nous donne :

screen sur Linux : lancer plusieurs commandes sans perdre leurs exécutions

et donc pour les deux raccourcis essentiels :

  • Pour fermer un écran virtuel complètent : CTRL+d
  • Se détacher et sortir d’un écran virtuel pour y revenir plus tard : CTRL+a puis d
  • Passer une commande : CTRL+a

Ces commandes à saisir fonctionnent un peu comme vim puisque tout en bas de l’écran s’affiche le prompt pour y saisir la commande.
Enfin, il est tout à fait possible d’envoyer une commande à un terminal :

screen -S <nom> -X <commande>

Ex :

screen -S 1234 -X quit

Diviser un terminal virtuel en plusieurs fenêtres

Il est enfin possible de séparer un écran virtuel avec d’autres écran virtuel afin de pouvoir lancer plusieurs fenêtres.
Le principe est d’utiliser les raccourcis suivants :

ACTIONRACCOURCI CLAVIER
Diviser l’écran horizontalementCTRL+a puis |
Diviser l’écran horizontalement CTRL+a puis S
Créer un nouvel écranCTRL+a puis c
Lister tous les écrans (dans le cas d’un partage)CTRL+a puis « 
Renommer une fenêtreCTRL+A puis A
Pour passer d’un écran à l’autresu_rclavier]CTRL[/su_rclavier]+a puis n
ou
CTRL+a puis tabulation
Revenir à l’écran précédent CTRL+a puis p
Sauter vers un écran recyclé CTRL+A puis Espace
Les raccourcis claviers pour naviguer dans screen

Dans certains cas, il est utile d’utiliser les commandes comme :

  • resize qui permet de redimensionner la taille d’un écran virtuel – ex : resize 50% ou encore resize 100 pour une taille de 100 pixel.
  • lorsque vous sortez de l’écran, vous perdez ces derniers, il faut enregistrer l’état avec : save layout default
  • remove permet de supprimer un écran

Comme c’est assez visuel, le plus simple est de regarder la vidéo.

Exécuter une commande automatiquement

Le fichier .screenrc permet de configurer des commandes qui seront exécutées automatiquement lors de l’attachement à un terminal virtuel.

Ce sont exactement les mêmes commandes que l’on peut appliquer avec le colon accessible par CTRL+A suivi de :

A partir de là, il est possible de faire différente chose.
Par exemple pour assigner une touche spécifique, comme ci-dessous utiliser la commande bindkey :

# KeyBindings
bindkey -k F1 kill  # bind f11 to kill terminal
bindkey -k F2 quit  # bind f12 to quit screen
bindkey ² prev   # bind "²" to move to previous window
bindkey = next   # bind "=" to move to next window
bindkey "^[q" prev
bindkey "^[w" next

La commande screen -t permet de lancer une commande en indiquant le nom et numéro écran

screen -t <Nom écran> <numéro> ssh -XC <adresser serveur>

et enfin on peut préparer l’écran virtuel avec les dispositions souhaitées :

split -v
screen -t bash 0 bash
select bash
focus right
split
screen -t HTOP 1 htop
select HTOP
focus down
screen -t SSH 2 ssh -XC [email protected]
select SSH

Ce qui nous permet d’obtenir ceci :

screen sur Linux : lancer plusieurs commandes sans perdre leurs exécutions

Pour explications de ces commandes :

  • On split l’écran verticalement en deux (split -v)
  • Dans l’écran de gauche, on lance bash (screen -t)
  • puis on sélectionne cet écran pour passer à celui de droite (focus right)
  • on divise l’écran horizontalement (split)
  • puis on lance htop et on sélectionne l’écran
  • enfin on passe à l’écran en dessous (focus down) pour lancer la commande SSH.

Les commandes SSH peuvent être empilé et on peut alors passer de l’une à l’autre avec CTRL+A suivi du numéro.
Vous pouvez tester l’enchaînement manuellement avec le colon.

Protéger un écran virtuel screen par un par un mot de passe

Le fichier .screenrc permet d’exécuter une commande lors de l’attachement à un écran virtuel.
Rien n’empêche donc de demander un mot de passe. Il faut dans un premier temps créer le hash d’un mot de passe chiffré, par exemple pour obtenir le hash du mot de passe « kikoo », saisir :

mkpasswd kikoo
kP.sZx0lpOS6g

puis dans le fichier .screenrc, on inscrit le mot de passe chiffré de cette manière :

password crypt_password

ainsi soit donc dans notre exemple :

password kP.sZx0lpOS6g

La prochaine fois que vous allez créé un nouvel écran virtuel et tenter de vous y attacher, le mot de passe vous sera demandé.

screen sur Linux : lancer plusieurs commandes sans perdre leurs exécutions

Screen en vidéo

Enfin comme tout cela est assez visuel et pas forcément simple à expliquer, voici une vidéo qui montre toutes les possibilités de screen.

A propros de malekalmorte

malekal-site-logo-150

Passionné par l'informatique depuis très jeune, j'aide les internautes sur les forums depuis 2005 pour résoudre leurs tracas informatiques.
Je vous propose par la même occasion ce site avec de nombreux tutoriels pour vous aider aussi à résoudre de manière autonome les problèmes informatiques du quotidien.