Estou procurando uma maneira limpa e fácil de compartilhar uma sessão tmux com outro usuário na mesma máquina. Eu tentei o -S socket-path
, mas requer a abertura de todas as permissões do caminho do soquete antes que alguém possa se conectar à sessão. Funciona, mas é um pouco complicado. Por exemplo:
# Me
$ tmux -S /tmp/pair
$ chmod 777 /tmp/pair
# Another user
$ tmux -S /tmp/pair attach
Isso funciona, mas agora os dois usuários compartilham a mesma configuração do tmux (a configuração do usuário que iniciou a sessão). Existe uma maneira de permitir que os dois usuários usem sua própria configuração do tmux e suas próprias ligações de teclas tmux individuais?
Para pontos de bônus, idealmente, também seria bom fornecer acesso somente leitura da sessão tmux a outros usuários.
De https://github.com/zolrath/wemux :
o wemux aprimora o tmux para tornar a multiplexação de terminal multiusuário mais fácil e mais poderosa. Ele permite que os usuários hospedem um servidor wemux e façam com que os clientes participem:
O Modo Espelho fornece aos clientes (outro usuário SSH em sua máquina) acesso somente leitura à sessão, permitindo que eles vejam seu trabalho ou
O modo de pareamento permite que o cliente e você trabalhem no mesmo terminal (cursor compartilhado)
O Rogue Mode permite que o cliente emparelhe ou trabalhe independentemente em outra janela (cursores separados) na mesma sessão do tmux.
Possui suporte a vários servidores, bem como listagem e notificações de usuários quando os usuários se conectam/desanexam.
É um wrapper shellscript sobre tmux - não é necessário compilar.
Eu tentei isso no Ubuntu, mas não vejo por que não funcionaria em outras variantes do unix.
Se os dois usuários forem membros de um grupo comum e o caminho do soquete usar esse grupo, ambos os usuários poderão se conectar bem.
Em vez de precisar alterar as permissões do caminho do soquete toda vez que você cria um, você pode criar um diretório específico para soquetes (usei/var/tmux).
Primeiro adicione um grupo para usuários do tmux
$ addgroup $TMUX_GROUP
Crie um diretório com o grupo definido como $ TMUX_GROUP e use o bit setgid para que os arquivos criados dentro do diretório tenham automaticamente o grupo definido como $ TMUX_GROUP.
$ mkdir /var/tmux
$ chgrp $TMUX_GROUP /var/tmux
$ chmod g+ws /var/tmux
Em seguida, verifique se os usuários que desejam compartilhar a sessão são membros de $ TMUX_GROUP
$ usermod -aG $TMUX_GROUP user1
$ usermod -aG $TMUX_GROUP user2
Tanto quanto eu sei, não é possível compartilhar sessões com outros usuários de uma maneira "limpa".
O acesso somente leitura também não é possível, se o cliente não usar o -r
interruptor.
Como outro multiplexador de terminal tela suporta os recursos que você procura, infelizmente também de maneira complicada ... Não tenho certeza se essa é uma opção para você, mas talvez alguém ache isso útil .
Solução para tela:
Organize uma sessão:
screen -S sessionname
:multiuser on
:acladd otherUsername
Participe de uma sessão:
screen -x username/sessionname
Você pode definir bits de permissão para o usuário (* para todos) com :aclchg
ou :chacl
. # anexado afetará janelas,? anexado afetará os comandos.
Exemplos:
:aclchg * -wx "#,?"
definirá as permissões da sessão como somente leitura para todos os usuários:aclchg foo +w 2
dará acesso de gravação para o usuário foo na janela 2:aclchg bar +x detach
dará permissão para desanexar uma sessão na barra do usuárioIsso não é exclusivo do tmux, mas agora é o que estou usando:
Você pode usar script -f /path/to/some/file
para gravar uma sessão do terminal em um arquivo. O -f
opção atualiza o arquivo enquanto você digita.
Outra pessoa (com apenas permissões de leitura para o arquivo, se desejar) pode fazer tail -f
para ver o arquivo, sua sessão do terminal. O -f
opção faz com que tail
produza o que quer que seja anexado.
A combinação dos dois "sincroniza" a visualização de um terminal. Quando usado com o tmux, também tem a vantagem de evitar o redimensionamento que ocorre quando os dois usuários têm resoluções diferentes. Outra característica é que cada usuário pode trabalhar em outra janela ou sessão privada.
Um inconveniente em potencial é que alguns comandos (ncurses baseados, por exemplo) podem fazer coisas estranhas na saída, escapar sequências também (cores). No entanto, estou usando isso dentro do tmux, e parece que o tmux corrige esses problemas. Eu posso ver o outro usuário ler as páginas de manual e usar outros comandos que criam buffers, as cores são exibidas corretamente, etc.
Isso não permite gravar no terminal um do outro (talvez alguma outra solução possa ser adicionada para isso).
Eu gosto de ter uma janela com dois painéis: um painel em execução script -f
para meu colega ver, outro próximo a ele onde eu tail -f
é terminal.
Também funciona em ttys (e soquetes ou pipes nomeados também podem ser usados para o arquivo)