Screen - une autre approche du shell
Bonjour,
Je prends aujourd'hui mon clavier parceque d'une part ça faisait longtemps que je n'avais pas bafouillé en publique et d'autre part parce que je me suis rendu compte qu'il n'existait nulle part sur internet un endroit ou l'on explique simplement ce qu'est ce logiciel extraordinaire qu'est GNU-Screen.
Bien sûr on peut passer voir la documentation en ligne, la page de man (en anglais) et une fois cela fait, Screen passe pour un logiciel barbare réservé aux seuls initiés loin du commun des mortels. Il faut dire que le concept de Screen est particulier et que par conséquent il est délicat de lui trouver une définition simple.
Screen est un multiplexeur de terminaux persistant. Notez l'absence de S à la fin de persistant qui nous indique bien que c'est le multiplexeur qui est persistant. Pour ceux qui une fois cette définition lue souhaite tout de même poursuivre la lecture de cet article nous allons essayer d'y voir plus clair :
Multiplexeur de terminaux :
Screen va vous permettre d'ouvrir plusieurs terminaux logiques dans un terminal (ou fenêtre). Mais à quoi cela peut il bien servir quand on est devant son Linux, que l'on a déjà 6 consoles textes, plus la possibilité d'ouvrir autant d'émulateurs de terminaux que l'on veut en mode graphique ?
- La première réponse est simple : éviter d'ouvrir 45 terminaux, un pour root, l'autre pour Vim, encore un autre pour un shell utilisateur ... on peut tout avoir dans une seule fenêtre.
- La deuxième réponse plus utile est SSH. Plus besoin de se connecter 45 fois sur un ordinateur distant pour avoir les consoles utiles sous la main, on peut toutes les avoir dans Screen.
Persistant
Imaginez maintenant que vous êtes connecté en SSH en train de travailler sur une machine distante. Vous avez lancé plein de commandes, ouvert des fichiers dans Vim, lancé une compilation depuis 5h et soudain, le drame : la coupure réseau quotidienne. Vous hésitez et c'est bien compréhensible, entre la pendaison ou la destruction totale de la planète. Avec Screen, pas de stress, une fois la connexion rétablie, vous n'avez qu'à vous reconnecter à la machine et vous rattacher à votre screen. Si la coupure a été assez longue, votre compilation sera peut être même terminée. Si vous travaillez dans un environnement hautement connecté, vous arrivez le matin au travail et n'avez qu'à vous rattacher au screen qui contient les dizaines de SSH déjà lancés pour avoir accès aux différentes machines.
Comment ça marche ?
Screen, comme toute vraie nouveauté, bouscule un peu les habitudes d'un habitué du shell en venant rajouter un tas de combinaisons de touches dans un bor heuuu ensemble déjà assez fourni. Passons un peu à la pratique, voici d'abord une chose à ajouter au .screenrc qui rend l'utilisation de screen un peu moins austère :
Équipé de ce .screenrc, nous pouvons maintenant lancer «screen» en toute sérénité
- les raccourcis.
- la ligne de commande.
En général, les sites traitant de Screen ne parlent que des raccourcis mais la connaissance de la ligne de commande peut également s'avérer très utile dans la compréhension de l'outil. On y accède par la combinaison de touches «Ctrl a» puis «:». Le curser vien se coller en bas à gauche de votre écran un peu comme dans le mode commande de Vim. Tapez «help» et le miracle tant de fois reproduit fonctionne encore : screen vous affiche un écran d'aide avec le nom des commandes et leur raccourci.
À partir de là, créons un nouveau terminal :
- instruction screen en mode commande ou «Ctrl a» puis «c» (que l'on notera (^a c) dans la suite) en mode normal. Un shell vierge apparait à l'écran et un bash de plus vient s'ajouter dans votre barre des tâches.
Naviguer dans les terminaux
(^a 1) : terminal 1
(^a 2) : terminal 2
etc
(^a ^a) : échanger avec le terminal précédent (très pratique).
(^a space) : terminal suivant à droite
(^a backspace) : devinez...
(^a ") ; pour choisir dans un menu..
Mais alors là, pour le coup du menu vous ne voyez que 2 options toutes 2 appelées bash ... pas très sexy n'est ce pas ? Vous pouvez donner un nom à chacun de vos terminaux en fonction de ce à quoi vous les destinez. Par exemple, si vous passez root dans l'un, vous pouvez l'appeler ... root.
(^a A) : (attention au A majuscule) : renommer le terminal courant.
Se détacher, se rattacher et quitter Screen
(^a d) vous détachera de votre screen en cours. Voici ce que vous risquez de voir apparaître alors :
Maintenant, imaginez que nous ayions fermé la fenêtre qui contenait notre screen un peu brutalement (un kill) et que l'on essaye de se rattacher à notre screen peu après. Celui-ci peut peut être prétendre être encore attaché alors qu'il ne l'est plus (ça arrive).
Nous reste à quitter proprement Screen. 2 options: la propre consiste à quitter toute s les applications du screen (souvent des shells), losque l'on quitte le dernier, on quitte Screen. Ou alors la méthode bourrine (^a backslash) (commande quit) qui tue tout et quitte Screen. (Nota: le backslash est le «AltGr 8» sur nos claviers azerty, mais il ne passe pas sur over-blog ... on s'adapte!).
Si cet article vous a plu, faites le moi savoir, je pourrai éventuellement le continuer car Screen propose encore de bien belles choses comme un historique des terminaux dans lequel on peut faire des recherches et des copier-coller, partager Screen entre plusieurs utilisateurs, comment se concocter un .screenrc qui fait tout pour nous au démarrage ... bref, comment faisait on avant ?
Je prends aujourd'hui mon clavier parceque d'une part ça faisait longtemps que je n'avais pas bafouillé en publique et d'autre part parce que je me suis rendu compte qu'il n'existait nulle part sur internet un endroit ou l'on explique simplement ce qu'est ce logiciel extraordinaire qu'est GNU-Screen.
Bien sûr on peut passer voir la documentation en ligne, la page de man (en anglais) et une fois cela fait, Screen passe pour un logiciel barbare réservé aux seuls initiés loin du commun des mortels. Il faut dire que le concept de Screen est particulier et que par conséquent il est délicat de lui trouver une définition simple.
Screen est un multiplexeur de terminaux persistant. Notez l'absence de S à la fin de persistant qui nous indique bien que c'est le multiplexeur qui est persistant. Pour ceux qui une fois cette définition lue souhaite tout de même poursuivre la lecture de cet article nous allons essayer d'y voir plus clair :
Multiplexeur de terminaux :
Screen va vous permettre d'ouvrir plusieurs terminaux logiques dans un terminal (ou fenêtre). Mais à quoi cela peut il bien servir quand on est devant son Linux, que l'on a déjà 6 consoles textes, plus la possibilité d'ouvrir autant d'émulateurs de terminaux que l'on veut en mode graphique ?
- La première réponse est simple : éviter d'ouvrir 45 terminaux, un pour root, l'autre pour Vim, encore un autre pour un shell utilisateur ... on peut tout avoir dans une seule fenêtre.
- La deuxième réponse plus utile est SSH. Plus besoin de se connecter 45 fois sur un ordinateur distant pour avoir les consoles utiles sous la main, on peut toutes les avoir dans Screen.
Persistant
Imaginez maintenant que vous êtes connecté en SSH en train de travailler sur une machine distante. Vous avez lancé plein de commandes, ouvert des fichiers dans Vim, lancé une compilation depuis 5h et soudain, le drame : la coupure réseau quotidienne. Vous hésitez et c'est bien compréhensible, entre la pendaison ou la destruction totale de la planète. Avec Screen, pas de stress, une fois la connexion rétablie, vous n'avez qu'à vous reconnecter à la machine et vous rattacher à votre screen. Si la coupure a été assez longue, votre compilation sera peut être même terminée. Si vous travaillez dans un environnement hautement connecté, vous arrivez le matin au travail et n'avez qu'à vous rattacher au screen qui contient les dizaines de SSH déjà lancés pour avoir accès aux différentes machines.
Comment ça marche ?
Screen, comme toute vraie nouveauté, bouscule un peu les habitudes d'un habitué du shell en venant rajouter un tas de combinaisons de touches dans un bor heuuu ensemble déjà assez fourni. Passons un peu à la pratique, voici d'abord une chose à ajouter au .screenrc qui rend l'utilisation de screen un peu moins austère :
caption always "%{Yb} %02d-%02m-%Y %0c %{k}|%{C} %H %{k}|%{G} %l %{k}|%{W} %-Lw%{R}%n %t%{W}%+Lw"
(une seule ligne). Ne vous laissez pas impressionner. Cette puissante formule runique est l'essence distillée de longues années de recherche sur Screen dans les bas fonds d'internet et permet l'exploit extraordinaire d'afficher une barre bleue en bas de votre écran qui affiche les shells que vous avez lancés (un peu comme une barre des tâches si vous voulez).Équipé de ce .screenrc, nous pouvons maintenant lancer «screen» en toute sérénité
user@serveur1:~$ screen -S greg
Dans cet exemple, je lance un screen nommé (greg). Cela me sera utile si plusieurs personnes utilisent le même compte Unix user et travaillent également avec Screen sur ce serveur. Nous voila maintenant dans un shell classique avec la barre bleue en bas indiquant un seul shell surligné en rouge et intitulé bash. À partir de là, vous pouvez faire ce que bon vous semble dans votre shell comme un shell classique sauf que la combinaison de touches «Ctrl a» (notée ^a) a été dérobé par Screen pour interagir avec vous. Il existe en effet 2 moyens de passer des commandes à Screen :- les raccourcis.
- la ligne de commande.
En général, les sites traitant de Screen ne parlent que des raccourcis mais la connaissance de la ligne de commande peut également s'avérer très utile dans la compréhension de l'outil. On y accède par la combinaison de touches «Ctrl a» puis «:». Le curser vien se coller en bas à gauche de votre écran un peu comme dans le mode commande de Vim. Tapez «help» et le miracle tant de fois reproduit fonctionne encore : screen vous affiche un écran d'aide avec le nom des commandes et leur raccourci.
À partir de là, créons un nouveau terminal :
- instruction screen en mode commande ou «Ctrl a» puis «c» (que l'on notera (^a c) dans la suite) en mode normal. Un shell vierge apparait à l'écran et un bash de plus vient s'ajouter dans votre barre des tâches.
Naviguer dans les terminaux
(^a 1) : terminal 1
(^a 2) : terminal 2
etc
(^a ^a) : échanger avec le terminal précédent (très pratique).
(^a space) : terminal suivant à droite
(^a backspace) : devinez...
(^a ") ; pour choisir dans un menu..
Mais alors là, pour le coup du menu vous ne voyez que 2 options toutes 2 appelées bash ... pas très sexy n'est ce pas ? Vous pouvez donner un nom à chacun de vos terminaux en fonction de ce à quoi vous les destinez. Par exemple, si vous passez root dans l'un, vous pouvez l'appeler ... root.
(^a A) : (attention au A majuscule) : renommer le terminal courant.
Se détacher, se rattacher et quitter Screen
(^a d) vous détachera de votre screen en cours. Voici ce que vous risquez de voir apparaître alors :
user@serveur1:~$ screen -S greg
[detached]
user@serveur1:~$
C'est que vous êtes revenu dans le shell à partir duquel vous aviez lancé Screen tout à l'heure. Celui-ci tourne d'ailleurs toujours. Vous pouvez le voir grâce à l'option ls : [detached]
user@serveur1:~$
user@serveur1:~$ screen -ls
There is a screen on:
3747.greg (Detached)
Maintenant, vous vous sentez un peu orphelin, loin de la chaleur rassurante de votre Screen qui tourne tout seul ... il est temps de s'y rattacher :There is a screen on:
3747.greg (Detached)
user@serveur1:~$ screen -r greg
Vous vous souvenez que nous avions nommé notre Screen. Et bien voila l'application pratique de ce nommage, il suffit de l'appeler par son nom pour s'y rattacher. Maintenant, imaginez que nous ayions fermé la fenêtre qui contenait notre screen un peu brutalement (un kill) et que l'on essaye de se rattacher à notre screen peu après. Celui-ci peut peut être prétendre être encore attaché alors qu'il ne l'est plus (ça arrive).
user@serveur1:~$ screen -r greg
There is a screen on:
3747.greg (Attached)
There is no screen to be resumed matching greg
Nous voila beau ! Pas question de se laisser faire, il est temps de montrer qui est le maître sur cet ordinateur, nous pouvons lui demander de détacher le Screen et s'y attacher :There is a screen on:
3747.greg (Attached)
There is no screen to be resumed matching greg
user@serveur1:~$ screen -dr greg
Nous reste à quitter proprement Screen. 2 options: la propre consiste à quitter toute s les applications du screen (souvent des shells), losque l'on quitte le dernier, on quitte Screen. Ou alors la méthode bourrine (^a backslash) (commande quit) qui tue tout et quitte Screen. (Nota: le backslash est le «AltGr 8» sur nos claviers azerty, mais il ne passe pas sur over-blog ... on s'adapte!).
Si cet article vous a plu, faites le moi savoir, je pourrai éventuellement le continuer car Screen propose encore de bien belles choses comme un historique des terminaux dans lequel on peut faire des recherches et des copier-coller, partager Screen entre plusieurs utilisateurs, comment se concocter un .screenrc qui fait tout pour nous au démarrage ... bref, comment faisait on avant ?
Publicité