2011-01-06 15:20:23 +0000 2011-01-06 15:20:23 +0000
284
284

tmux vs. ecrã

Estou prestes a voltar a usar GNU Screen , mas tenho ouvido ocasionalmente pessoas mencionar tmux como uma alternativa melhor. Será que oferece realmente uma alternativa a todas as funcionalidades Ecrã , tais como a monitorização de actividades em diferentes janelas, etc.? Quais são os prós e os contras de cada um?

Respostas (9)

177
177
177
2011-01-17 20:36:07 +0000

Algumas das razões (principais) que me levam a preferir tmux em vez de screen:

& - A barra de estado é muito mais fácil de usar. Pode facilmente configurar diferentes textos/estilos para a janela actual, janelas com actividade, etc. e pode colocar coisas à esquerda e à direita da barra de estado, incluindo comandos de shell que podem ser executados a um intervalo especificado (por defeito 15s). - Quase qualquer comando que possa ser executado dentro de tmux pode ser executado a partir de uma shell com tmux command [args]. Isto torna-o muito facilmente escrevível, bem como facilita a execução de comandos complexos. & - Renomeação automática muito mais precisa da janela. Enquanto screen define o título com base na primeira palavra do comando, e requer configuração da shell para fazer isso mesmo numa janela da shell, tmux mantém o registo dos processos que estão realmente a correr em cada janela, e actualiza o título em conformidade. Desta forma, obtém-se uma renomeação dinâmica com qualquer configuração shell e zero. Por exemplo: Digamos que está a correr Z Shell; o nome da janela seria “zsh”. Agora digamos que quer editar algum ficheiro de configuração, por isso digite sudo emacs /etc/somefile. Enquanto sudo pede a sua senha, o nome da janela será “sudo”, mas uma vez que o tenha feito e sudo lança emacs, o título será “emacs”. Quando tudo tiver terminado e sair emacs, o título mudará de novo para “zsh”. Isto é bastante útil para manter um registo das janelas, e também pode ser especialmente útil em situações específicas, como se tiver algum processo de longa duração noutra janela que ocasionalmente lhe peça para entrar usando dialog; o nome da janela mudaria para “diálogo” quando isso acontecesse, para que soubesse que tinha de mudar para essa janela e fazer alguma coisa. & - Manuseamento de sessão mais agradável (IMHO). Pode fazer muito mais com sessões dentro do tmux em si. Pode facilmente mudar, renomear, etc. e pode mover e partilhar janelas entre sessões. Tem também um modelo diferente, onde cada utilizador tem um servidor que controla as suas sessões e ao qual o cliente se liga. O lado negativo disto é que se o servidor falhar, perde-se tudo; no entanto, nunca tive o servidor a falhar. - tmux parece estar mais activamente desenvolvido. Há actualizações com bastante frequência, e pode arquivar um relatório de bug ou pedido de recurso de acordo com esta FAQ e obter uma resposta dentro de alguns dias.

Essas são apenas as principais coisas que imediatamente lhe vêm à mente. Há outras pequenas coisas, também, e estou certo de que me estou a esquecer de algumas coisas. Mas vale definitivamente a pena dar tmux uma tentativa.

100
100
100
2011-05-04 18:28:02 +0000

(Sessões são colecções de janelas que podem ser destacadas e recolocadas mais tarde. As janelas podem conter um ou mais painéis. Por exemplo, configurações, ver aqui e aqui .)

tmux

& - Pros - Pode enviar chaves para outros vidros, como uma IDE & - Fácil encadernação de teclas – com a configuração certa, sentir-se-á em casa a partir de Vim ou Screen - Encadernação Vim-ish e Emacs-ish integrada - Boa gestão de layout, muito parecido com um gestor de janelas de azulejos - Unicode parece funcionar apenas com terminais modernos - Alguns problemas de terminal fixos com TERM=tmux - Cons - Slow – não sei bem porquê, mas as teclas parecem desfasadas~ Não há mais problemas com lentidão - A multiplexação força toda a largura e altura da sessão para o terminal mais pequeno ligado - Tem colapsado várias vezes no Mac OS X, perdeu toda a sessão - Falhou no Linux após a actualização, onde não conseguia voltar a ligar-me à minha antiga sessão - Falta de teclas de comando ocasionalmente - ^A ^[ faz algumas tentativas para o modo de cópia - Não consigo mover um painel de uma janela para outra~ Fixado com o comando join-pane& - Nenhuma linha a desenrolar (ou “reflow” ou “rewrap”) após alteração da largura do terminal (redimensionamento da janela)

Tela GNU

  • Prós
  • Extremamente estável (v1. 0 foi em 1987)
  • Alguns problemas terminais fixados com TERM=screen
  • Emacs-ish bindings construídos em
  • Fácil de mover e controlar painéis horizontais
  • Quando multiplexar, qualquer terminal ligado pode redimensionar um painel
  • Cons
  • Nenhuma divisão vertical sem patch (excepto no Ubuntu)
  • As divisões de painéis perdem-se quando se desprendem
  • Fazer funcionar o Unicode requer um pouco de fineza e determinação
  • Configuração louca da linha de estado
15
15
15
2015-04-10 18:05:27 +0000

Um profissional para o ecrã: está disponível praticamente fora da caixa em Linux e Solaris. Quando se tem de alternar entre plataformas, é bom não ter a mudança de contexto mental.

tenho a certeza de que pode obter tmux compilado em qualquer plataforma, mas por vezes tem apenas acesso suficiente para fazer uso do ecrã, mas os verdadeiros administradores do sistema não querem realmente adicionar qualquer software que não seja absolutamente necessário.

13
13
13
2012-04-19 17:30:12 +0000

Tenho estado a usar tmux há cerca de 2 dias, pelo que o meu entusiasmo desenfreado por ele ainda não foi temperado por bater em casos de uso irritante.

Enquanto passava pelas habituais dores de crescimento de transição de um programa para outro, fiquei impressionado com várias características positivas, mas a característica que me faz acreditar que nunca mais voltarei ao ecrã é a utilidade do modo copiar-n-colar.

Em screen, não se pode entrar no modo de cópia, rolar novamente no buffer, e depois ir para outra janela.

Em tmux, pode ter várias janelas em simultâneo no modo de cópia com o buffer a rolar de volta para posições diferentes. Além disso, existem múltiplos buffers de cópia. E não é necessário remendar a fonte para obter o movimento do cursor fFtT.

8
8
8
2011-01-06 15:38:55 +0000

As coisas que saio do tmux que não consigo obter facilmente no ecrã são:

  1. fazer separações verticais de painéis
  2. multiplexação, que usamos para emparelhamento remoto e local.
8
8
8
2016-01-17 16:10:36 +0000

Substituí Ecrã GNU por tmux em todos os casos de utilização excepto um, quando preciso de um HyperTerminal equivalente para me ligar às portas série. Como Aaron Toponce observou no seu artigo “Connecting To Serial Null Modems With GNU Screen” , o tmux FAQ declara:

& > ecrã tem suporte de série e telnet; isto é inchado e é pouco provável que seja adicionado ao tmux.

O meu típico tmux caso de uso é criar sessões de desenvolvimento multi-pane e multi-janela em combinação com tmuxinator . Se quiser aprender tmux , recomendo que obtenha o livro de Brian P. Hogan, tmux: Productive Mouse-Free Development .

4
4
4
2017-12-15 22:15:08 +0000

Um dos mantenedores do tmux, Thomas Adam, é também listado como um mantenedor do projecto screen embora apenas toque no código do tmux. Este é um enorme profissional do tmux sobre o ecrã.

3
3
3
2019-01-16 06:25:48 +0000

Há muito tempo que sou um pesado utilizador de Screen, mas utilizo uma versão que modifiquei em 2002. Principalmente porque queria poder ter a janela “next/prev” de ordenação de navegação igual à ordem em que as novas janelas foram criadas, semelhante a um gestor de janelas de azulejo como i3 ou Ion . O comportamento padrão do ecrã é para ‘next’ e ‘prev’ ir por número de janela, de modo que normalmente uma janela ‘new’ (agarrando o menor número disponível) será localizada noutro lugar que não a janela ‘next’ - confuso se não se lembrar dos números. O meu comportamento preferido foi desde então implementado no Tmux como uma bandeira para o comando new-window em 2010 , e a opção renumber-windows em 2012 . A minha correcção Screen, que tentei tornar o mais aceitável possível, incluindo adições de documentação, etc., não gerou qualquer discussão na lista Screen em Julho de 2002 (então “screen@informatik.uni-erlangen.de”, não consigo encontrar arquivos). Na realidade, nem sequer foi reconhecido, mesmo quando o enviei novamente um ano mais tarde.

Desde 2002, “rebaseei” a minha correcção um par de vezes para aplicar a versões mais recentes do Screen. Contudo, quando cheguei à versão 4.3 (2015) notei uma alteração não documentada que quebrou uma das minhas utilizações do ecrã - nomeadamente que ‘coisas’ agora interpolam variáveis de ambiente . Não precisava dessa funcionalidade, e não conseguia perceber como escapar facilmente ao argumento de ‘material’ (para que pudesse enviar texto contendo sinais de dólar), pelo que continuei a utilizar a versão 4.0 (a partir de 2004).

Utilizo as ‘coisas’ do Screen (‘teclas de envio’ no Tmux) numa função Emacs que envia o conteúdo da actual região Emacs para um número de janela específico. Assim, quando estou a escrever código numa linguagem de scripting, abro um intérprete, dou um número especial à janela de interpretação, e depois posso enviar linhas de código da janela do meu editor directamente para a janela do intérprete utilizando esta ligação Emacs. É hacky mas gosto mais do que a solução de Emacs puro , uma vez que também posso interagir com o intérprete na sua janela de ecrã utilizando toques de tecla padrão. É um pouco como uma IDE GUI, mas não tenho de usar o rato nem de olhar para um cursor a piscar.

Outra característica que implementei no meu patch é a capacidade de “marcar” uma janela, e depois reposicionar a janela marcada para ser “seguinte” após a actual. Para mim, esta é uma forma muito mais natural de reordenar janelas do que renumerar; é como o paradigma copiar/colar, ou “drag-and-drop”. (Eu recentemente descobri como fazer isto em i3 também.)

Deverá 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 pudesse ser trabalhada com argumentos de concha estatais. Eu implementei um pequeno script e keybindings para tentar o método “painel marcado”, e funcionou algumas vezes, mas depois o Tmux falhou com “[servidor perdido]”. Depois encontrei o Tmux a falhar, mesmo sem tentar fazer nada de complicado. Aparentemente tem estado a falhar para alguns utilizadores durante alguns anos pelo menos . Por vezes o servidor trava, outras vezes começa a usar 100% do CPU e fica sem resposta. Nunca vi o Screen fazer nenhuma destas duas coisas.

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

Como outros cartazes mencionados, o Tmux tem um modelo de servidor único que eu vejo como o principal inconveniente, particularmente quando o servidor está a falhar. É possível contornar isto especificando uma tomada separada para cada “sessão”. Ainda assim, prefiro o padrão de um servidor por sessão do Screen, que parece ligeiramente mais elegante.

Trabalhar com o código Screen, em 2002, foi educativo e agradável para mim. Curiosamente, para todas as suas características adicionais, o Tmux tem cerca de 25% menos linhas de código do que o Screen (30k vs 40k). Notei que o Tmux utiliza muitas estruturas de dados em árvore e lista, que foram ligeiramente difíceis para mim de compreender. O Screen parecia preferir as arrays.

Como entendo, porque a interface terminal Unix é tão estável, há pouca necessidade de que o Screen ou código Tmux se adapte às mudanças no sistema operativo subjacente. Estes programas não têm realmente actualizações de segurança como browsers ou servidores web ou mesmo a shell. Não notei quaisquer problemas na execução da minha versão personalizada de Screen, actualizada pela última vez em 2004 (excepto a necessidade de adicionar alguns ficheiros de configuração para evitar que Systemd apague o socket ; estes ficheiros são tipicamente parte do pacote de distribuição de qualquer forma). Talvez pudesse apenas contornar os problemas que encontrei no Tmux, executando uma versão do Tmux de antes de este começar a falhar. Claro que, se um número suficiente de utilizadores fizer isto, então não será muito bom para novos utilizadores, pois isso significa que menos peritos estarão à procura de bugs nas últimas versões oficiais destes programas. No entanto, é difícil motivar-me a mudar para um produto que é instável para mim (o último Tmux) ou que carece de certas características que eu quero (ecrã padrão).

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

2
2
2
2012-06-21 15:27:36 +0000

Eu diria que a disponibilidade do ecrã é a sua força, mas o seu sistema de janelas não é tão fácil de manusear como o tmux ’s. Devo dizer que uso gnu-screen a maior parte do tempo actualmente e como resultado tenho bastantes separadores de terminal em vez de janelas de ecrã.

@Jed Schneider: É possível obter separações verticais comCtrl+A e depois | (barra vertical).