Comment utiliser la commande d’écran de Linux



L’outil d’écran de Linux offre la possibilité de déplacer les applications de terminal en cours d’exécution à l’arrière-plan et de les ramener au premier plan quand on le souhaite. Il assure également la prise en charge des affichages en mode écran partagé et fonctionne sur les connexions SSH, même en cas de déconnexion et de reconnexion.

Qu’est-ce que la commande d’écran ?

La commande screen est un multiplexeur de terminal, riche en options. Affirmer qu’il peut faire beaucoup est un euphémisme. La page de manuel comporte plus de 4100 lignes.

Voici les scénarios d’utilisation les plus courants de la commande screen, que nous allons explorer en détail dans cet article :

  • La démarche standard consiste à créer une nouvelle fenêtre hébergeant un shell, à y exécuter une commande, puis à pousser cette fenêtre à l’arrière-plan (ce qu’on appelle le « détachement »). Quand on veut voir l’évolution de notre processus, on peut ramener la fenêtre au premier plan (« rattacher ») et l’utiliser à nouveau. C’est idéal pour les processus de longue durée que l’on ne veut pas interrompre involontairement en fermant la fenêtre du terminal.
  • Après avoir lancé une session d’écran, on peut créer d’autres fenêtres et y exécuter des processus supplémentaires. On peut facilement naviguer entre les fenêtres pour suivre leur progression. On peut aussi diviser la fenêtre du terminal en zones verticales ou horizontales et afficher les différentes fenêtres d’écran dans une même fenêtre.
  • On peut se connecter à une machine distante, lancer une session d’écran et démarrer un processus. On peut ensuite se déconnecter de l’hôte distant, se reconnecter, et le processus sera toujours en cours d’exécution.
  • Il est possible de partager une session d’écran entre deux connexions SSH distinctes, permettant à deux personnes de voir la même chose en temps réel.

Installation de Screen

Pour installer screen sous Ubuntu, utilisez la commande suivante :

sudo apt-get install screen

Pour installer screen sous Manjaro, utilisez cette commande :

sudo pacman -Sy screen

Sous Fedora, tapez la commande suivante :

sudo dnf install screen

Premiers Pas avec Screen

Pour lancer screen, il suffit de taper la commande ci-dessous et de valider avec la touche Entrée :

screen

Une page d’informations sur la licence s’affiche. On peut appuyer sur la barre d’espace pour lire la seconde page ou sur Entrée pour revenir à l’invite de commande.

On se retrouve alors à l’invite de commande et rien ne semble s’être produit. Cependant, on exécute désormais un shell dans un émulateur de terminal multiplexé. Pourquoi est-ce un avantage ? Commençons par lancer un processus qui va prendre un certain temps. Nous allons télécharger le code source du dernier noyau Linux et le rediriger vers un fichier nommé latest_kernel.zip.

Pour cela, on tape la commande suivante :

curl https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.5.9.tar.xz > latest_kernel.zip

Le téléchargement démarre et la sortie curl nous indique sa progression.

Nous ne pouvons pas montrer une image de la séquence de touches suivante. On tape Ctrl+A, on relâche ces touches, puis on appuie sur d pour détacher l’écran.

Le processus de téléchargement est toujours en cours, mais la fenêtre qui affiche le téléchargement disparaît. On est renvoyé à la fenêtre de terminal à partir de laquelle on a lancé la session d’écran. Un message indique qu’une fenêtre d’écran nommée 23167.pts-0.howtogeek a été détachée.

Le numéro au début du nom de la fenêtre est nécessaire pour la rattacher. Si vous l’oubliez, vous pouvez toujours utiliser l’option -ls (liste), comme indiqué ci-dessous, pour obtenir la liste des fenêtres détachées :

screen -ls

Quand on est prêt, on peut utiliser l’option -r (reattach) et le numéro de la session pour la rattacher, comme ceci :

screen -r 23167

La fenêtre qui fonctionnait à l’arrière-plan est ramenée dans la fenêtre de notre terminal comme si elle n’avait jamais quitté.

Si c’est un processus qui va jusqu’à sa conclusion, il finira par se terminer. S’il s’agit d’un processus continu, on voudra éventuellement y mettre fin. Dans tous les cas, lorsque le processus se termine, on peut taper exit pour quitter l’écran. On peut aussi appuyer sur Ctrl+A, puis sur K pour forcer la fermeture d’une fenêtre.

Tapez la commande suivante :

exit

On revient à la fenêtre de terminal précédente, qui affiche toujours la commande que l’on a utilisée pour rattacher la fenêtre. Comme on a fermé notre seule et unique fenêtre détachée, un message indique que l’écran se termine.

Utilisation de sessions d’écran nommées

On peut utiliser l’option -S (nom de session) pour nommer la session d’écran. Il est plus pratique de se reconnecter à une session si l’on utilise un nom mémorisable plutôt que l’identifiant numérique de la session. Pour nommer la session « bigfile », on tape ce qui suit :

screen -S bigfile

Lorsque screen lance la session, on voit une fenêtre vide avec une invite de commande. On va télécharger un gros fichier, afin d’utiliser un processus de longue durée comme exemple.

On tape ce qui suit :

curl http://ipv4.download.thinkbroadband.com/1GB.zip > bigfile.zip

Une fois le téléchargement démarré, on appuie sur Ctrl+A, puis sur D pour détacher la session. On tape ce qui suit pour utiliser l’option -ls (liste) avec screen, afin de consulter les détails de notre session détachée :

screen -ls

Derrière l’identifiant numérique (23266), on voit le nom de notre session (bigfile). On tape ce qui suit, en incluant le nom de la session, pour la rattacher :

screen -r bigfile

Nous sommes reconnectés à notre fenêtre de téléchargement et nous constatons que le téléchargement est toujours en cours.

Lorsque le téléchargement est terminé, on tape exit pour fermer la fenêtre de session.

Utilisation de Screen avec plusieurs fenêtres

Jusqu’à présent, on a utilisé screen pour placer un seul processus à l’arrière-plan dans une fenêtre détachée. Cependant, screen est capable de faire bien plus. Nous allons maintenant exécuter plusieurs processus qui nous permettent de surveiller différents aspects de notre ordinateur.

Pour démarrer une session d’écran appelée « monitor », on tape ce qui suit :

screen -S monitor

À l’invite de commande de notre nouvelle session, on va lancer dmesg en utilisant les options -H (lisible par l’homme) et -w (attendre les nouveaux messages). Cela permettra d’afficher les messages du tampon du noyau ; les nouveaux messages s’afficheront au fur et à mesure de leur apparition.

On tape la commande suivante :

dmesg -H -w

Les messages existants s’affichent. Nous ne sommes pas retournés à l’invite de commande car dmesg attend l’arrivée de nouveaux messages et les affichera dès qu’ils apparaîtront.

On souhaite exécuter une autre application. On a donc besoin d’une nouvelle fenêtre d’écran. On appuie sur Ctrl+A, puis sur C pour créer une nouvelle fenêtre. On va utiliser watch pour exécuter de manière répétée la commande vmstat. On obtient ainsi un affichage de l’utilisation de la mémoire virtuelle de notre ordinateur.

À la nouvelle invite de commande, on tape ce qui suit :

watch vmstat

La sortie vmstat s’affiche et se met à jour toutes les deux secondes.

Nos deux processus sont désormais en cours d’exécution. Pour basculer entre les fenêtres de l’écran, on appuie sur Ctrl+A et sur le numéro de la fenêtre. La première que l’on a créée est la fenêtre zéro (0), la suivante est la fenêtre 1, et ainsi de suite. Pour accéder à la première fenêtre (celle de dmesg), on appuie sur Ctrl+A puis sur 0.

Si on appuie sur Ctrl+A puis sur 1, on revient à la fenêtre vmstat.

C’est plutôt pratique ! On peut appuyer sur Ctrl+A, puis sur D pour détacher cette session ; on pourra la rattacher plus tard. Les deux sessions seront toujours en cours d’exécution. Encore une fois, pour basculer entre les fenêtres, on appuie sur Ctrl+A et sur le numéro (0 ou 1) de la fenêtre vers laquelle on veut basculer.

Passons à l’étape suivante, qui consiste à visualiser les deux écrans dans une même fenêtre. Quand on fait cela, on agrandit la fenêtre du terminal à une taille qui rend cette étape utile. Nos exemples sont limités à la taille de nos captures d’écran, de sorte que nos fenêtres paraîtront un peu étroites.

Pour cela, on appuie sur Ctrl+A puis sur Maj+S (un « S » majuscule est requis).

La fenêtre se divise en deux « régions ».

La région supérieure affiche toujours vmstat, et la région inférieure est vide. Le curseur est mis en évidence dans la capture d’écran ci-dessous. Pour le déplacer vers la région inférieure, on appuie sur Ctrl+A puis sur Tab.

Le curseur se déplace vers la région inférieure, qui n’est en fait qu’un espace vide. Ce n’est pas un shell, donc on ne peut rien y saisir. Pour obtenir un affichage utile, on appuie sur Ctrl+A puis sur « 0 » pour afficher la fenêtre dmesg dans cette région.

Cela nous donne les deux sorties en direct dans une fenêtre partagée. Si on appuie sur Ctrl+A et D pour détacher la fenêtre, puis qu’on la rattache, on perdra la vue du volet divisé. Cependant, on peut la rétablir avec les raccourcis clavier suivants :

Ctrl+A, S : divise la fenêtre horizontalement.
Ctrl+A, Tab : Déplacer vers la région inférieure.
Ctrl+A, 0 : affiche la fenêtre zéro dans la région inférieure.

On peut aller encore plus loin. Nous allons maintenant diviser le volet inférieur verticalement et ajouter un troisième processus à l’affichage. Avec le curseur dans la région inférieure, on appuie sur Ctrl+A puis sur C pour créer une nouvelle fenêtre avec un shell. La région inférieure affiche la nouvelle fenêtre et nous donne une invite de commande.

Ensuite, on exécute la commande df pour vérifier l’utilisation du système de fichiers :

df

Quand on voit df en cours d’exécution, on appuie sur Ctrl+A et sur le caractère pipe (|). Cela divise la région inférieure verticalement. On appuie sur Ctrl+A et Tab pour passer à la nouvelle région. Ensuite, on appuie sur Ctrl+A et 0 pour afficher la fenêtre dmesg.

On peut aussi naviguer d’une région à l’autre et ajouter d’autres divisions verticales ou horizontales. Voici quelques combinaisons de touches plus utiles :

Ctrl+A, Tab : va et vient entre les régions actuelles et précédentes.
Ctrl+A, Q : ferme toutes les régions sauf celle qui est actuelle.
Ctrl+A, X : ferme la région actuelle.

Utilisation de Screen via SSH

Avec screen, on peut démarrer une session de fenêtre, la détacher pour qu’elle continue de fonctionner à l’arrière-plan, se déconnecter ou se reconnecter, et rattacher la session.

Établissons une connexion SSH à notre ordinateur à partir d’un autre avec la commande ssh. On doit fournir le nom du compte avec lequel on va se connecter ainsi que l’adresse de l’ordinateur distant.

Pour notre exemple, on tape ce