Table des matières

Qu'est-ce que screen ?

Screen est un terminal virtuel. Grâce à lui, vous pouvez lancer un shell ou tout autre programme à l'intérieur. Vous pouvez ensuite le détacher de votre shell actuel et le réattacher plus tard. Ainsi, si vous fermez votre shell (fermeture de la session SSH par exemple), le programme continue à s'exécuter, et vous pouvez en reprendre le contrôle plus tard.

Mais ce n'est pas la seule force de screen : il permet aussi de partager un shell (ou n'importe quel programme) entre plusieurs utilisateurs, en activant le mode “multiuser”. Vous êtes libres de définir à qui vous donnez un accès à votre session screen, les droits (lecture/écriture/exécution), etc…

Vous pouvez par exemple lancer un programme comme un daemon dans screen, en permettant à certains users d'y taper des commandes, à d'autres de simplement voir ce que le programme a affiché, …

Installation

Screen fait partie du projet GNU. Vous pourrez probablement trouver un paquet avec ce programme grâce au gestionnaire de paquet de votre distribution. Exemples :

# aptitude install screen
$ sudo apt-get install screen

Sinon, référez-vous à la page de screen sur gnu.org pour trouver les sources de ce programme, que vous pourrez compiler en utilisant la procédure propre aux Autotools :

$ ./configure
$ make
# make install

Je vous conseille aussi d'activer le bit SUID du programme, ce qui vous permettra d'utiliser screen en mode multiuser. Utilisez pour cela chmod, après avoir localisé l'exécutable :

$ whereis screen
screen: /usr/bin/screen /usr/share/screen /usr/share/man/man1/screen.1.gz
# chmod +s /usr/bin/screen

Utilisation

Une fois screen correctement installé, vous êtes libre d'en lancer une nouvelle instance à tout moment. Par exemple, si vous voulez lancer un simple shell dans screen, faites :

$ screen /bin/bash

ou tout simplement :

$ screen

Vous pouvez donner un nom à cette session pour pouvoir l'identifier plus tard, lorsque vous voudrez vous y attacher à nouveau, avec l'option -S :

$ screen -S nom_de_ma_session

Vous avez ensuite un shell tout ce qu'il y a de plus classique, ou votre programme si vous l'avez précisé en paramètre, à ce détail près que screen gère les raccourcis suivants (dans un style proche de emacs ; C-k indique qu'il faut laisser enfoncer la touche Ctrl et appuyer en même temps sur la touche k) :

Il est aussi possible de lancer screen directement détaché de votre terminal en utilisant les options -d et -m :

$ screen -d -m -S nom_de_ma_session mon_programme

et vous y revenez de la même manière que si vous l'aviez détaché ensuite, en utilisant :

$ screen -r nom_de_ma_session

Notez aussi l'existence de l'option -x qui remplace -r et qui permet de s'attacher à un screen qui est déjà attaché ailleurs (attention : ceci n'est pas le mode multiuser, c'est le même utilisateur qui s'attache deux fois).

Mode multiuser

Un point qui peut sembler inutile de screen mais qui peut se révéler pratique dans certains cas est son mode multiuser, qui permet à plusieurs utilisateurs différents d'utiliser le même shell/programme.

Tout d'abord, l'un des utilisateurs doit lancer screen. Cela se fait de la manière habituelle. Quand il souhaite passe en mode multiuser, il lui suffit d'utiliser la commande multiuser on|off, ce qui donne ceci :

C-a :multiuser on

Une fois ceci fait, la session devient multiutilisateur, mais les autres ne peuvent pas encore s'y attacher. En effet, vous devez leur en donner le droit. Pour cela, on utilise les commandes qui commencent par acl (Access Control List) :

aclchg utilisateur permission commandes utilisateur est le nom de l'utilisateur, permission les permissions qu'on lui donne sur les commandes. Vous pouvez utiliser * pour indiquer tous les utilisateurs connus ou toutes les commandes. permission est consitué des caractères `x', `w' et `r', précédées d'un signe `+' ou `-' pour indiquer si l'utilisateur a la permission ou non. Exemple :

aclchg user +xw-r *

Ceci donne l'autorisation à l'utilisateur d'exécuter (caractère `x') n'importe quelle commande ('*') (“exécution” correspond à l'utilisation de la barre en bas avec C-a : ainsi que les commandes passant par des raccourcis), d'écrire dans le terminal ('w') et lui retire l'autorisation de lire le contenu du terminal (ignoré pour les versions actuelles de screen). Attention : préciser uniquement -x donne la permission à l'utilisateur d'écrire, par défauts toutes les permissions sont données ! Mettre donc les permissions non-voulues précédées d'un signe `-' le cas échéant.

On peut ensuite rejoindre la session en utilisant screen -x utilisateur/nom_de_la_session où utilisateur est le nom de celui qui a lancé screen en mode multiuser et nom_de_la_session le nom de la session spécifié au lancement via -S.

Les régions

Il est possible de diviser le screen en plusieurs régions, et d'afficher dans chacune d'elle une fenêtre différente (ou d'afficher la même fenêtre dans plusieurs régions). Pour cela, utilisez les commandes suivantes :

Copier/coller

Vous pouvez copier/coller du texte dans screen, par exemple pour coller un morceau de la sortie d'un programme dans un programme lancé dans une autre fenêtre. Pour cela :