Estou procurando uma maneira limpa e fácil de compartilhar uma sessão tmux com outro usuário na mesma máquina. Eu tentei a -S socket-path
opção, 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 do tmux?
Para pontos de bônus, idealmente, também seria bom fornecer acesso somente leitura da sessão tmux a outros usuários.
Respostas:
Em https://github.com/zolrath/wemux :
É um wrapper shellscript sobre tmux - não é necessário compilar.
fonte
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, os dois serão capazes de 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
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.
Em seguida, verifique se os usuários que desejam compartilhar a sessão são membros de $ TMUX_GROUP
fonte
tmux -S $TMUX_GROUP/shared-session
. Para anexar a ele de outra conta:tmux -S $TMUX_GROUP/shared-session attach
Tanto quanto eu sei, não é possível compartilhar sessões com outros usuários de uma maneira "limpa".
Além disso, o acesso somente leitura não é possível se o cliente não usar a
-r
opção.Como outra tela de terminal multiplexador 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áriofonte
Isso 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. A-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. A-f
opção faz com que atail
saída seja anexada.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 correndo
script -f
para o meu colega ver, e outro próximo a ele ondetail -f
é terminal.Também funciona em ttys (e soquetes ou pipes nomeados também podem ser usados para o arquivo)
fonte