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


18

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

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

mas toda vez que eu ssh em outra máquina remota, o título será modificado pelo host (pelo qual não estou particularmente incomodado). Mas depois que eu 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 do 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 on-the-fly, mas apenas proibir a sessão SSH de modificar o que editei.

Respostas:


6

Não sei sobre os títulos das janelas, mas tenho tentado fazer com que meu sistema faça algo ao encerrar uma sessão ssh - na verdade, depois de encerrar uma sessão ssh. Em resumo: 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 nomeado sshque tenha precedência /usr/bin/sshem seu $ PATH que contenha 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, mantendo a cabeça no mínimo.

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

  3. Tem PROMPT_COMMANDavaliar a saída history. Basicamente, uma abordagem mais genérica e mais feia para 1.


basicamente, eu apenas escrevi um script simples para pegar o título atual e salvá-lo antes da sessão SSH, e depois recuperá-lo.
nye17

4
@ nye17 Você pode postar o script de solução que usou?
Reg Mem

Postei meu script de solução abaixo. deve ser uma correspondência aproximada do que o @ nye17 fez. unix.stackexchange.com/a/341277/112190
phyatt

7

Solução: adicione algumas funções ~ / .bashrc para fazer algo após os comandos 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 edições 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.


ligeiramente impreciso dizer revertque você não se verificar para ver o que era antes ... se você consultado e salvou o valor anterior tho ;-)
nhed

4

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

Por exemplo:

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

1. prompt_command não tem nada a ver com o título da janela do seu terminal, certo? Eu tenho o prompt_command configurado, mas apenas para o prompt. 2. Ainda preciso de um mecanismo para lembrar e ativar minha configuração local após sair do registro ssh.
nye17

O comando prompt simplesmente emite a sequência de escape necessária para o seu terminal renomear sua barra de título. :)
Restabeleça Monica

mas também quero a liberdade de renomear qualquer terminal que desejar, em vez de ter todas as sessões com o mesmo nome. Na prática, eu basicamente edito o manual do título do terminal e espero que o terminal continue com o título fixo, mesmo após o login / logout do SSH. Isso faz sentido?
nye17

1
Então, coloque o título desejado em uma variável e faça a saída.
Ignacio Vazquez-Abrams

Se você usar esta sequência de escape do terminal para definir um título nulo (por exemplo, export PROMPT_COMMAND="printf '\e]0;\7\n'"), seu emulador de terminal poderá definir o título da janela como achar melhor. Quando você faz o ssh para um host remoto que define o título do terminal, seu emulador de terminal mostra esse título e, quando você efetua logout, ele volta a usar seu próprio título. Pelo menos, é assim que o aplicativo macOS Terminal funciona.
Claymareact #

3

Adicione estas linhas a ~ / .bashrc

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"

    ;;
*)
    ;;
esac

funciona bem com linux baseados em debian


1
Porém

Geralmente funciona melhor em PROMPT_COMMANDvez de usar PS1, pois você não precisa incluir o \[ \]bracketing e pode eliminar algumas aspas.
Chris Página

2

Uma solução é alterar a variável terminal para vt100 antes do ssh'ing, por exemplo, executar

export TERM=vt100

Isso funciona porque, geralmente, os scripts de inicialização examinam a variável terminal e apenas o alteram, sendo xterm. Você perde telas, cores alternativas e talvez alguns outros recursos interessantes que você pode ou não apreciar.

Se você deseja manter o terminal local como xterm, alias ssh para alterar a variável do terminal rapidamente, como

alias ssh='TERM=vt100 /usr/bin/ssh'

isso muda a maneira como as coisas são exibidas. cores não são mostradas
npk 24/09

0

Corrigi esse problema adicionando-o ao meu PS1 no meu arquivo .bashrc.

\[\e]2;\u@\H:\w\a\]

Portanto, toda a linha se parece com isso (eu personalizei meu PS !:

export PS1='\[\e]2;\u@\H:\w\a\]\n($LOGNAME@$HOSTNAME) \t\n[$PWD]: '

Espero que ajude os outros.


Se você usar esta sequência de escape do terminal para definir um título nulo (por exemplo, export PS1='\[\033]0;\007\]\h:\W \u\$ '), seu emulador de terminal poderá definir o título da janela como achar melhor. Quando você faz o ssh para um host remoto que define o título do terminal, seu emulador de terminal mostra que, e quando você se desconecta, ele voltará a usar seu próprio título. Pelo menos, é assim que o aplicativo macOS Terminal funciona.
Clayma #

0

Outras respostas não funcionariam para mim quando eu saísse do SSH, mas me aproximaram. A adição de renomeação automática do setw funciona quando eu saio da sessão ssh remota, por isso renomeia automaticamente e não precisa mais sair da janela para redefinir. [Jan. 2018 - Debian 9]

ssh() {
tmux rename-window "$*"
command ssh "$@"
tmux setw automatic-rename
}
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.