Corrija o título do terminal após o registro remoto SSH em outra máquina

Corrija o título do terminal após o registro remoto SSH em outra máquina

agora estou usando um código perl de uma linha para alterar os títulos das minhas barras de terminal,

print("\e]0;@ARGV\7");

mas toda vez que eu fizer ssh para outra máquina remota, o título será modificado pelo host (com o qual não estou particularmente incomodado). Mas depois que saio da conexão, o título modificado permanece. Existe uma maneira de corrigir isso? essencialmente, quero um título fixo para meus terminais ao operar localmente.

Eu uso principalmente o terminal e o terminador xfce no CentOS ou no Debian. Obrigado.

EDITAR

Outra sutileza é que, em vez de ter todos os terminais com o mesmo nome, eu preferiria ter a liberdade de editar seus títulos dinamicamente, mas apenas proibir a sessão SSH de modificar o que editei.

Responder1

Solução: adicione algumas funções ~/.bashrc para fazer algodepoiscomandos ssh e su

function title()
{
   # change the title of the current window or tab
   echo -ne "\033]0;$*\007"
}

function ssh()
{
   /usr/bin/ssh "$@"
   # revert the window title after the ssh command
   title $USER@$HOST
}

function su()
{
   /bin/su "$@"
   # revert the window title after the su command
   title $USER@$HOST
}

Nota: reinicie o bash após editar em ~/.bashrc

Exemplo:

# title is "user1@boxA"
ssh boxB  # auto changes title while on boxB to "user1@boxB"
exit
# title returns back to "user1@boxA" because of our title call in ssh()
su - user2 # auto changes title while switched user to user2: "user2@boxA"
exit
# title returns back to "user1@boxA" because of our title call in su()

Espero que ajude.

Responder2

Não sei sobre títulos de janelas, mas tenho tentado fazer com que meu sistema faça algo ao encerrar uma sessão ssh - na verdade, após encerrar uma sessão ssh. Resumindo: não funciona assim. Basicamente você tem três opções:

  1. Escreva um wrapper em torno do ssh, ou seja, um script de shell executável chamado sshque tenha precedência /usr/bin/sshno seu $PATH que contém a linha exec /usr/bin/ssh $@em algum lugar no meio. Isso permite que seu shell faça algumas coisas antes e depois da execução do binário ssh efetivo, enquanto mantém a sobrecarga no mínimo.

  2. Escreva um patch nas fontes SSH de sua escolha para fornecer um gancho de limpeza que executa um comando shell passado via linha de comando ou alguma configuração. É isso que queremos.

  3. Avaliar PROMPT_COMMANDa saída de history. Basicamente, uma abordagem mais genérica e mais feia para 1.

Responder3

Configure seu dotfile shell local (por exemplo, $PROMPT_COMMANDem ~/.bashrc) para definir o título do terminal apropriadamente, usando o mesmo mecanismo.

Por exemplo:

export PROMPT_COMMAND="printf '\e]0;bash\7\n'"

Responder4

Outras respostas não funcionariam para mim quando eu saísse do SSH, mas me aproximaram. Adicionar setw automatic-rename funciona quando eu saio da sessão ssh remota, para que ele renomeie automaticamente e não precise mais sair da janela para redefinir. [Jan. 2018 - Debian 9]

ssh() {
tmux rename-window "$*"
command ssh "$@"
tmux setw automatic-rename
}

informação relacionada