Screen

De Tuxien.

Sommaire

Introduction

Screen est un gestionnaire de fenêtres en mode texte : pas besoin de X.

La session est persistente : on peut s'y connecter et s'y deconnecter tout en gardant la session, comme avec X.

Plusieurs utilisateurs peuvent se connecter à la même session de screen, que ce soit pour le dépannage ou encore l'extreme programming.

Démarrer screen

Screen : sans argument (tout seul) : démarre une nouvelle session.

Voici quelques un des arguments possibles :

 
 -S NomDeLaSession           : démarre une nouvelle session sous le nom NomDeLaSession
 -x NomDeLaSession           : essaye de se connecter à la session NomDeLaSession
 -ls                         : voir les sessions en cours
 -wipe                       : tuer les screens qui resteraient fantômes
 -x [PID|NomDeSession]       : se connecter a un screen
 -c chemin/vers/config       : spécifier un chemin vers le fichier de configuration manuellement, par défaut: ~/.screenrc
 

Cas d'utilisations

Une session screen contient une ou plusieures fenêtres auquelles on a l'habitude de mettre un seul logiciel. On peut en mettre plusieurs bien sûr mais on va préférer utiliser un buffer pour BitchX, un pour Lynx ....


Example

Je suis par exemple à la maison, je lance dans une session de terminal un torrent à télécharger.

Arrivé au boulot, d'un coup de baguette magique,

je me connect en ssh et retrouve ma session de terminal distante dans la session en cours :

l'affichage reprend comme si j'étais devant mon terminal à la maison.

Interface

Principe

Pour éviter que les raccourcis de screens ne soient intercepté par le logiciel dans le buffer, chaque session screen utilise un caractère échappatoire (escape-key). Lorsque l'utilisateur presse ce caractère : screen intercepte le prochain caractère au lieu de l'envoyer dans le buffer. L'escape-key par défaut est Ctrl+a.

Raccourcis claviers

Les raccourcis claviers fonctionnent une fois que l'on est dans une session screen.

 Ctrl-a :       ouvre l'invite de commande screen (oui, c'est Ctrl-a et puis le caractère deux points :)
 Ctrl-a k         arrête le screen
 Ctrl-a  S (maj)  coupe la fenêtre en 2. La nouvelle fenêtre est vierge.
 Ctrl-a p         afficher la fenêtre précédente
 Ctrl-a n         afficher la fenêtre suivante
 Ctrl-a c         créer une nouvelle fenêtre avec un shell en entrée
 Ctrl-a A  (maj)  renommer la fenêtre
 Ctrl-a "         liste les screens
 Ctrl-a d         Detache le screen
 Ctrl-a ?         Affiche le liste des raccourcis clavier
 Ctrl-a Ctrl-w    Liste les fenêtres
 

Créer de nouveaux raccourcis

Commande bind

La commande bind permet de créer de nouveaux raccourcis, voici son synopsis :

 
 bind touche [ "commande 1" [ "commande 2 " [ ... "commande N" ] ] ]
 

bind: la commande en elle même, à utiliser dans son fichier de config ou dans l'invite de commande.

touche: la touche du nouveau raccourci

commande: une commande screen

Example

Créer une nouvelle fenêtre dans la session courante, qui lancera une connection telnet sur l'hote 'foobar' avec Ctrl+a puis f:

 
 bind f screen telnet foobar
 
Commande other

La commande other permet d'afficher la fenêtre dans laquelle vous etiez juste avant (comme en faisant escape-key deux fois) :

Commande select

La commande select permet de selectionner une fenetre avec un nombre.

Example
 
 select 2
 

Affiche la fenetre 2.

Commande stuff

La commande stuff permet d'inserer des keystrokes (appuis sur touche du clavier) dans la fenêtre courante.

 
 stuff trucs
 

stuff: la commande en elle même, à utiliser dans son fichier de config ou dans l'invite de commande.

trucs: les trucs a inserer dans la fenêtre.

Enter

Dans stuff, pour faire Enter (ou Entrée sur les claviers francais), utiliser soit ^J, soit \012.

 
 stuff unecommande^J
 
Example

Si la fenêtre propose un shell, la commande suivante permet de lancer updatedb en taches de fond (voir Bash, taches de fond, commande fg, raccourci bash Ctrl+z):

 
 stuff updatedb &^J
 
Example

La commande suivante permet d'assigner au raccourci clavier Ctrl+v la séquence: afficher fenêtre 0, tapper dedans updatedb&<ENTER>, afficher la fenetre precedente:

 
 bind v eval "select 0" "stuff updatedb&^J" "other"
 

Multiplicité

Pour utiliser plusieures sessions screens les unes dans les autres : il suffit d'attribuer un escape-key unique à chaque session.

L'invite de commande screen est interressante puisqu'elle permet de changer des paramêtres et d'executer des commandes, notamment :

 
 escape ^Hh            pour changer l'escape-key en Ctrl-h.
 startup_message off     supprime le message d'accueil de screen (que c'est un logiciel libre etc ...)
 vbell off               supprime la "visual bell", genre "Bell in window 6"
 hardstatus [on|off]
 hardstatus [always]lastline|message|ignore [string]
 hardstatus string [string]   Cette commande configure une ligne de status (example ci-après)
 

Ligne de status

Il n'y a pas de ligne de status par défaut, ce qui est bien dommage.

C'est quand même plus agréable d'avoir une sorte de barre de taches/status dans son gestionnaire de fenêtre.

Voici un exemple, à ajouter dans .screenrc ou a coller dans l'invite de commande :

 
 hardstatus alwayslastline "%{bk}%?%-Lw%?%{wb}%n*%f %t%?(%u)%?%{bk}%?%+Lw%= %{mk}@ %H %{ck}%Y%{bk}-%{ck}%m%{bk}-%{ck}%d %{yk}%D %{gk}%c"
 

Et en root, je la préfère toute en rouge :

 
 hardstatus alwayslastline "%{kr}%?%-Lw%?%{cr}%n*%f %t%?(%u)%?%{kr}%?%+Lw%= %{mk}@ %H %{ck}%Y%{kb}-%{ck}%m%{kb}-%{ck}%d %{yk}%D %{gk}%c"
 

Configuration

Principe

Screen lit un fichier de configuration (~/.screenrc par défaut) et envoie chaque ligne dans son invite de commande lorsqu'une session démarre.

Exemple

Voici un example de fichier de configuration ~/.screenrc qui permet un peu de customisation :

 
 defutf8 on
 startup_message off
 vbell off
 hardstatus alwayslastline "%{bk}%?%-Lw%?%{wb}%n*%f %t%?(%u)%?%{bk}%?%+Lw%= %{mk}@ %H %{ck}%Y%{bk}-%{ck}%m%{bk}-%{ck}%d %{yk}%D %{gk}%c"
 escape ^Hh
 bindkey -d
 screen -t irc           1       irssi
 screen -t email         2       mutt
 screen -t rss           3       snownews
 screen -t ng            4       slrn
 screen -t x             5       bash
 screen -t log           6       su -c "tail -f /var/log/everything/current"
 chdir /pd/music
 screen -t music         7       bash
 chdir /
 screen -t root      8   su -c "screen -S main"
 screen -t devangels 9   ssh -t monserv screen -x
 chdir ~
 screen -t dev       0   screen -c .screenrc.dev -S dev
 



Image:Liens.jpg

site officiel
wikipedia
softpanorama.org

Infos

Outils personnels