it-swarm.it

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

Sto cercando un modo semplice e chiaro per condividere una sessione di tmux con un altro utente sulla stessa macchina. Ho provato il -S socket-path opzione, 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.

112
Ryan McGeary

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 sul tuo computer) 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.

48
Peter

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
17
Stephen Paulger

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

Inoltre, l'accesso in sola lettura non è possibile, se il client non utilizza -r interruttore.

Poiché un altro multiplexer terminale schermo 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:

  • Bit SUID di schermo deve essere impostato: - /
  • Apri la sessione con screen -S sessionname
  • ctrla + :multiuser on
  • ctrla + :acladd otherUsername

Partecipa a una sessione:

  • screen -x username/sessionname

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

Esempi:

  • :aclchg * -wx "#,?" imposterà le autorizzazioni della sessione in modo che possano essere lette 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
12
echox

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

Puoi usare script -f /path/to/some/file Per scrivere una sessione terminale in un file. L'opzione -f Aggiorna il file durante la digitazione.

Qualcun altro (con solo autorizzazioni di lettura al file, se lo desideri) può fare tail -f Per vedere il file, la tua sessione terminale. L'opzione -f Rende tail output qualunque cosa venga aggiunta.

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 che esegue script -f Per il mio peer, un altro accanto ad esso dove I tail -f È il terminale.

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

11
ferhtgoldaraz