======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 (**r**attacher) notre screen :
screen -r
On récupère ainsi l'état dans lequel on l'avait laissé.
On peut également **c**ré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'' (**n**ext) ou encore ''ctrl+a'' et ''p'' (**p**revious). ''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 **c**réer une nouvelle fenêtre (nouveau terminal)
* ''k'': **k**iller le terminal courant (une confirmation vous est demandée (y/n))
* ''n'' (**n**ext) : se déplacer vers le terminal suivant
* ''p'' (**p**revious) : se déplacer vers le terminal précédent
* '''' : se déplacer vers le terminal , avec son numéro (0, 1, ...)
* ''"'' : voir la liste des terminaux ouverts
* ''ctrl+a'' : sélectionner la dernière fenêtre consultée
* ''Ctrl+'' : 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é
* '''' sélectionner le prochain panneau
Il n'existe pas d'inverse du ''Ctrl-a '' (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 ''.
Une autre méthode, plus compliquée mais qui permet de comprendre le mécanisme de copies de screen :
- Passer en mode scrollback buffer : ''Ctrl+a ['' (ou ''Esc'')
- 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), '''' (marquer la fin de la sélection)
- Lancer un éditeur de texte, par exemple vi (pour éviter les problèmes d'indentation, penser à passer en mode "paste": '':set paste''
- 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}"