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 :

  • Debian :
# aptitude install screen
  • Ubuntu :
$ 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) :

  • C-a d : détache screen. Le programme lancé dans screen continue à s'exécuter et vous pouvez y revenir en lançant depuis un terminal
    screen -r //nom_de_ma_session//
  • C-a c : ouvre une nouvelle fenêtre dans cette session de screen. Vous pouvez passer d'une fenêtre à l'autre sans interrompre les programmes qui y tournent en utilisant le raccourcis C-a N où `N' est le numéro de la fenêtre (0, 1, …)
  • C-a : : après avoir tapé le caractère `:' vous pouvez entrer une commande longue (dans le bas de l'écran), comme avec M-x dans emacs. Nous verrons certaines de ces commandes plus loin.

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) :

  • acladd : ajoute un utilisateur. Attention : cette utilisateur peut se connecter immédiatement et à tous les droits, y compris l'utilisation des commandes de type C-a :…
  • acldel : supprime un utilisateur. Il ne peut plus accéder à la session et toute ses sessions encore attachées sont immédiatement détachées.
  • aclchg : c'est la commande la plus précise, qui permet de définir quels droits on donne. Elle s'utilise ainsi :

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.

  • Notez aussi l'existence de la commande displays qui indique le nombre de sessions actuellement attachées à celle courante.

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 :

  • C-a S ou split : divise le screen pour ajouter une nouvelle région.
  • C-a tab : passe à la région suivante. Vous pouvez changer la fenêtre affichée dans cette région en utilisant C-a N avec N le numéro de la fenêtre, ou créer une nouvelle fenêtre contenant un shell avec C-a c.
  • C-a X : détruit la région courante. La fenêtre qu'elle contient n'est pas détruite.
  • C-a Q : détruit les autres régions. Seule la région courante est conservée.

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 :

  • C-a Echap : entre en mode de copie. Placez-vous au début de la zone à copier et faites espace, puis à la fin et espace à nouveau.
  • C-a > : colle le texte copié dans un fichier.
  • C-a ] : colle le texte copié dans la fenêtre active.
 
screen.txt · Dernière modification: 2008/07/09 22:33 (édition externe)
 
Recent changes RSS feed Creative Commons License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki