GNU Screen Ou comment rendre sa console plus pratique

, par MiKaël Navarro   submit to reddit

GNU Screen est un utilitaire permettant d’accéder à de multiples sessions de terminal à l’intérieur d’une simple console, ou d’une session distante typiquement lancée par SSH.

On peut voir GNU Screen comme une gestionnaires de fenêtres en mode texte permettant à plusieurs programmes de tourner en même temps.
Il offre des services très utiles comme :
- La persistance : De manière similaire à VNC, screen permet d’attacher et de détacher une session, pratique pour reprendre la main sur une application lancée sur un ordinateur et de la reprendre à partir d’un autre.
- Le multi-fenêtres : De multiples sessions peuvent être créées, chacune d’elles sont numérotées et l’on peut utiliser le clavier pour passer de l’une à l’autre. Screen permet de plus de diviser horizontalement le terminal pour avoir plusieurs vues d’une ou plusieurs sessions.
- Le partage de sessions : Screen permet de partager une session entre de multiples utilisateurs. Idéal pour permettre la collaboration entre de multiples utilisateurs ou aider un utilisateur distant (pour du support ou de la formation).

Utilisation de Screen

Nous allons lancer dans le screen une application, puis la détacher pour la rattacher à partir du même poste ou d’un poste distant (via SSH) :

  1. Lancer screen en nommant la session : $ screen -S sessionname
  2. Une nouvelle session du shell s’affiche alors en attente de commande, nous pouvons l’utiliser comme d’habitude
  3. Pour se détacher de la session : Ctrl-a d (ou fermer le terminal)
  4. Connaître les screen existant : $ screen -ls
  5. Pour se rattacher à la session : $ screen -r sessionname (peut se faire à travers un accès SSH)

Quelques raccourcis

- Ctrl-a ? : affiche une petite aide
- Ctrl-a c : crée une nouvelle console
- Ctrl-a k : ferme la console courante (après confirmation)
- Ctrl-a " : propose la liste des consoles, avec la possibilité d’en choisir une
- Ctrl-a 0..9 : va à la console numéro 0..9
- Ctrl-a n : va à la console suivant
- Ctrl-a p : et à la précédente
- Ctrl-a A : renomme la console

Détacher la session :
- Ctrl-a d : détache screen
- Ctrl-a DD : détache screen et ferme la session

Split de la console :
- Ctrl-a S : sépare la console courante en deux régions (horizontalement)
- Ctrl-a TAB : sélectionne la région suivante
- Ctrl-a Q : supprime toutes les régions, sauf la courante
- Ctrl-a K : supprime la région courante

Autres raccourcis :
- Ctrl-a F : redimensionne la fenêtre à la taille du terminal
- Ctrl-a H : active/désactive le logue des consoles dans un fichier ($HOME/screenlog.XX avec XX le numéro de la console)

Copie/scrollback :
- Ctrl-a ESC : entre en mode donjon (copie/scrollback) ; on peut se déplacer dans le screen avec les flèches
- ENTER : commence une sélection ; terminer la sélection avec une nouvelle fois ENTER
- Ctrl-a ] : colle le contenu de la sélection précédente

+ Cf. GNU Screen documentation

Personnaliser son Screen

Cf. article Screen RC

Multiuser mode

  1. L’inconvénient c’est que l’exécutable screen doit avoir le setuid root : # chmod u+s /usr/bin/screen
  2. Démarrer ensuite screen avec un nom de session : $ screen -S sessionname (plus pratique pour la retrouver)
  3. Activer le mode multiuser : Ctrl-a :multiuser on
  4. Autoriser les autres utilisateurs à se connecter : Ctrl-a :acladd username
  5. De façon optionnelle, restreindre les utilisateurs à un accès en lecture seule : Ctrl-a :aclchg username -w "#"

Maintenant les utilisateurs distant peuvent attacher votre session en utilisant la commande : $ screen -x username/sessionname (où username est notre nom d’utilisateur).

Problèmes courants :
- Si l’on obtient le message d’erreur chmod /dev/pts/xx : Operation not permitted, il est fort probable que c’est parce que l’on a un su sur un tty qui ne nous appartient pas. Il est préférable de passer par une connexion SSH sur localhost.
- Comme énnoncé ci-dessus il est nécessaire d’avoir le set-uid root sur l’exécutable screen.