web-dev-qa-db-fra.com

Quelles sont les autres façons de partager une session tmux entre deux utilisateurs?

Je cherche un moyen propre et facile de partager une session tmux avec un autre utilisateur sur la même machine. J'ai essayé le -S socket-path option, mais elle nécessite d'ouvrir toutes les autorisations du socket-path avant que quelqu'un d'autre puisse se connecter à la session. Cela fonctionne, mais c'est un peu lourd. Par exemple:

# Me
$ tmux -S /tmp/pair
$ chmod 777 /tmp/pair

# Another user
$ tmux -S /tmp/pair attach

Cela fonctionne, mais les deux utilisateurs partagent désormais la même configuration tmux (la configuration de l'utilisateur qui a lancé la session). Existe-t-il un moyen d'autoriser les deux utilisateurs à utiliser leur propre configuration tmux et leurs propres liaisons de clés tmux individuelles?

Pour les points bonus, idéalement, il serait également agréable de donner un accès en lecture seule à la session tmux à d'autres utilisateurs.

112
Ryan McGeary

De https://github.com/zolrath/wemux :

wemux améliore tmux pour rendre le multiplexage de terminaux multi-utilisateurs à la fois plus facile et plus puissant. Il permet aux utilisateurs d'héberger un serveur wemux et de faire participer les clients:

Le mode miroir donne aux clients (un autre utilisateur SSH sur votre machine) un accès en lecture seule à la session, leur permettant de vous voir travailler, ou

Le mode Pair permet au client et à vous-même de travailler dans le même terminal (curseur partagé)

Le mode escroc permet au client de se coupler ou de travailler indépendamment dans une autre fenêtre (curseurs séparés) dans la même session tmux.

Il offre une prise en charge multi-serveur ainsi qu'une liste d'utilisateurs et des notifications lorsque les utilisateurs se connectent/se détachent.

C'est un wrapper shellscript sur tmux - aucune compilation n'est nécessaire.

48
Peter

J'ai essayé cela sur Ubuntu mais je ne vois pas pourquoi cela ne fonctionnerait pas sur d'autres variantes Unix.

Si les deux utilisateurs sont membres d'un groupe commun et que le chemin de socket utilise ce groupe, les deux utilisateurs pourront se connecter correctement.

Plutôt que d'avoir à changer les autorisations du socket-path à chaque fois que vous en créez un, vous pouvez créer un répertoire spécifique pour les sockets (j'ai utilisé/var/tmux).

Ajoutez d'abord un groupe pour les utilisateurs de tmux

$ addgroup $TMUX_GROUP

Créez un répertoire avec le groupe défini sur $ TMUX_GROUP et utilisez le bit setgid pour que les fichiers créés dans le répertoire aient automatiquement le groupe défini sur $ TMUX_GROUP.

$ mkdir /var/tmux
$ chgrp $TMUX_GROUP /var/tmux
$ chmod g+ws /var/tmux

Assurez-vous ensuite que les utilisateurs qui souhaitent partager la session sont membres de $ TMUX_GROUP

$ usermod -aG $TMUX_GROUP user1
$ usermod -aG $TMUX_GROUP user2
17
Stephen Paulger

Pour autant que je sache, il n'est pas possible de partager des sessions avec d'autres utilisateurs de manière "propre".

De plus, l'accès en lecture seule n'est pas possible, si le client n'utilise pas le -r commutateur.

Comme un autre multiplexeur de terminaux écran prend en charge les fonctionnalités que vous recherchez, malheureusement aussi de manière encombrante ... Je ne sais pas si c'est une option pour vous, mais peut-être que quelqu'un d'autre trouvera cela utile .

Solution pour écran:

Organisez une session:

  • Le bit SUID de écran doit être défini: - /
  • Ouvrez la session avec screen -S sessionname
  • ctrla + :multiuser on
  • ctrla + :acladd otherUsername

Rejoignez une session:

  • screen -x username/sessionname

Vous pouvez définir des bits d'autorisation pour l'utilisateur (* pour tous) avec :aclchg ou :chacl. # annexé affectera les fenêtres,? annexé affectera les commandes.

Exemples:

  • :aclchg * -wx "#,?" définira les autorisations de session en lecture seule pour tous les utilisateurs
  • :aclchg foo +w 2 donnera un accès en écriture à l'utilisateur foo sur la fenêtre 2
  • :aclchg bar +x detach donnera l'autorisation de détacher une session de la barre d'utilisateurs
12
echox

Ce n'est pas exclusif à tmux, mais en ce moment c'est ce que j'utilise:

Vous pouvez utiliser script -f /path/to/some/file Pour écrire une session de terminal dans un fichier. L'option -f Met à jour le fichier pendant que vous tapez.

Quelqu'un d'autre (avec seulement des autorisations de lecture sur le fichier, si vous le souhaitez) peut faire tail -f Pour voir le fichier, votre session de terminal. L'option -f Fait sortir tail tout ce qui est ajouté.

La combinaison des deux "synchronise" la vue d'un terminal. Lorsqu'il est utilisé avec tmux, il a également l'avantage d'éviter le redimensionnement qui se produit lorsque les deux utilisateurs ont des résolutions différentes. Un autre trait est que chaque utilisateur peut travailler sur une autre fenêtre ou session privée.

Un inconvénient potentiel est que certaines commandes (basées sur ncurses par exemple) peuvent faire des choses étranges à la sortie, échapper des séquences aussi (couleurs). Cependant, j'utilise ceci dans tmux, et il semble que tmux corrige ces problèmes. Je peux voir les autres utilisateurs lire les pages de manuel et utiliser d'autres commandes qui créent des tampons, les couleurs s'affichent à droite, etc.

Cela ne permet pas d'écrire sur le terminal de l'autre (peut-être qu'une autre solution pourrait être ajoutée pour cela).

J'aime avoir une fenêtre avec deux volets: un volet exécutant script -f Pour que mon homologue puisse le voir, un autre à côté où je tail -f C'est le terminal.

Il fonctionne également dans ttys (et des sockets ou des canaux nommés peuvent également être utilisés pour le fichier)

11
ferhtgoldaraz