Table of Contents

Screen

Présentation

Screen est un gestionnaire de terminal en mode texte ; il permet, dans un terminal, de créer de nouvelles sessions qu'on pourra quitter, puis récupérer dans l'état ou on l'a laissé.

NB : Il existe d'autres gestionnaires de terminaux comme tmux ou byobu, une version améliorée de screen.

Utilisation

Installation, lancement de screen et exécution d'une commande dedans :

aptitude install screen
 
screen
 
echo test
 test

On va ensuite détacher la console avec la combinaison Ctrl-a puis d ; on va donc revenir à la console depuis laquelle on a lancé screen.

Plus tard on décide de récupérer (rattacher) notre screen :

screen -r

On récupère ainsi l'état dans lequel on l'avait laissé.

On peut également créer d'autres terminaux virtuels ; quand on est dans screen, faire un ctrl+a et c. On passe alors de l'un à l'autre avec ctrl+a et n (next) ou encore ctrl+a et p (previous). ctrl+a ctrl+a permet de revenir à l'ancien terminal virtuel. Pour fermer une session screen : Ctrl+a d (detach).

Pour la rejoindre plus tard : screen -x ou screen -r. S'il en existe plusieurs, screen -r affichera la liste et il faudra ajouter l'ID de la session à la suite :

screen -r
There are several suitable screens on:
     314..soekris-01 (Detached)
     9364..soekris-01        (Detached)
Type "screen [-d] -r [pid.]tty.host" to resume one of them.
 
screen -r 314..soekris-01

Sinon, pour simplement lister les sessions existantes : screen -ls

Pour lancer un script dans un screen au démarrage par exemple, on utilise :

screen -d -m script.sh

… pour créer une nouvelle session sans l'attacher.

Combinaisons de touches

Pour afficher les raccourcis courants, appuyer sur la touche de préfixe Ctrl+a suivie de ?.

Une fois screen lancé, saisir la hotkey Ctrl+a suivie de :

Diviser la fenêtre (split)

Plutôt que d'avoir un terminal par écran, on peut agencer l'affichage des terminaux en divisant l'écran en panneaux/régions, pour en afficher plusieurs ; mais tous les terminaux sont accessibles dans chaque panneau.

Pour diviser la fenêtre : Ctrl+a suivi de :

Autres raccourcis liés au split :

Il n'existe pas d'inverse du Ctrl-a <tab> (sélectionner le précédent panneau). Par contre il est possible de créer des raccourcis pour sélectionner le panneau du haut/bas : pour cela il faut éditer le fichier ~/.screenrc et ajouter ces lignes :

bind k focus down
bind j focus up
bind t focus top
bind b focus bottom

Configuration

Le fichier de configuration général se nomme se trouve dans /etc/screenrc, mais chaque utilisateur peut la surcharger dans son fichier ~/.screenrc.

Lorsqu'un screen est lancé et que l'on veut recharger le fichier de configuration (pour prendre en compte une modif par exemple), faire Ctrl-a puis saisir : :source ~/.screenrc.

Tips

Copier le buffer dans un fichier

Pour enregistrer le buffer screen dans un fichier texte, il suffit de saisir Ctrl+a : pour passer en mode commande, puis hardcopy -h <fichier.txt>.

Une autre méthode, plus compliquée mais qui permet de comprendre le mécanisme de copies de screen :

  1. Passer en mode scrollback buffer : Ctrl+a [ (ou Esc)
  2. Sélectionner le texte à copier ; pour copier l'intégralité du buffer : g (aller en début du buffer), espace (marquer le début de la sélection), G (aller à la fin du buffer), <enter> (marquer la fin de la sélection)
  3. Lancer un éditeur de texte, par exemple vi (pour éviter les problèmes d'indentation, penser à passer en mode “paste”: :set paste
  4. Coller le buffer : Ctrl+a ]

Annexes

Exemple de template de conf

# ne pas afficher le message au lancement
startup_message off
deflogin on
vbell on
vbell_msg "   Wuff  ----  Wuff!!  "
defscrollback 1024
bind ^k
bind ^\
bind \\ quit
bind K kill
bind I login on
bind O login off
bind } history
termcapinfo vt100 dl=5\E[M
hardstatus off
termcapinfo xterm*|rxvt*|kterm*|Eterm* hs:ts=\E]0;:fs=\007:ds=\E]0;\007
# Pour afficher une barre de statut :
#hardstatus alwayslastline "%d/%m/%Y [%c] | %w"
# ou
hardstatus alwayslastline "%-w%{.BW}%n %t%{-}%+w %= %l | %d/%m/%y %c"
termcapinfo xterm*|linux*|rxvt*|Eterm* OP
termcapinfo xterm 'is=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;4;6l'
 
# ~/.screenrc
defscrollback 4096
startup_message off
caption always "%{bw}%H%{g} |%c %{y}%d.%m.%Y%{k} | %?%-Lw%?%{+b wk}%n*%f %t%?(%u)%?%{-b kw}%?%+Lw%? | %{-b rw} Load: %l %{k}"