User Tools

Site Tools


tuto:9

Screen et Tmux

Quelle est l'utilité de ces programmes ?

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.

Fonctionnement global

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.

Screen

Créer une nouvelle session

screen
on peut lui donner un nom avec
screen -S nom_de_session

Voir quelles sessions sont en cours d'exécution

screen -ls
Voici 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

  • 2711 est l'id
  • tty1.atelier-fg est le nom de la session

Rejoindre une session existante

screen -r numero_de_session
ou
screen -r nom_de_session
ou
screen -x idem

Controles de la session

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)

ctrl+a d

pour detacher la session en cours (revenir à l'interpreteur de commande initial)

ctrl+a k

pour detruire la session en cours (demande une confirmation)

Tmux

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)

Créer une nouvelle session

tmux
on peut lui donner un nom avec
tmux -s nom_de_session

Voir quelles sessions sont en cours d'exécution

tmux ls

Voici un exemple de sortie :

0: 1 windows (created Fri Mar 7 03:30:51 2014) [207×63]

  • 0 est l'id de session
  • 1 est la quantité de fenetres (windows)

Lors de la creation d'une nouvelle session, celle ci aura l'id 1 etc…

Rejoindre une session existante

tmux att -t 0
att est l'abbreviation de attach-session (voir la doc de tmux pour la liste des abbreviations) et 0 l'id de la session voulue.

Controles de la session

ctrl+b d

pour detacher la session en cours

ctrl+b c

pour creer une nouvelle fenetre (onglet)

ctrl+b ,

pour renommer une fenetre (merci Claudius)

ctrl+b w

pour afficher le menu de selection pour basculer d'une fenetre à l'autre

ctrl+b n

fenetre suivante

ctrl+b p

fenetre precedente

ctrl+b s

passer facilement d'une session à l'autre

(merci Claudius)

ctrl+b espace

changer l'affichage (passer de split horizontal à vertical)

Decoupe des fenetres

Les fenetres peuvent etre découpées en panneaux dimentionnables (panes).

ctrl+b "

pour splitter la fenetre horizontalement

ctrl+b %

pour splitter la fenetre verticalement

ctrl+b fleches du clavier

pour passer d'un panneau à un autre

(on a 1 seconde pour réagir)

ou bien

ctrl+b o

(la lettre o comme banane)

ctrl+b+fleches du clavier

pour redimentionner le panneau en cours

(en laissant ctrl+b appuyés)

Connexions multi utilisateurs

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.

Creer une session par socket

tmux -S /chemin/du/fichier/socket
pour joindre la session
tmux -S /chemin/du/fichier/socket att -t 0
toutes 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/toto
donc 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.

Liens

tuto/9.txt · Last modified: by 127.0.0.1