Como ter janelas em seu terminal usando tmux

Muitas vezes você lida com ambientes que possuem apenas uma interface de linha de comandos e precisa executar mais de uma ação ao mesmo tempo. Como resolver esta necessidade tendo uma única sessão/janela? Nesta receita apresentamos o tmux.

Esta receita lhe fornecerá o essencial para que possa dar os primeiros passos com esta super ferramenta de produtividade que não é tão conhecida como deveria por usuários Linux.

Ingredientes

  • Linux (mas você pode substituir pelo WSL no Windows ou mesmo pelo macOS).
  • tmux.
  • Habilidade e memória manual mínima.
  • Um pouco de paciência e persistência pois o primeiro contato pode não ser tão fácil assim.

Ingrediente principal: tmux

A melhor maneira de entender o problema é vendo-o em ação, sendo assim vamos a um caso real. Preciso iniciar dois processos, acompanhar seus logs de saída e editar um arquivo ao mesmo tempo. Consigo pensar em três soluções imediatas para o problema (há mais, a criatividade é infinita).

Abro três janelas no meu desktop:

Ou crio três abas na interface do meu terminal (também se estou em uma solução gráfica):

que é uma solução bem ruim, pois não vejo todos os logs ao mesmo tempo. Ou... uso tmux.

As vantagens são nítidas:

  • Não preciso de uma interface gráfica: o que é excelente quando vou lidar com servidores, por exemplo. Pense em você implantando a solução e acompanhando os logs ao mesmo tempo.
  • Tenho acesso a todas as informações que preciso ao mesmo tempo diante dos meus olhos.
  • Se estou em uma interface gráfica, são n janelas a menos com as quais preciso me preocupar.

Mas o tmux não é uma ferramenta que você irá dominar de imediato. Leva tempo e, principalmente, habilidade e memória manual, mas depois das dores iniciais ele é um forte candidato a aumentar exponencialmente sua produtividade no terminal. Então é importante ter três conceitos em mente.

Os conceitos

Tmux é um multiplexador de terminais (que termo "elegante"!), traduzindo: é um software capaz de a partir de uma única sessão do usuário com a interface de linha de comando, simular várias. Pense como o análogo ao conceito de multitarefa que temos em interfaces gráficas.

E por sessão, estou falando de sessão mesmo, ou seja, um único processo de autenticação no computador, exatamente como você faz quando inicia seu Windows, macOS ou Linux: você fornece seu login e senha e na sequência inicia vários programas ao mesmo tempo com estas mesmas credenciais. Se achou esta descrição muito ruim, tem esta na Wikipedia que talvez você prefira.

Para que eu tenha minhas "janelas" na linha de comando o tmux usa os conceitos de sessão (session), janela (window) e painel (pane). Nesta receita lidaremos mais com janelas e painéis para simplificar, mas sou obrigado a falar um pouco sobre sessões também.

A sessão é um conjunto de janelas (sério?). Pense nele como os desktops virtuais com os quais você já tenha experiência no ambiente gráfico do seu sistema operacional. É possível ter várias sessões ativas do tmux em paralelo inclusive, o que vai ser muito útil quando você tiver se empolgado e criado inúmeras janelas.

Já a janela é um agregador de painéis. Fica difícil descrever textualmente, sendo assim observe a imagem a seguir: cada retângulo é um painel independente, todos contidos em uma mesma janela.

Gravei minha interação entre janelas no tmux para que você possa ter uma ideia sobre o que estou falando. Note que parto de uma janela já com três painéis, crio uma nova e, na sequência, navego entre as diferentes janelas do sistema:

Acho que com base nisto já podemos colocar a mão na massa.

Instalando o tmux

Talvez você já o tenha instalado em seu computador. Sendo assim, para testar, execute o comando tmux em seu terminal e veja se já não está presente.

Se não estiver presente, na esmagadora maioria das distribuições Linux que usam o APT este é um pacote que já se encontra presente, você pode instalá-lo com o comando a seguir:

apt-get install tmux

Caso o comando acima não te atenda, neste link do site oficial do projeto há instruções que poderão resolver seu problema. Usa Windows, pelo WSL você consegue ter o mesmo resultado. MacOS? Não fique triste, há tutoriais sobre como executar a instalação neste e neste link.

Iniciando tmux e vendo as sessões

Iniciar o tmux é simples: te mostrei ali em cima, mas só pra recordar, vamos lá. No seu shell execute o comando a seguir:

tmux

O tmux por padrão estará criando uma nova sessão sempre que executar este comando, que é um sinônimo do comando tmux new.

Talvez acidentalmente você tenha fechado a janela do seu terminal e queria voltar para a sua sessão: o que você faz? Primeiro execute o comando a seguir para listar todas as sessões do tmux:

tmux ls

E uma saída similar à exposta a seguir será exposta:

Para entrar de novo na sessão que saiu, execute o comando a seguir:

tmux attach-session -t [identificador da sessão]
Exemplo indo para a sessão 5 acima listada:
tmux attach-session -t 5

Ok, até aqui nada de novo, agora vamos ao que interessa: panes e windows.

Entenda os comandos

Para que o tmux seja produtivo você deve ter muito bem gravado em sua mente o conceito de "comando" no tmux. Se já usou o Emacs este não será um problema, mas se não usou, vai doer um pouquinho no início. Um comando no tmux é uma sequência de teclas.

Esta sequência de teclas segue o seguinte padrão:

Ctrl + b [Comando]

Calma agora. Comando é qualquer outra tecla do seu teclado após o "Ctrl + b". E lembra quando disse que é importante ter habilidade e memória manual mínimas? Agora você vai entender.

Não é pra pressionar todas as teclas ao mesmo tempo. É um procedimento composto por dois passos:

  • Pressione Ctrl + b (minúsculo mesmo, nem precisa ficar com os dois pressionados o tempo todo, apenas digite na sequência)
  • Libere Ctrl + b
  • Pressione a tecla que representa o comando

Vamos a um exemplo: você já iniciou o tmux e quer dividir sua janela em dois painéis horizontais, tal como na imagem a seguir: o comando é Ctrl b "

  • Pressione Ctrl + B
  • Digite " (é, aspas duplas, eu sei que é chato no início)

Pronto, resultado obtido. Minha sugestão é que você pratique por um minuto pra poder ficar bom mesmo na coisa. Então segue a lista dos comandos que mais uso no tmux.

Comandos essenciais

Aqui seguem os comandos mais úteis para um uso simples do tmux.

Gestão de painéis (os que mais uso sem sombra de dúvidas):

Comando Efeito
Ctrl b " Cria uma novo painel horizontal
Ctrl b % Cria um novo painel vertical
Ctrl b o Navega entre os paineis no sentido horário
Ctrl b (seta) Navega para o painel que está acima, abaixo, à esquerda ou à direita do atual
Ctrl b x Mata o painel corrente
Ctrl b espaço Muda o layout dos painéis. Você zoneou a sua janela e quer tentar salvá-la? Este é o comando.

Dica: scroll! Você muitas vezes precisará fazer scroll no conteúdo que um painel está expondo a você. É possível configurar o tmux para aceitar eventos de mouse, mas há uma solução mais simples usando apenas o teclado (convenhamos, o ideal aqui é usar só o teclado mesmo). Siga este procedimento:

  • Execute o comando Ctrl b [
  • Agora você pode navegar usando setas ou as teclas Page Up e Page Down
  • Para sair do modo scroll digite q

Gestão de janelas

Quando tiver se empolgado e criado uma infinidade de paineis você irá desejar criar o caos em outra janela. Sendo assim, segue uma pequena lista.

Ctrl b w Lista as janelas abertas para que você possa navegar entre elas de um modo "quase gráfico"
Ctrl b c Cria uma nova janela
Ctrl b [número] O número representa o identificador da janela de 0 a 9. Serve para que você possa trocar de janelas de uma forma mais ágil (quando sabe o identificador da mesma)
Ctrl b n Vai pra próxima janela
Ctrl b p Vai pra janela anterior
Ctrl b & Fecha a janela atual

Gestão de sessões

Depois de ter criado o caos entre suas janelas, você o transfere para as sessões. :)

Ctrl b s Lista as sessões abertas e te permite navegar entre as sessões
Ctrl b ( Muda para a sessão anterior
Ctrl b ) Muda para a próxima sessão
Ctrl b d Sai da sessão atual

Você pode encontrar diversos outros comandos do tmux neste link. São tantos que criaram até um site pra isto. O objetivo desta receita é apenas te dar o essencial para que possa dar seus primeiros passos por conta própria.

As deliciosas receitas da itexto

Esta é apenas mais uma receita da itexto. Nosso objetivo não é nestes posts lhe fornecer todo o aprofundamento para que domine um assunto, mas sim dar aquele pontapé inicial para que você possa dar seus primeiros passos neste.

É importante lembrar que o tmux não é a única solução para este problema: há diversas outras, como o GNU Screen ou Byobu. Talvez a grande vantagem do tmux seja sua popularidade, mas sem dúvidas não é a melhor solução. Até a próxima receita!

Não conhece as nossas receitas? Esta é uma metodologia que ensinamos a nossos clientes com o objetivo de facilitar a divulgação de conhecimento para o público interno ou externo, como neste post. Aprenda a ter seu livro de receitas neste link.

21