Existe uma maneira fácil de "reiniciar" um painel tmux?

48

Suponha que eu tenho uma tmuxjanela (1.7) dividida da seguinte maneira:

 ________________________
|           1            |
|                        |
|-----------+------------|
|     2     |      3     |
|___________|____________|

Agora, os tamanhos verticais foram personalizados, portanto não é de forma alguma um dos layouts padrão.

Ocasionalmente, quando um programa fica preso ou quando você reinicia uma máquina à qual você se conectou ssh, o painel "trava". Ou seja, nada além de kill-paneparece funcionar.

No entanto, como não há maneira fácil de reconstruir a configuração de divisão acima depois que o painel 1 for kill-paned, eu gostaria de "reiniciá-lo".

0xC0000022L
fonte

Respostas:

81

Olhando para o manual, o comando respawn-paneme atingiu, mas acabou que isso não funcionou. Lendo mais de perto, descobriu-se que essa respawn-pane -kera a resposta, pois mataria o comando em execução.

Dessa forma, um painel pode ser "reiniciado" e gerado novamente no local.

Então <prefix>+ :e, em seguida, digite respawn-pane -ke pressioneEnter

0xC0000022L
fonte
4
Ou use sem -kse você criou o painel no remain-on-exitmodo e matou o comando sozinho.
Peterph
você foi gerado de novo, amém
cambunctious
4

Na verdade, existe uma maneira de reconstruir um layout - list-windowsfornece uma descrição do layout para todas as janelas de uma sessão e select-layoutpode resumir a análise da string e definir o layout de forma apropriada (consulte select-layouta página de manual tmux(1)).

Quanto ao seu problema com o ssh - os servidores ssh devem fechar a conexão assim que o sistema for desligado (embora eu tenha visto algumas distribuições Linux que de alguma forma atrapalhem o comportamento adequado, não desligando o daemon ssh e executando as sessões corretamente) - se for esse o caso, consulte a ESCAPE CHARACTERSseção (e outros locais que se referem a ele) o ssh(1)caractere de escape seguido por .(um ponto) encerra forçosamente a conexão no lado do cliente. É claro que não ajuda se você apenas gerou o painel com a sshexecução, mas se você enfrentar o problema com mais frequência, talvez prefira executar um shell no painel e chamar ssh a partir dele.

peterph
fonte
Votei sua resposta porque agrega valor. Mas eis por que os caracteres de escape não são necessariamente uma boa idéia: usar uma sessão ssh para conectar-se a uma sessão tmux que possui conexões ssh abertas. De repente, você precisa pensar em como enviar o caractere de escape além da primeira conexão ssh para alcançar o (s) interior (es). E, btw, eu costumo executar ssh a partir de um shell.
0xC0000022L
1
Praticamente a mesma coisa que quando você está executando sessões tmux aninhadas. Você tem caracteres de escape diferentes na sessão externa e interna (seja ssh ou tmux one) ou apenas envia o caractere de escape duas vezes - o que faz com que ele seja único na sessão aninhada (comportamento por fio para ssh, configurável no tmux).
Peterph