GNU Screen linux
Screen est l'outil de prédilection de tout les personnes utilisant la ligne de commande au quotidien, très pratique, une fois y avoir gouté on devient fan. Maintenant je me suis rendu compte qu'il y a encore pas mal de gens qui ne connaissent pas forcement, tout devient tellement graphique que pour certain utiliser la ligne de commande devient rare . .. :(
Comment vous décrire Screen. On peut le qualifier d'émulateur de terminaux ou de gestionnaire de terminaux, c'est a dire que a partir d'un terminaux on peux en lancer plusieurs a l'interieur de notre meme session. Pourquoi on s'en sert: Le plus souvent il est utilisé lors d'une connexion ssh a un serveur ou client. Cela n'est pas toujours pratique d'etre limité un seul terminal quand on a des taches longues qui tournent... Obligé dans certain cas de ré-ouvrir une connexion ssh pour avoir un nouveau terminal sur la machine... Vraiment pas pratique. C'est la que Screen entre en jeu car il va vous permettre d'avoir plusieurs sessions dans une seule. Mais c'est pas tout !!! Le meilleur n'est pas encore arrivé ^^ La ou Screen prend tout sa splendeur est que vous pouvez récuperez votre session et donc les taches qui tournaient sur votre serveur (téléchargement, compilation) meme si vous etes deconnecté. Il vous suffira de vous reconnectez de n'importe ou et de reprendre votre session Screen. Bref que du bon et il y a encore plein de chose comme le partage de session, la possibilité de splitter le terminal a votre guise, etc... Voila ce qui sera detaillé ici:
- Installation
- Premiers pas
- Détacher et attacher une session
- Découper un terminal
- Session multiutilisateurs
- Monitoring des sessions
- screenrc
Installation
Pour cela rien de plus simple, à adapter selon votre distribution.
$ sudo aptitude install sreen
Premiers pas
On va commencer par lancer Screen
$ screen
Maintenant on va pouvoir entrer dans le vif du sujet et voir son fonctionnement. Normalement rien n'est different a premiere vue et c'est tout à fait normal.
La Commande qui va permettre de lancer toute les fonctionnalités est Ctrl+a (Ctrl-a), je suis habitué l'utiliser pour revenir au debut de la ligne en console donc ce n'est pas la plus pratique. Il est bien entendu possible de la changer dans .screenrc Une fois Screen lancé si vous faite Ctrl-a c vous créerez une nouvelle session et atterrirez dedans. Pour s'en rendre vraiment compte on peux lister les sessions en cours par la commande Ctrl-a " ,ce qui devrait vous retourner ceci:
Maintenant qu'on ce rend bien compte qu'il y a deux sessions d'ouvertes, nous pouvons facilement naviguer entre elles. Ctrl-a n , permet de d'aller a la session suivante (Next) Ctrl-a p , permet de d'aller a la session précédente (Previous) On peut aussi aller directement a la session voulu en passant par son numéro Ctrl-a NUMERO , Il faut bien entendu remplacer NUMERO par le numero de la session souhaité. Pour rendre cela plus pratique on peut aussi renommer les sessions, pour ainsi pouvoir s'y retrouver plus facilement par la suite. Ctrl-a A , puis changez le nom par le celui voulu. Et pour quitter une session on fait comment? La commande Ctrl-a K ,vous permet de killer une session, sinon un simple exit suffit.
Détacher et attacher une session
On arrive la une partie très intéressante, celle qui va faire de screen un outil indispensable. Je vous avais dit en intro que Screen offrait la possibilité de recuperer sa session Screen de n'importe ou même apres avoir été deconnecté. Le principe est assez simple une fois Screen lancé toutes les sessions lancés dedans seront attachées celle ci, mais la ou c'est interessant c'est que nous avons la possibilité de détacher une session, de meme elles se détachent en cas de deconnexion brutale. Pour détacher une session le raccourcie est Ctrl-a d Pour vérifier cela screen offre la possibilité de lister toutes les sessions screen en cour.
$ screen -ls
Vous devriez avoir quelque chose comme ça:
On voit ici que la session 8049.pts-1.lohik-desktop est détachée alors que l'autre est attachée a une instance Screen. Comment la récuperer maintenant. screen -r suivit de son nom ou de son pid.
$ sreen -r 8049.pts-1.lohik-desktop
ou
$ sreen -r 8049
En cas d'une déconnexion shh, screen -r permet de reprendre la derniere session détachée
$ sreen -r
Découper un terminal
Partie très pratique car avec Screen on peut diviser un terminal en plusieurs.
Screen offre la possibilité de splitter un terminal de maniere vertical et horizontal autant de fois que souhaité. Ctrl-a S , pour le découpage horizontal. Ctrl-a | , pour le découpage vertical. Ctrl-a [tab] , pour se deplacer dans les differentes parties plus facilement. Une fois découpage effectué, il faut se deplacer dans le nouvel espace créé avec Ctrl-a [tab] , puis créé une nouvelle session avec Ctrl-a c Ctrl-a Q , permet de detruire la region dans laquelle on est.
Session multiutilisateurs
Screen offre la possibilité de partager une session, ce qui signifie que deux meme personnes peuvent etre connectés a une même session screen, et donc tout ce que tapera l'un des deux sera automatique vu par l'autre en temps réél. Je trouve cela vraiment super, ça en jette!! Apres j'ai jamais rééllement trouvé une tache ou un moment pour m'en servir. Il y a plusieurs façon de procéder. La premiere methode est beaucoup moins sécure car ne permettant pas de gérer les droits Il faut commencer par activer le multi utilisateur sur la session en cours.Ctrl-a : puis taper multiuser on
Pour se connecter l'autre utilisateur aura juste a taper
$ screen -x
Avec la deuxieme methode il y a bien sur la possibilité de gérer les utilisateurs et les droits de chacun sur une multi session. Il faut tout d'abord lancer une session Screen en la nommant
$ screen -S multi
Comme tout a l'heure on active le mode multiuser, Ctrl-a : puis multiuser on Pour ajouter un utilsateur, Ctrl-a : puis :acladd bob , Permet d'ajouter l'utilisateur bob en controle total. :aclchg alex,pierre +rwx , permet d'ajouter les utilisateurs alex et pierre en indiquant les permissions. :acldel bob , permet d'enlever l'utilisateur bob de la session multiutilisateur. Par suite si bob veut se connecter a cette session il devra taper
bob@host: ~$ screen -x lohik/multi
Ici lohik est le nom de l'utilisateur ayant lancé la session et multi le nom de la session lancée
Monitoring des sessions
Quelque chose de tres pratique que j'ai decouvert il y a peu. Screen permet de monitorer les sessions pour voir sur qui se passe dans vos terminaux quand vous n'etes pas dedans. Par example vérifier si un terminal est actif ou pas, tres pratique dans le cas d'un téléchargement ! Dans le terminal souhaité, Ctrl-a M pour activer le monitoring
Ctrl-a _ , permet de monitorer si il y a un silence sur la session.
screenrc
screenrc est le fichier de configuration de screen, on peut changer énormement de chose comme les raccourcies a l'interieur de screen et plein d'autre chose. Par defaut le fichier n'existe pas, Il faut le créer si besoin puis l'editer
$ vi ~/.screenrc
Voila un exemple de .screenrc
# Detache automatiquement la session au moment de quitter
autodetach on
# Enleve texte au lancement du screen
startup_message off
# Lignes gardées en memoire
# defscrollback 1000
# raccourcies
bindkey -k k9 kill # kill = f9
bindkey -k k5 prev # precedent = f5
bindkey -k k6 next # suivant = f6
# afficher l'heure
hardstatus alwayslastline "%{=b}%{g}%h %{r}<%w> %=%{g}%c:%s %Y-%m-%d (%D)"
# ici le numero et le nom de la session sera affiché en rouge a gauche et l'heure et la date en vert a droite

