SSH no SSH exibe o nome da máquina errada na barra de título do xterm

4

Estou trabalhando em um sistema distribuído que se conecta a vários servidores de uma só vez. Nada é iniciado manualmente no programa em que estou trabalhando, mas é como recriar o erro manualmente.

Eu inicio um xterm e depois o SSH em uma máquina como esta:

ssh machine_1

Lá eu inicio outro xterm no primeiro xterm assim:

xterm &

Em seguida, a barra de título da nova janela xterm é algo como "username (on machine_1)"

Neste xterm eu SSH para outra máquina como esta:

ssh machine_2

Mas a barra de título permanece assim: "nome de usuário (na máquina_1)"

mesmo estando logado em machine_2. Eu quero dizer "username (em machine_2)". Remover completamente os parênteses também seria bom.

Eu tentei o xtermset, mas isso não afeta os parênteses.

    
por Martin 24.09.2012 / 14:25

1 resposta

1

O xterm ou o shell na máquina_1 está configurado para configurar o título do terminal para conter o nome da máquina. Configure seu shell em machine_2 para configurar o título do terminal para conter o nome da máquina. Você também desejará certificar-se de que o shell em machine_1 reconfigure o título quando a sessão ssh for finalizada. A maneira usual de fazer isso é fazer o shell redefinir o título do terminal sempre que ele exibir um prompt. Isso tem o benefício adicional de redefinir o título do terminal para algo sensato se um aplicativo de modo de texto em tela cheia o define enquanto está em execução.

Você pode definir o título de um xterm exibindo a sequência de escape \e]2;my title here\a em que \e é um caractere de escape ( 3 ) e \a é um caractere de campainha ( ~/.bashrc7 ). Inclua esta sequência no seu prompt de shell. Para o bash , insira uma linha como esta em \[…\] :

PS1="\[3]2;xterm on $HOSTNAME\a\]$PS1";;

A pontuação da barra invertida promptvars informa que o conteúdo tem uma largura de 0 (se você deixar os colchetes, a exibição ficará distorcida).

Para mais um título sofisticado que muda após cada comando, você pode incluir substituições de comando e variável na string de prompt se você definir a opção precmd .

Em zsh, defina o título da preexec function , que é executado antes de cada solicitação.

precmd () {
  print -n "\e]2;xterm on $HOSTNAME in $PWD\a"
}

Enquanto você está nisso, você pode definir o título de %code% para conter o nome do comando em execução. Aqui está uma maneira simples que não reage muito bem a caracteres não imprimíveis no comando:

preexec () {
  print -nr $'\e]2;'"xterm on $HOSTNAME running $2"$'\a'
}
    
por 25.09.2012 / 02:25