SCREEN
Il existe plusieurs manières d'avoir sur son système un nombre important de consoles ou terminaux virtuels. La plus classique est sans doute l'utilisation des terminaux virtuels en mode texte (console) grâce aux combinaisons de touches Alt+Fn où n est le numéro de terminal. Mais il existe d'autres solutions, dont une très puissante : screen.
Le principal problème des terminaux virtuels est le fait qu'une fois qu'on y a pris goût il s'en suit un abus et une forte dépendance :) Ainsi, les quelques 6 terminaux utilisables par défaut sont rapidement insuffisants. Il est possible d'augmenter ce nombre au prix d'une petite configuration.
C'est dans le fichier /etc/inittab que les différents getty sont configurés. Il suffit alors d'en ajouter quelques-uns. En faisant fi des terminaux réservés (comme le tty7 pour xdm et X), on arrive ainsi à obtenir 22 terminaux virtuels. Mais leur utilisation n'est pas vraiment souple et nécessite une gymnastique mentale :
- terminaux de 1 à 12 accessibles via Atl+F1 à Alt+F12
- terminaux de 13 à 22 accessibles via Maj+Alt+F1 à Maj+Alt+F12
Le terminal 15 est donc accessible par la touche F3... ce n'est pas pratique.
La seconde solution pour obtenir un maximum de terminaux est d'utiliser xterm, rxvt, aterm ou encore Eterm pour ouvrir des consoles sous X. Avec un bon gestionnaire de fenêtres (comme Enlightenment), on arrive à un résultat bien plus utilisable. Mais, là encore, il reste trop de limitations (nombre de bureaux, mémoire, déplacements).
Heureusement pour nous, il nous reste une solution : l'utilitaire screen...
Screen
Sous ce nom modeste se cache un programme d'une puissance impressionnante. Screen est tout simplement un gestionnaire de fenêtres textes en plein écran. Entendez par là qu'il permet de multiplexer un terminal (physique ou virtuel) entre plusieurs processus. Vous pouvez lancer autant d'applications que vous souhaitez dans un seul et même terminal, chacune des applications ayant son propre affichage sur le terminal.
Vous pourrez récupérer la dernière version de screen (3.9.8) sur n'importe quel miroir de ftp.gnu.org (ou sur le CD du magazine, répertoire utils). Sa compilation/installation ne pose pas de problème spécifique (un simple ./configure --prefix=/usr && make && make install fera l'affaire). Les heureux possesseurs d'une Debian feront un apt-get install screen.
Vous pourrez dès lors lancer votre première session et créer votre première fenêtre en lançant screen :
$ screen
Si vous obtenez un message vous informant que screen ne peut trouver de terminal libre ("sorry, No PTY"), assurez-vous d'avoir compilé votre kernel avec l'option CONFIG_DEVPTS_FS (/dev/pts file system for Unix98 PTYs). Si tel est bien le cas, le problème provient du fait que vous n'avez pas monté le pseudo système de fichiers devpts. Corrigez l'erreur avec :
# mount -t devpts NONE /dev/pts
screen pourra alors trouver ce qu'il lui faut et vous serez accueilli par un message typique des programmes GNU vous informant de la licence, etc.
Vous vous retrouverez alors devant un terminal tout à fait classique, mais ne vous y trompez pas, vous êtes bel et bien sous screen.
Utilisation
Tous les raccourcis clavier de screen débutent par la séquence Ctrl+A (C-a) puis un caractère indiquant l'action à effectuer. Lancez une commande utilisant le terminal de manière interactive, top par exemple. Votre terminal est donc très occupé à vous informer sur les différents processus en mémoire.
Utilisez, à présent, la séquence C-a c. Vous devez obtenir un nouveau terminal ou plus exactement une nouvelle fenêtre. Lancez alors une autre commande interactive (watch -n 1 free).
Vous pouvez passer d'une fenêtre à l'autre en utilisant :
- C-a <espace> pour accéder à la fenêtre suivante (équivalent à C-a N) ;
- C-a C-a pour accéder à la fenêtre précédente (équivalent à C-a <back>) ;
- C-a n où n est le numéro de la fenêtre entre 0 et 9 pour accéder directement à une fenêtre.
Notez que les deux premières commandes permettent de "boucler" sur les fenêtres. C'est-à-dire que si vous répétez l'une ou l'autre des séquences, vous retomberez forcément sur votre fenêtre de départ.
Mais screen ne s'arrête pas à la simple gestion des fenêtres. Il offre un large panel de possibilités, dont voici quelques exemples :
- capture d'écran de la fenêtre avec C-a h (hardcopy). Un fichier hardcopy au format ASCII est créé.
- capture d'un log d'activité avec C-a H. Un fichier screenlog est créé.
- copie d'une zone de fenêtre avec C-a C-[ puis marquage de la zone avec la barre d'espace.
- coller la copie avec C-a C-].
Ce n'est pas tout, il existe une fonctionnalité qui est une véritable bénédiction pour tous les utilisateurs se connectant à une machine via le réseau (avec ssh par exemple). Imaginez que vous soyez un grand amateur d'IRC ou encore de Gnutella. Comment conserver la connexion et poursuivre la discussion quel que soit l'endroit où vous vous trouvez ?
Voilà une chose bien impossible avec une gestion de terminaux virtuels classique. Avec screen, c'est la plus simple et la plus naturelle des choses. En effet, screen permet non seulement de jongler avec les fenêtres, mais il peut aussi se détacher du terminal depuis lequel il a été lancé.
Prenons un exemple concret. Depuis une fenêtre screen, lancez votre client IRC (irssi), Gnutella (gnut) ou toute autre application en mode console. Utilisez la séquence de touche C-a d qui va détacher screen du terminal. Vous reviendrez alors sur le terminal de départ, un message vous confirmant la manipulation ("[detached]").
A présent, votre application continue de fonctionner et vous pouvez même fermer le terminal. Pour récupérer la fenêtre screen, il vous suffit d'ouvrir un nouveau terminal (ou une connexion ssh depuis une autre machine) et d'utiliser la commande :
$ screen -r
Vous vous reconnecterez automatiquement à votre session screen et retrouverez vos différentes fenêtres et votre application. Si plusieurs screen ont été lancés, vous devrez choisir celui auquel vous voulez vous reconnecter.
$ screen -r
There are several suitable screens on:
17438.pts-0.morgane (Detached)
17600.pts-4.morgane (Detached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.
Chaque process screen est identifiable par son PID (numéro de process), son terminal d'origine et l'hôte où il fonctionne. Vous pouvez alors utiliser ces informations pour choisir votre process screen :
$ screen -r pts-4.morgane
Bien sûr, comme l'application est bien faite, vous pouvez lister les screen en fonctionnement :
$ screen -ls
There are screens on:
17438.pts-0.morgane (Detached)
17600.pts-4.morgane (Attached)
2 Sockets in /tmp/screens/S-root.
et vous reconnecter à une session screen même si celle-ci n'a pas été précédemment détachée :
$ screen -d -r pts-4.morgane
Vous détacherez alors cette session de screen de son terminal et la reconnecterez sur le terminal que vous êtes en train d'utiliser. Vous pouvez également détacher une session sans vous y reconnecter avec la seul option -d. Dernier paramètre intéressant dans ce cas, vous pouvez préciser immédiatement à quelle fenêtre de la session screen vous désirez vous reconnecter en utilisant -p (n'oubliez pas, les fenêtres sont numérotées à partir de 0).
Terminons en parlant le l'option -x qui est, à mon goût, aussi amusante qu'utile. Celle-ci permet, contrairement au couple -d -r de se reconnecter à une session non détachée. Plus clairement, vous pouvez ainsi obtenir deux exemplaires du même terminal. Comprenez bien qu'il ne s'agit pas de deux terminaux ou même de deux fenêtres, mais bel et bien de deux vues sur le même élément. Ce genre de fonctionnalités permet toutes les pirouettes imaginables :)
Liens
Screen
http://www.gnu.org/software/screen/
Miroir GNU français
ftp://ftp.lip6.fr/pub/gnu/screen