User Tools

Site Tools


informatique:logiciels:screen

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 :

  • c : pour créer une nouvelle fenêtre (nouveau terminal)
  • k: killer le terminal courant (une confirmation vous est demandée (y/n))
  • n (next) : se déplacer vers le terminal suivant
  • p (previous) : se déplacer vers le terminal précédent
  • <nb> : se déplacer vers le terminal <nb>, avec <nb> son numéro (0, 1, …)
  • : voir la liste des terminaux ouverts
  • ctrl+a : sélectionner la dernière fenêtre consultée
  • Ctrl+<space> : sélectionner la prochaine fenêtre
  • A : pour renommer le titre du terminal courant
  • ctrl+x : verrouiller la session screen. En fonction de votre implémentation de screen :
    • soit le mdp de votre utilisateur vous sera demandé pour rouvrir la session (e.g. sous Debian);
    • soit il demande un mdp avant de la verrouiller, qu'il faudra redonner pour la rouvrir (e.g. sous macOSX)
  • F : rafraîchir la fenêtre
  • : : permet d'afficher le prompt pour passer en mode commande

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 :

  • S pour diviser l'écran horizontalement
  • | pour diviser l'écran verticalement

Autres raccourcis liés au split :

  • X : fermer le panneau courant
  • Q : supprimer tous les panneaux sauf celui sélectionné
  • F : redimensionner la fenêtre sur la taille du panneau sélectionné
  • <tab> sélectionner le prochain panneau

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}"
informatique/logiciels/screen.txt · Last modified: 2020/12/03 11:11 by pteu