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.
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.
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 suivantp
(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 ouvertsctrl+a
: sélectionner la dernière fenêtre consultéeCtrl+<space>
: sélectionner la prochaine fenêtreA
: pour renommer le titre du terminal courantctrl+x
: verrouiller la session screen. En fonction de votre implémentation de screen :F
: rafraîchir la fenêtre:
: permet d'afficher le prompt pour passer en mode commandePlutô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 verticalementAutres raccourcis liés au split :
X
: fermer le panneau courantQ
: 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
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
.
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 :
Ctrl+a [
(ou Esc
)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):set paste
Ctrl+a ]
# 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}"