Quali sono altri modi per condividere una sessione tmux tra due utenti?


106

Sto cercando un modo semplice e chiaro per condividere una sessione di tmux con un altro utente sulla stessa macchina. Ho provato l' -S socket-pathopzione, ma richiede l'apertura di tutte le autorizzazioni del percorso socket prima che qualcun altro possa connettersi alla sessione. Funziona, ma è un po 'ingombrante. Per esempio:

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

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

Funziona, ma ora entrambi gli utenti condividono la stessa configurazione di tmux (la configurazione dell'utente che ha avviato la sessione). Esiste un modo per consentire ai due utenti di utilizzare la propria configurazione tmux e le proprie combinazioni di tasti tmux individuali?

Per i punti bonus, idealmente, sarebbe anche bello dare accesso in sola lettura alla sessione di tmux ad altri utenti.


10
Sono troppo pigro. Uso solo la tua domanda come risposta: D
phunehehe,

Risposte:


46

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

wemux migliora tmux per semplificare e rendere più potente il multiplexing di terminali multiutente. Consente agli utenti di ospitare un server wemux e di far partecipare i client:

La modalità Mirror offre ai client (un altro utente SSH sulla tua macchina) l'accesso in sola lettura alla sessione, consentendo loro di vederti al lavoro, oppure

La modalità di accoppiamento consente al cliente e a te stesso di lavorare nello stesso terminale (cursore condiviso)

La modalità Rogue consente al client di accoppiarsi o lavorare in modo indipendente in un'altra finestra (cursori separati) nella stessa sessione di tmux.

È dotato di supporto multi-server, nonché elenco degli utenti e notifiche quando gli utenti si collegano / staccano.

È un wrapper shellscript su tmux - non è necessaria la compilazione.


16

Ho provato questo su Ubuntu ma non vedo perché non funzionerebbe su altre varianti unix.

Se entrambi gli utenti sono membri di un gruppo comune e il percorso socket utilizza quel gruppo, entrambi gli utenti saranno in grado di collegarsi correttamente.

Invece di dover cambiare i permessi del percorso socket ogni volta che ne crei uno potresti creare una directory specifica per i socket (ho usato / var / tmux).

Per prima cosa aggiungi un gruppo per gli utenti di tmux

$ addgroup $TMUX_GROUP

Creare una directory con il gruppo impostato su $ TMUX_GROUP e utilizzare il bit setgid in modo che i file creati all'interno della directory abbiano automaticamente il gruppo impostato su $ TMUX_GROUP.

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

Quindi assicurati che gli utenti che desiderano condividere la sessione siano membri di $ TMUX_GROUP

$ usermod -aG $TMUX_GROUP user1
$ usermod -aG $TMUX_GROUP user2

2
Se si dispone di un file system che supporta ACL , non è necessario utilizzare un gruppo (e in particolare non è necessario alcun intervento root). Ma questo non risolve il problema della condivisione della configurazione di tmux , vero?
Gilles,

3
Per creare sesion condiviso: tmux -S $TMUX_GROUP/shared-session. Per collegarlo da un altro account:tmux -S $TMUX_GROUP/shared-session attach
jfs

Il commento sopra (di @JFSebastian) dovrebbe far parte della risposta. L'impostazione proposta è ok, ma la risposta non è chiara quando si spiega come utilizzarlo realmente. E per tutte le risposte in questa pagina, questa è quella che risolve meglio il problema.
Dr Beco,

12

Per quanto ne so, non è possibile condividere sessioni con altri utenti in modo "pulito".

Inoltre, l'accesso di sola lettura non è possibile se il client non utilizza lo -rswitch.

Poiché un altro schermo multiplexer terminale supporta le funzionalità che stai cercando, purtroppo anche in modo ingombrante ... Non sono sicuro che questa sia un'opzione per te, ma forse qualcun altro lo troverà utile.

Soluzione per schermo :

Ospita una sessione:

  • È necessario impostare il bit SUID dello schermo : - /
  • Apri la sessione con screen -S sessionname
  • ctrla + :multiuser on
  • ctrla + :acladd otherUsername

Partecipa a una sessione:

  • screen -x username/sessionname

È possibile impostare i bit di autorizzazione per l'utente (* per tutti) con :aclchgo :chacl. # aggiunto influirà su Windows,? in allegato influenzerà i comandi.

Esempi:

  • :aclchg * -wx "#,?" imposterà le autorizzazioni della sessione in modo che leggano solo per tutti gli utenti
  • :aclchg foo +w 2 darà accesso in scrittura all'utente foo sulla finestra 2
  • :aclchg bar +x detach darà l'autorizzazione per il distacco di una sessione nella barra degli utenti

Per quello che vale, sento che la soluzione tmux (anche se leggermente più dettagliata) è in realtà "più pulita", dal momento che non implica che i binari setuid fluttuino nel filesystem.
Glifo

Sfortunatamente, tmux ha usato questo in questo modo ha un problema di sicurezza: quelli a cui dai accesso possono facilmente creare nuove sessioni e fare cose in esse che non vedi.
Curt J. Sampson,

9

Questo non è esclusivo di tmux, ma in questo momento è quello che sto usando:

È possibile utilizzare script -f /path/to/some/fileper scrivere una sessione terminale in un file. L' -fopzione aggiorna il file durante la digitazione.

Qualcun altro (con solo le autorizzazioni di lettura del file, se lo desideri) può fare tail -fper vedere il file, la tua sessione terminale. L' -fopzione rende l' tailoutput tutto ciò che viene aggiunto.

La combinazione dei due "sincronizza" la vista di un terminale. Se utilizzato con tmux, ha anche il vantaggio di evitare il ridimensionamento che si verifica quando entrambi gli utenti hanno risoluzioni diverse. Un altro aspetto è che ogni utente può lavorare su un'altra finestra o sessione privata.

Un potenziale inconveniente è che alcuni comandi (ad esempio basati su ncurses) possono fare cose strane nell'output, sfuggire anche alle sequenze (colori). Tuttavia, lo sto usando all'interno di tmux e sembra che tmux risolva questi problemi. Vedo l'altro utente leggere le pagine man e usare altri comandi che creano buffer, i colori sono visualizzati a destra, ecc.

Ciò non consente di scrivere sul terminale dell'altro (forse potrebbe essere aggiunta un'altra soluzione per quello).

Mi piace avere una finestra con due riquadri: un riquadro in esecuzione script -fper il mio peer da vedere, un altro accanto ad esso dove ho tail -fil terminale.

Funziona anche in ttys (e per il file possono essere usati anche socket o named pipe)


Mi piace la tua risposta! Questo è sia semplice che funzionale!
JL
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.