Correção do título do terminal após o log remoto do SSH para outra máquina

17

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

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

mas todas as vezes depois que eu ssh para outra máquina remota, o título será modificado pelo host (pelo qual não estou particularmente incomodado). Mas depois que eu sair da conexão, o título modificado permanece. Existe uma maneira de corrigir isso? essencialmente eu quero um título fixo para meus terminais quando operando localmente.

Eu principalmente uso o terminal e 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 on-the-fly, mas apenas proibir a sessão SSH de modificar o que eu editei.

    
por nye17 15.06.2012 / 03:44

7 respostas

6

Eu não sei sobre os títulos das janelas, mas tenho tentado fazer com que o meu sistema faça alguma coisa ao finalizar uma sessão ssh - na verdade, depois de 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 ssh que tem precedência sobre /usr/bin/ssh em 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 do efetivo binário ssh ser executado, enquanto mantém a sobrecarga no mínimo.

  2. Escreva um patch contra as fontes SSH de sua escolha para fornecer um hook de limpeza que execute um comando shell passado por meio de uma linha de comando ou alguma configuração. É isso que queremos.

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

por 15.06.2012 / 14:06
4

Solução: adicione algumas funções ~ / .bashrc para fazer algo após comandos ssh e su

function title()
{
   # change the title of the current window or tab
   echo -ne "3]0;$*
# 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()
7" } 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 as edições em ~ / .bashrc

Exemplo:

function title()
{
   # change the title of the current window or tab
   echo -ne "3]0;$*
# 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()
7" } 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 }

Espero que ajude.

    
por 30.01.2017 / 20:02
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 linuxes baseados no debian

    
por 19.08.2012 / 11:08
2

Configure o arquivo de ponto do shell local (por exemplo, $PROMPT_COMMAND in ~/.bashrc ) para definir o título do terminal adequadamente, usando o mesmo mecanismo.

Por exemplo:

export PROMPT_COMMAND="printf '\e]0;bash\n'"
    
por 15.06.2012 / 04:43
1

Uma solução é mudar a variável terminal para vt100 antes de ssh'ing, e. correr

export TERM=vt100

Isso funciona porque geralmente os scripts de inicialização olham para a variável terminal e apenas mudam o título para xterm. Você perde telas alternativas, cores e talvez algumas outras características que você pode ou não apreciar.

Se você quiser manter o terminal local como xterm, alias ssh para alterar a variável de terminal na hora, como

alias ssh='TERM=vt100 /usr/bin/ssh'
    
por 05.08.2014 / 16:08
0

Eu consertei esse problema adicionando isso ao meu PS1 no meu arquivo .bashrc.

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

Portanto, toda a linha fica assim (eu personalizei meu PS!:

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

Espero que ajude os outros.

    
por 03.12.2014 / 19:26
0

Outras respostas não funcionariam para mim quando eu saísse do SSH, mas me aproximasse. A adição de renomeação automática setw 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
}
    
por 27.01.2018 / 20:50