Linux / Comando tmux: separar e reconectar sessões de terminal
tmux permite separar uma sessão do terminal e voltar a ela depois, mantendo os programas dentro da sessão enquanto o servidor tmux continuar ativo. Ele é um multiplexador de terminais: organiza várias janelas e painéis dentro de um mesmo terminal.
Em acesso remoto por SSH, o protocolo de conexão segura ao servidor, execute tmux no servidor onde o trabalho deve continuar. Depois de uma desconexão, entre novamente nesse mesmo servidor com o mesmo usuário e reconecte-se à sessão existente. Isso não restaura automaticamente uma sessão perdida por reinicialização da máquina ou encerramento do servidor tmux.
Sessão, janela, painel e cliente
O servidor tmux mantém o estado das sessões e dos programas; o cliente é a conexão que mostra uma sessão no terminal. Uma sessão agrupa janelas, e cada janela contém um ou mais painéis, chamados panes. Cada painel oferece um terminal para um shell ou outro programa. Separar o cliente da sessão não equivale a encerrar os programas desses painéis.
A tecla de prefixo padrão é Ctrl+b. Pressione Ctrl e b juntos, solte as teclas e só então pressione a próxima tecla. Por exemplo, Ctrl+b seguido de d minúsculo separa o cliente atual. Ctrl+b seguido de D maiúsculo tem outra função nas configurações padrão; não é a mesma sequência.
Sintaxe e preparação
tmux [opções] [comando [argumentos...]]
Confira command -v tmux, tmux -V e man tmux no sistema usado. Se o comando não existir, obtenha o pacote apropriado da distribuição antes da prática. A versão e a configuração local podem mudar opções, aparência e atalhos.
Use um terminal interativo e comece fora de outra sessão tmux. Se o trabalho será remoto, conecte-se primeiro ao servidor por SSH. Consulte tmux ls para conferir nomes existentes; uma mensagem de que não há servidor pode ser normal antes de criar a primeira sessão. Se work já existir, escolha outro nome para a prática e use-o em todos os comandos correspondentes.
Criar, separar e reconectar uma sessão com nome
- No terminal externo à sessão, crie uma sessão chamada work:
tmux new -s work
New é uma forma curta de new-session. O comando cria a sessão e conecta o cliente a ela. Você deve passar a ver o shell dentro do tmux e, na configuração padrão, uma linha de estado. Um nome já utilizado pode impedir a criação; não confunda essa situação com uma sessão nova vazia.
- Dentro da sessão, execute um comando de teste simples, como
sleep 60. Enquanto ele aguarda, pressione Ctrl+b, solte as teclas e pressione d minúsculo. O terminal deve voltar ao shell externo, enquanto a sessão continua existindo. - Agora no terminal externo, liste as sessões:
tmux ls
Procure work e confira o nome antes de se conectar. A listagem pode incluir o número de janelas e a data de criação; o texto exato varia. A execução do comando de teste pode já ter terminado quando você voltar, mas o shell da sessão ainda pode permanecer aberto.
- Se houve queda de SSH, conecte-se novamente ao mesmo servidor com o mesmo usuário antes da próxima etapa. Se você apenas separou a sessão, já está no terminal externo apropriado.
- Reconecte-se ao nome conferido:
tmux attach -t work
Você deve retornar ao terminal da sessão existente. Se sleep ainda estiver em execução, verá a espera; se já terminou, verá o prompt do shell. Attach não reinicia o comando nem recupera um processo que já foi encerrado.
- Para sair da visualização e manter a sessão, repita Ctrl+b e depois d. Para terminar somente a prática, aguarde o comando de teste acabar e digite
exitno prompt do shell desse painel. Se ele for o último painel da última janela, a sessão se encerra. Não use o encerramento do servidor inteiro para apenas se separar de uma sessão.
Repetir a sequência com uma sessão demo
O roteiro abaixo usa o nome demo, que também deve estar livre. Ele é uma sequência interativa para executar uma linha por etapa, não um script para colar inteiro. Há ações no teclado entre os comandos.
tmux new -s demo
tmux ls
tmux attach -t demo
- Execute somente a primeira linha no terminal externo. Dentro da nova sessão, inicie sleep 60.
- Separe o cliente com Ctrl+b e depois d minúsculo.
- No terminal externo, execute a segunda linha e localize demo.
- Execute a terceira linha para voltar à sessão demo. Ao terminar o teste, aguarde a espera e feche apenas o shell de teste com exit, ou separe o cliente se quiser deixar a sessão aberta.
Esta linha é uma ilustração resumida de uma sessão demo com uma janela e sem cliente conectado. A palavra detached descreve esse estado; a linha não é uma transcrição da saída padrão de toda versão de tmux ls, que pode mostrar a data de criação e outros campos:
demo: 1 windows (detached)
A separação preserva a sessão; encerrar o shell do último painel pode encerrá-la. Da mesma forma, desligar o servidor tmux ou reiniciar a máquina não equivale a separar um cliente. Planeje serviços e tarefas de inicialização por outros meios quando precisar sobreviver a uma reinicialização.
Comandos principais
| Comando | Função |
|---|---|
new -s nome |
Cria uma sessão com esse nome e normalmente conecta o cliente a ela. |
ls |
Lista as sessões do servidor tmux consultado. |
attach -t nome |
Conecta o cliente à sessão existente selecionada. |
detach |
É uma forma curta de detach-client; separa o cliente atual no contexto apropriado. |
split-window |
Divide um painel da janela, criando outro painel. |
Na tabela estão os subcomandos. No shell, eles recebem tmux antes, como nos exemplos de new, ls e attach. Dentro de uma sessão, tmux detach também permite separar o cliente atual. Os alvos e as opções completas estão no manual de referência do tmux.
Janelas, painéis e atalhos padrão
- Ctrl+b, depois c: cria uma nova janela.
- Ctrl+b, depois n ou p: muda para a janela seguinte ou anterior.
- Ctrl+b, depois %: divide o painel em dois, um à esquerda e outro à direita.
- Ctrl+b, depois ": divide o painel em dois, um acima do outro.
- Ctrl+b, depois o: seleciona o próximo painel da janela.
- Ctrl+b, depois ?: mostra a ajuda dos atalhos. Nessa visualização, q sai da ajuda.
Somente o painel ativo recebe o texto digitado. Separe a sessão com d depois do prefixo quando quiser continuar mais tarde; fechar um painel ou sair de seu shell é outra ação. Se os atalhos não corresponderem a estes, confira a configuração existente e a ajuda local, pois o prefixo e as associações podem ter sido alterados. O guia inicial oficial do tmux apresenta esses conceitos e a sequência de uso.
Sessão não encontrada e limites da verificação
Se ls ou attach não localizar a sessão esperada, confira o servidor remoto, o usuário, o nome e se os programas da sessão continuam ativos. Se a sessão foi criada usando um servidor com socket específico, por exemplo com -L ou -S, a consulta ao servidor padrão pode não mostrá-la; use o mesmo contexto que foi utilizado na criação. Criar outra sessão com um nome parecido não recupera a anterior.
Durante uma conexão SSH interrompida, a continuidade ainda depende de o sistema remoto e o servidor tmux permanecerem ativos. Políticas do ambiente que encerrem os processos do usuário também podem interferir. Tmux conserva uma sessão em execução; ele não é, por si só, um mecanismo de restauração após o encerramento desses processos.
No ambiente disponível, Bash 5.3.9 do Git para Windows, tmux não foi encontrado: a consulta tmux -V retornou 127. Os quatro blocos de comandos passaram pela verificação de sintaxe do Bash, mas não houve execução de um servidor tmux, separação por teclado, tela de painéis ou teste de desconexão SSH em Linux. As etapas e os resultados esperados foram conferidos nos documentos oficiais.
Pergunta frequente
A sessão tmux sempre continua quando o SSH cai?
Geralmente você pode voltar a ela se o servidor tmux, o sistema remoto e os programas da sessão continuarem ativos. Reconecte o SSH ao mesmo servidor e usuário e escolha a sessão com attach. Uma reinicialização, o encerramento da sessão ou a morte do servidor tmux pode eliminar esse estado; separar um cliente não oferece uma garantia contra esses eventos.




