GNU Screen e Tmux: dicas e truques

8

Portanto, sou um grande fã de multiplexadores como GNU Screen e Tmux , mas mesmo usando o Screen há anos, ainda reconheço que há muitas coisas que não sei (e só uso o Tmux por alguns meses, é pior )

Quais configurações, dicas e truques você usa nesses softwares (ambos ou em cada um, não importa)?

Eu uso isso como minha configuração de tela (acho que adaptei isso do padrão do Ubuntu screenrc):

shell -$SHELL
startup_message off
defscrollback 1000
hardstatus alwayslastline '%{= wk}%?%-Lw%?%{r}(%{k}%n*%f%t%?(%u)%?%{r})%{k}%?%+Lw%?%?%= %m/%d %C%A'
activity ''
termcapinfo xterm* 'hs:ts=\\E]2;:fs=\\007:ds=\\E]2;screen\\007'

É uma configuração simples para manter a barra de status exibida com algumas cores, mas tenho certeza de que há mais coisas que posso fazer com a tela e o Tmux e gostaria muito de saber.

coredump
fonte
zombie qrmantém a janela aberta mesmo que o processo esteja inoperante e permite qfechá-la ou rressuscitar o processo. Útil para verificação de software.
Ency

Respostas:

4

Isso pode ser um pouco simples para esse público, mas achei útil adicioná-lo ao final do .profile, para que, quando eu me conectar remotamente via ssh, eu leio o MOTD e depois mude para a tela.

if [ -n "$SSH_TTY" ]
then
        read -p "Press <ENTER> to continue." enterkey
        exec /usr/bin/screen -D -R
fi
bgvaughan
fonte
3

Eu tenho isso no meu .bashrc. Se você não estiver executando a tela, essa função chama sshnormalmente como executada. Se você estiver executando a tela interna (e não alterou o padrão $TERM), primeiro define o nome da janela como host remoto (juntamente com quaisquer parâmetros opcionais). É muito útil acompanhar as conexões remotas quando você tem muitas abertas, o que é frequente em nossa linha de trabalho, eu acho.

function ssh () {
if [ $TERM = "screen-bce" ]
    then
    screen -X title "$*" 
    /usr/bin/ssh $*
else
    /usr/bin/ssh $*
fi
}

Eu também uso bind ^A windowlist -bpara facilitar o acesso à lista de janelas (basta tocar em Ctrl-A duas vezes).

Suporte fácil a ssh-agent para todas as janelas:

setenv SSH_AUTH_SOCK $HOME/.screen-ssh-agent
screen 10 ssh-agent -a $SSH_AUTH_SOCK $SHELL

Em qualquer janela, você adiciona o ssh-add apenas uma vez ao iniciar uma nova sessão.

Por fim, ao conectar-se a uma sessão de tela remota de dentro de outra sessão de tela, você pode usar screen -x -e ^Vvpara definir a sequência de controle para CTRL-V (por exemplo). Isso evita que seja necessário encadear CTRL-As para controlar a sessão remota.

Eduardo Ivanec
fonte
0

Você pode considerar Byobu , que é essencialmente uma coleção de centenas de dicas, truques, configurações, atalhos de teclado, scripts de status, e as melhores práticas orientadas ao redor screene tmux.

Dustin Kirkland
fonte
0

Mesmo que comecei a usar o tmux para painéis, ainda uso a tela para multiplexar as janelas. O tmux supostamente tem essa funcionalidade, mas a troca de painéis de uma janela para outra não é intuitiva para mim, nem dois visualizadores do tmux conectados podem exibir janelas diferentes no mesmo daemon (comportamento da tela-x), portanto, a solução da tela-em-tmux. Esses são dois vínculos do tmux.conf que levaram mais tempo para descobrir e eu uso todos os dias.

O primeiro, vincular M (ctrl-b shift-M), alterna o tmux entre o seletor de painel do mouse e o realce / cópia do mouse. Você ainda pode copiar / colar no modo de seleção de painel, mas deve manter a tecla Shift (e se adquirir o hábito disso, copiar / colar em qualquer outro aplicativo o deixará um pouco infeliz, deixe-me dizer). A macro também torna visualmente óbvio qual modo está selecionado no momento.

bind M set mouse-select-pane \; if '[ "`tmux show -v mouse-select-pane`"= "on" ]' "set status-bg cyan \; set pane-active-border-bg cyan" "set status-bg green \; set pane-active-border-bg default"

O segundo, vincular CL (ctrl-b ctrl-l), pegará qualquer layout de 4 painéis e o transformará no meu layout preferido. Muitas vezes, descobrirei que pressionei ctrl-d em um painel que pensei que estava dentro da tela para fechá-lo, mas em vez disso não havia sessão de tela e ele fechou o painel. Como meu layout é v-split, h-split, v-split e algum redimensionamento, se eu fechar acidentalmente uma janela que não seja a última, torna-se doloroso (sem trocadilhos) fechar os painéis intermediários entre os que eu preciso recriar e o último, recrie e redimensione os painéis e, finalmente, reconecte todas as sessões de tela que eu possa ter desanexado ao matar painéis. Com essa macro, posso criar um novo painel, ctrl-b {(a ligação padrão para o painel de troca -U) até que ele retorne à ordem correta, depois pressione a macro e tudo volte ao normal. Meu layout preferido provavelmente não é o mesmo que o seu,list-windows comando para obter uma sequência de layout como a abaixo.

bind C-L select-layout a18e,155x94,0,0[155x18,0,0,6,155x75,0,19{81x75,0,19,31,73x75,82,19[73x22,82,19,32,73x52,82,42,33]}]

Se isso é ingênuo demais para o seu gosto, sempre existe o tmuxinator para gerenciamento de painéis.

Andrew Domaszek
fonte