tmux vs. screen


262

Estou prestes a voltar a usar o GNU Screen , mas tenho ouvido pessoas ocasionalmente mencionarem o tmux como uma alternativa melhor. Realmente oferece uma alternativa a todos os recursos que a Tela oferece, como monitoramento de atividades em diferentes janelas etc.? Quais são os prós e os contras de cada um?



2
Na tela, você pode enviar comandos para uma sessão anexada ou screen -S automate_me -X stuff 'command'$(echo -ne '\015')não no tmux. Bastante útil se você estiver testando uma imagem / ISO da caixa virtual e precisar executar alguns comandos remotamente rapidamente. Por exemplo, eu o tenho em um comando do Vim para depurar scripts rapidamente em uma tela do Virtualbox. Nas versões anteriores do tmux, descobri que a tela lidava com mais texto passando rapidamente, enquanto o tmux travava. Além disso, a tela não requer nenhuma configuração para lidar com UTF-8, etc.
Dez

Será que tmuxlidar historycorretamente?
beroe 04/07

Respostas:


170

Algumas das (grandes) razões que eu prefiro tmuxsobre screen:

  • A barra de status é muito mais fácil de usar. Você pode configurar facilmente textos / estilos diferentes para a janela atual, janelas com atividade etc., e colocar as coisas à esquerda e à direita da barra de status, incluindo comandos do shell que podem ser executados em um intervalo especificado (padrão 15s).
  • Quase todo comando que você pode executar dentro tmuxpode ser executado a partir de um shell tmux command [args]. Isso torna muito fácil a criação de scripts, além de facilitar a execução de comandos complexos.
  • Renomeação automática de janela muito mais precisa. Enquanto screendefine o título com base na primeira palavra do comando e requer que a configuração do shell faça isso mesmo em uma janela de shell, tmuxcontrola quais processos estão realmente em execução em cada janela e atualiza o título de acordo. Dessa forma, você obtém uma renomeação dinâmica com qualquer shell e configuração zero. Por exemplo: digamos que você esteja executando o Z Shell; o nome da janela seria "zsh". Agora, digamos que você queira editar algum arquivo de configuração e digitar sudo emacs /etc/somefile. Enquanto o sudo estiver solicitando sua senha, o nome da janela será "sudo", mas depois que você fizer isso e sudoiniciar emacs, o título será "emacs". Quando você estiver pronto e sairemacs, o título voltará a "zsh". Isso é bastante útil para acompanhar as janelas e também pode ser especialmente útil em situações específicas, como se você tiver algum processo de execução demorada em outra janela que ocasionalmente solicita sua entrada dialog; o nome da janela mudaria para "diálogo" quando isso acontecesse, assim você saberia que tinha que mudar para essa janela e fazer alguma coisa.
  • Melhor manipulação de sessão (IMHO). Você pode fazer muito mais com sessões dentro de tmuxsi. Você pode alternar, renomear, etc. com facilidade e mover e compartilhar janelas entre as sessões. Ele também possui um modelo diferente, no qual cada usuário possui um servidor que controla suas sessões e com o qual o cliente se conecta. A desvantagem disso é que, se o servidor travar, você perde tudo; Eu nunca tive o servidor travar comigo, no entanto.
  • tmuxparece ser mais ativamente desenvolvido. Existem atualizações com bastante frequência, e você pode registrar um relatório de bug ou solicitação de recurso de acordo com esta FAQ e obter uma resposta dentro de alguns dias.

Essas são apenas as principais coisas que vêm imediatamente à mente. Também há outras coisinhas e tenho certeza de que estou esquecendo algumas coisas. Definitivamente, vale a pena tmuxtentar.


151
O desenvolvimento do tmux é mais ativo porque é novo . O GNU Screen tem quase 25 anos , então eles corrigiram a maioria dos bugs.
um nerd pago

8
o comentário de um nerd pago é uma qualificação muito importante do seu último ponto. E o segundo ponto, como afirmado, não é realmente uma diferença, pois também se aplica à tela, a menos que você possa ser mais específico.
jw013


11
@apaidnerd é uma afirmação muito rica: savannah.gnu.org/bugs/…
Błażej Michalik

93

( Sessões são coleções de janelas que podem ser desanexadas e reconectadas posteriormente. O Windows pode conter um ou mais painéis . Por exemplo, configurações, confira aqui e aqui .)

tmux

  • Prós
    • Pode enviar chaves para outros painéis, como um IDE
    • Teclados fáceis - com a configuração certa, você se sentirá em casa com o Vim ou o Screen
    • Ligações Vim-ish e Emacs-ish integradas
    • Bom gerenciamento de layout, muito parecido com um gerenciador de janelas lado a lado
    • O Unicode parece funcionar apenas com terminais modernos
    • Alguns problemas do terminal foram corrigidos com TERM=tmux
  • Contras
    • Lento - não sei por que, mas as teclas parecem atrasadas Não há mais problemas com lentidão
    • A multiplexação força toda a largura e altura da sessão ao menor terminal conectado
    • Falha várias vezes no Mac OS X, perdendo a sessão inteira
    • Falha no Linux após a atualização, onde não consegui me reconectar à minha sessão antiga
    • Ocasionalmente, falha nas teclas de comando - ^A ^[faz algumas tentativas no modo de cópia
    • Não é possível mover um painel de uma janela para outra Corrigido com o join-panecomando
    • Nenhuma linha desembrulhando (ou "reflow" ou "rewrap") após a alteração da largura do terminal (redimensionamento da janela)

Tela GNU

  • Prós
    • Extremamente estável (v1.0 foi em 1987)
    • Alguns problemas do terminal foram corrigidos com TERM=screen
    • Ligações do Emacs-ish integradas
    • Fácil de mover e controlar os painéis horizontais
    • Ao multiplexar, qualquer terminal conectado pode redimensionar um painel
  • Contras
    • Nenhuma divisão vertical sem correção (exceto no Ubuntu)
    • As divisões do painel são perdidas ao desanexar
    • Fazer o Unicode funcionar exige um pouco de requinte e determinação
    • Configuração de linha de status maluca

As teclas estão atrasadas apenas ao pressionar Esc? O tmux tem um atraso no qual espera para ver se você está inserindo uma sequência xterm ou apenas um Esc solitário e, combinado com o vim, pode parecer bastante lento. Defina o tempo de escape para um valor mais baixo, como 50.
Eevee 4/11

Também é engraçado que você diz ^A ^[que às vezes não funciona; Eu tenho o mesmo problema com a tela, mas nunca tmux! E eu acredito que você pode mover os painéis por aí join-pane.
Eevee

Acho que a tela usa muito mais memória, o que pode ser incluído como uma desvantagem.
Paradroid 14/08

6
Bem, tmuxé péssimo vim, em alguns casos (o meu é o meu), nenhuma solução publicada em qualquer lugar funciona, e mesmo as pessoas que passam algum tempo resolvendo o problema não conseguiram. É irritante quando você não pode usar <C-Left>e <C-Right>entrar vim.
yo '

3
No vertical splits without patch (except on Ubuntu)Eu não acho que isso seja verdade. Eu uso a tela há alguns anos e nunca tive problemas em dividir horizontal ou verticalmente o Debian e o Fedora. Mesmo no Android com Termux, ele funciona como um encanto.
Forivin

12

Um profissional para tela: está disponível praticamente pronto para uso no Linux e Solaris. Quando você precisa alternar entre plataformas, é bom não alternar o contexto mental.

Tenho certeza de que você pode compilar o tmux em qualquer plataforma, mas às vezes você tem acesso suficiente para usar a tela, mas os administradores do sistema não querem adicionar nenhum software que não seja absolutamente necessário.


10

Estou usando o tmux há cerca de 2 dias, então meu entusiasmo desenfreado por ele ainda não foi amenizado ao atingir casos de uso irritantes. Enquanto passava pelas dores habituais crescentes de transição de um programa para outro, fiquei impressionado com vários recursos positivos, mas o recurso que me faz acreditar que nunca voltarei à tela é a utilidade do modo copiar e colar. Na tela, você não pode entrar no modo de cópia, rolar de volta no buffer e depois ir para outra janela. No tmux, você pode ter várias janelas simultaneamente no modo de cópia com o buffer rolado de volta para diferentes posições. Além disso, existem vários buffers de cópia. E você não precisa corrigir a fonte para obter o movimento do cursor fFtT.


8

As coisas que saio do tmux e não fico facilmente na tela são:

  1. fazer divisões no painel vertical
  2. multiplexação, que usamos para emparelhamento remoto e local.


Como mencionado anteriormente, a tela possui divisões de painel vertical (requer um patch sem o Ubuntu, aparentemente). Além disso, a multiplexação funciona bem e funciona por muitos anos.
precisa

as divisões verticais estão na linha principal screendesde a versão 4.2, lançada em 2014. Muitas distribuições lançam versões muito antigas, principalmente a Apple.
Neal Fultz

2
Ambos os pontos estão incorretos.
Forivin

2
A resposta não está correta em 2018
Alec Istomin

5

Substituí o GNU Screen pelo tmux em todos os casos de uso, exceto um - quando preciso de um equivalente no HyperTerminal para conectar às portas seriais. Como Aaron Toponce observou em seu artigo "Conectando a modems nulos em série com a tela GNU" , a FAQ do tmux declara:

a tela possui suporte serial e telnet embutido; isso é inchaço e é improvável que seja adicionado ao tmux.

Meu caso de uso típico do tmux é criar sessões de desenvolvimento de vários painéis e várias janelas em combinação com o tmuxinator . Se você quiser aprender o tmux , recomendo o livro de Brian P. Hogan, tmux: Productive Mouse-Free Development .


Você conhece cu Chamar outro sistema ? Tty serial mais simples que a tela , mas leve e útil!
F. Hauri

2

Sou usuário pesado do Screen há muito tempo, mas uso uma versão que modifiquei em 2002. Principalmente porque queria poder ter a janela "próximo / anterior" da ordem de navegação correspondente à ordem em que novos janelas foram criadas, semelhante a um gerenciador de janelas lado a lado como i3 ou Ion . O comportamento padrão da tela é que 'next' e 'prev' passem pelo número da janela, de modo que geralmente uma janela 'nova' (pegando o menor número disponível) esteja localizada em outro lugar que não seja a próxima janela - confuso se você não ' Não lembro dos números. Desde então, meu comportamento preferido foi implementado no Tmux como um sinalizador para o comando new-window em 2010 e a opção renumber-windows em 2012. O patch My Screen, que tentei tornar o mais aceitável possível, incluindo adições de documentação e assim por diante, não gerou nenhuma discussão na lista Screen em julho de 2002 (então "screen@informatik.uni-erlangen.de" não pode encontrar arquivos). Na verdade, isso nem foi reconhecido, mesmo quando o enviei novamente um ano depois.

Desde 2002, "reformulei" meu patch algumas vezes para aplicar nas versões mais recentes do Screen. No entanto, quando cheguei à versão 4.3 (2015), notei uma alteração não documentada que interrompeu um dos meus usos de tela - ou seja, que 'coisas' agora interpolam variáveis ​​de ambiente . Eu não precisava desse recurso e não conseguia descobrir como escapar facilmente do argumento para 'coisas' (para que eu pudesse enviar texto contendo cifrões), então continuei usando a versão 4.0 (de 2004).

Eu uso o 'material' do Screen ('send-keys' no Tmux) em uma função Emacs que envia o conteúdo da região atual do Emacs para um número de janela específico. Dessa forma, quando escrevo código em uma linguagem de script, abro um intérprete, dou um número especial à janela do intérprete e posso enviar linhas de código da minha janela do editor diretamente para a janela do intérprete usando essa ligação do Emacs. É hacky, mas eu gosto mais do que a solução pure-Emacs , já que também posso interagir com o intérprete na janela Screen usando as teclas padrão. É um pouco como um IDE da GUI, mas não preciso usar o mouse ou olhar para um cursor piscando.

Outro recurso que implementei no meu patch é a capacidade de "marcar" uma janela e, em seguida, reposicionar a janela marcada para ser "próxima" após a atual. Para mim, essa é uma maneira muito mais natural de reorganizar as janelas do que renumerar; é como o paradigma de copiar / colar ou "arrastar e soltar". ( Recentemente, eu também descobri como fazer isso no i3 .)

Deveria ser possível fazer o mesmo no Tmux, por exemplo, a partir de 2015, existe uma facilidade para "marcar" um painel. Ou talvez uma solução mais elementar possa ser elaborada com scripts de shell com estado. Eu implementei um script curto e combinações de teclas para tentar o método "painel marcado", e funcionou algumas vezes, mas o Tmux travou com "[servidor perdido]". Então eu encontrei o Tmux travando mesmo sem tentar fazer nada complicado. Aparentemente, ele está travando para alguns usuáriosalguns anos, pelo menos . Às vezes, o servidor trava, outras começa a usar 100% da CPU e deixa de responder. Eu nunca vi a tela fazer um desses.

Em teoria, o Tmux é superior ao Screen de várias maneiras. Possui capacidade de script muito melhor, o que significa que você pode fazer coisas como consultar a lista de janelas na sessão atual na linha de comando, o que é impossível com o Screen. Por exemplo, em 2015, a Screen adicionou um comando para "classificar janelas por título" . Não tenho certeza de quando um comando tão especializado seria útil, mas esta e mais variações práticas (por exemplo, classificar janelas pelo uso da CPU) poderiam ser feitas com relativa facilidade a partir de um script de shell no Tmux. Para mim, parece difícil fazer algo tão criativo em Screen, pelo menos sem modificar o código C.

Como outros pôsteres mencionados, o Tmux tem um modelo de servidor único que eu vejo como a principal desvantagem, principalmente quando o servidor está travando. É possível contornar isso especificando um soquete separado para cada "sessão". Ainda assim, prefiro o padrão de um servidor por sessão da Screen, que parece um pouco mais elegante.

Trabalhar com o código Screen, em 2002, foi educativo e agradável para mim. Curiosamente, por todos os seus recursos adicionais, o Tmux tem cerca de 25% menos linhas de código que o Screen (30k vs 40k). Percebi que o Tmux usa muitas estruturas de árvore e de lista de dados, que eram um pouco difíceis de entender. Tela parecia preferir matrizes.

Pelo que entendi, como a interface do terminal Unix é muito estável, há pouca necessidade de o código Screen ou Tmux se adaptar às mudanças no sistema operacional subjacente. Esses programas realmente não possuem atualizações de segurança, como navegadores ou servidores da Web ou mesmo o shell. Não notei nenhum problema ao executar minha versão personalizada do Screen, atualizada pela última vez em 2004 (exceto pela necessidade de adicionar alguns arquivos de configuração para impedir que o Systemd exclua o soquete; esses arquivos geralmente fazem parte do pacote de distribuição). Talvez eu pudesse solucionar os problemas encontrados no Tmux executando uma versão do Tmux antes de começar a falhar. Obviamente, se um número suficiente de usuários fizer isso, não será muito bom para novos usuários, pois significa que menos especialistas procurarão bugs nas últimas versões oficiais desses programas. No entanto, é difícil me motivar a mudar para um produto que seja instável para mim (o mais recente Tmux) ou que não tenha certos recursos que eu quero (tela padrão).

Sei que isso não fornece uma resposta fácil para a pergunta do OP, mas espero que minha perspectiva tenha sido útil.


2

Um dos mantenedores do tmux, Thomas Adam, também está listado como mantenedor do screenprojeto, embora ele apenas toque no código do tmux. Este é um grande profissional do tmux over screen.


1

Eu diria que a disponibilidade da tela é a sua força, mas seu sistema de janelas não é tão fácil de manusear quanto o do . Devo dizer que uso o maioria das vezes no momento e, como resultado, tenho muitas guias de terminal em vez de janelas de tela.

@Jed Schneider: Você pode obter divisões no painel vertical com Ctrl+ Ae depois |(barra vertical).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.