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?
gnu-screen
tmux
Alison R.
fonte
fonte
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.tmux
lidarhistory
corretamente?Respostas:
Algumas das (grandes) razões que eu prefiro
tmux
sobrescreen
:tmux
pode ser executado a partir de um shelltmux command [args]
. Isso torna muito fácil a criação de scripts, além de facilitar a execução de comandos complexos.screen
define 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,tmux
controla 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 digitarsudo emacs /etc/somefile
. Enquanto o sudo estiver solicitando sua senha, o nome da janela será "sudo", mas depois que você fizer isso esudo
iniciaremacs
, 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 entradadialog
; 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.tmux
si. 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.tmux
parece 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
tmux
tentar.fonte
( 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
TERM=tmux
Lento - não sei por que, mas as teclas parecem atrasadasNão há mais problemas com lentidãoNão é possível mover um painel de uma janela para outraCorrigido com ojoin-pane
comandoTela GNU
TERM=screen
fonte
^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
.tmux
é péssimovim
, 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>
entrarvim
.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.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.
fonte
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.
fonte
As coisas que saio do tmux e não fico facilmente na tela são:
fonte
-x
acladd
screen
desde a versão 4.2, lançada em 2014. Muitas distribuições lançam versões muito antigas, principalmente a Apple.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:
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 .
fonte
cu
Chamar outro sistema ? Tty serial mais simples que a tela , mas leve e útil!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 "[email protected]" 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ários há alguns 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.
fonte
Um dos mantenedores do tmux, Thomas Adam, também está listado como mantenedor do
screen
projeto, embora ele apenas toque no código do tmux. Este é um grande profissional do tmux over screen.fonte
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 tmux . Devo dizer que uso o gnu-screen na 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).
fonte