Quand on se connecte sur une machine par ssh, si on a une perte de connexion reseau ou si on ferme la session ssh, on perd le travail en cours (par exemple la compilation d'un programme ou la mise à jour du systeme).
Screen et Tmux permettent de pouvoir garder une session de travail ouverte tout en se deconnectant du serveur et pouvoir la retrouver lors d'une reconnexion.
Pour dialoguer en tant qu'humain avec la machine, nous utilisons soit l'interface graphique, soit l'interface texte (ligne de commandes) et cette interface texte est un “interpreteur de commandes” (shell). L'interpreteur de commandes fourni par défaut dans la plupart des distributions linux est “bash”. Lors de l'ouverture d'un “emulateur de terminal” (fenetre de ligne de commandes), le systeme exécute le programme bash en créant une session bash et lorsque nous fermons cette fenetre de terminal, la session bash est détruite.
Screen et Tmux ne se ferment pas et continuent de fonctionner en arrière plan tant qu'on ne leur donne pas l'ordre de se fermer.
screenon peut lui donner un nom avec
screen -S nom_de_session
screen -lsVoici un exemple de sortie :
There is a screen on:
2711.tty1.atelier-fg (03/07/2014 03:01:55 AM) (Detached)
1 Socket in /var/run/screen/S-root.
ce qui nous intéresse içi c'est l'id de session et son nom
screen -r numero_de_sessionou
screen -r nom_de_sessionou
screen -x idem
Une fois dans une session screen, on peut la controler en utilisant les touches ctrl+a suivies d'une autre touche.
(touches ctrl et a en meme temps, on relache le tout et on appuie sur la touche voulue et on relache)
pour detacher la session en cours (revenir à l'interpreteur de commande initial)
pour detruire la session en cours (demande une confirmation)
Tmux est une amélioration de screen qui permet beaucoup plus de choses et qui est encore activement maintenu contrairement à screen.
Tmux utilise un systeme client/serveur qui permet de l'interconnecter avec beaucoup de possibilités.
Par défaut, tmux utilise les combinaisons de touches ctrl+b plutot que ctrl+a (mais ceci peut etre changé par le fichier de configuration)
Une session tmux contient des fenetres (windows) (au moins une par defaut) qui peuvent etre decoupees en panneaux (panes).
Dans une session tmux, on a une barre verte en bas qui indique l'id et le nom de la session ainsi que l'id et le nom de chaque fenetre.
Lorsqu'on utilise une commande tmux, on cible une session avec la notion de 'target' donc les commandes sont sous la forme :
tmux commande -t id_de_session -t comme target (cible en anglais)
tmuxon peut lui donner un nom avec
tmux -s nom_de_session
tmux ls
Voici un exemple de sortie :
0: 1 windows (created Fri Mar 7 03:30:51 2014) [207×63]
Lors de la creation d'une nouvelle session, celle ci aura l'id 1 etc…
tmux att -t 0att est l'abbreviation de attach-session (voir la doc de tmux pour la liste des abbreviations) et 0 l'id de la session voulue.
pour detacher la session en cours
pour creer une nouvelle fenetre (onglet)
pour renommer une fenetre (merci Claudius)
pour afficher le menu de selection pour basculer d'une fenetre à l'autre
fenetre suivante
fenetre precedente
passer facilement d'une session à l'autre
(merci Claudius)
changer l'affichage (passer de split horizontal à vertical)
Les fenetres peuvent etre découpées en panneaux dimentionnables (panes).
pour splitter la fenetre horizontalement
pour splitter la fenetre verticalement
pour passer d'un panneau à un autre
(on a 1 seconde pour réagir)
ou bien
(la lettre o comme banane)
pour redimentionner le panneau en cours
(en laissant ctrl+b appuyés)
Il est possible de se connecter entre plusieurs utilisateurs différents dans une session tmux. Ceci permet de pouvoir travailler à plusieurs en meme temps sur une meme machine. Pour y parvenir, on utilise un “socket” qui est un fichier par lequel on fait transiter les informations.
tmux -S /chemin/du/fichier/socketpour joindre la session
tmux -S /chemin/du/fichier/socket att -t 0toutes les commandes tmux sont identiques sauf qu'elles sont précédées de -S suivi du chemin vers le socket.
pour que la session soit visible par les autres utilisateurs, il faut que le fichier de socket soit disponible en lecture et ecriture par les autres utilisateurs par exemple, en partageant le socket entre utilisateurs du meme groupe.
dans notre exemple nous avons utilisé :
tmux -S /tmp/toto chgrp opensimeros /tmp/toto chmod 775 /tmp/totodonc tous les utilisateurs faisant partie du groupe opensimeros peuvent rejoindre et ecrire dans la session tmux.
Pour vraiment travailler à plusieurs, c'est pénible car un seul peut ecrire à la fois et dans le panneau en cours et la fenetre est reduite au plus petit écran utilisé.
Il y a un script qui s'appelle https://github.com/zolrath/wemux et qui ajoute des options permettant d'avoir vraiment du multiutilisateur.