É possível definir o título do Gnome Terminal como “user @ host” para qualquer host que eu esteja conectado?

22

Gostaria de definir o título do terminal como user@host para que eu possa identificar com facilidade a qual máquina estou conectado no título da janela. Existe uma maneira de fazer isso a partir do SSH ou do Terminal GNOME?

    
por Naftuli Kay 31.05.2011 / 22:50

4 respostas

20

Sim. Aqui está um exemplo de bash usando o PS1 que deve ser distro-agnóstico:

Especificamente, a sequência de escape \[\e]0; __SOME_STUFF_HERE__ \a\] é de interesse. Eu editei isso para ser definido em uma variável separada para maior clareza.

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
        # We have color support; assume it's compliant with Ecma-48
        # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
        # a case would tend to support setf rather than setaf.)
        color_prompt=yes
    else
        color_prompt=
    fi
fi

TITLEBAR='\[\e]0;\u@\h\a\]'
# Same thing.. but with octal ASCII escape chars
#TITLEBAR='\[3]2;\u@\h
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
        # We have color support; assume it's compliant with Ecma-48
        # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
        # a case would tend to support setf rather than setaf.)
        color_prompt=yes
    else
        color_prompt=
    fi
fi

TITLEBAR='\[\e]0;\u@\h\a\]'
# Same thing.. but with octal ASCII escape chars
#TITLEBAR='\[3]2;\u@\h%pre%7\]'

if [ "$color_prompt" = yes ]; then
    PS1="${TITLEBAR}\[3[01;32m\]\u@\h\[3[00m\]:\[3[01;34m\]\W\[3[00m\]\$ "
else
    PS1="${TITLEBAR}\u@\h:\W\$ "
fi
unset color_prompt force_color_prompt
7\]' if [ "$color_prompt" = yes ]; then PS1="${TITLEBAR}\[3[01;32m\]\u@\h\[3[00m\]:\[3[01;34m\]\W\[3[00m\]\$ " else PS1="${TITLEBAR}\u@\h:\W\$ " fi unset color_prompt force_color_prompt

Observe também que pode haver muitas maneiras de definir o título de um xterm, dependendo de qual programa de terminal você está usando e de qual shell. Por exemplo, se você estiver usando o Konsole do KDE, poderá substituir a configuração de título acessando Settings - > Configure Profiles - > Edit Profile - > Tabs e definindo a Tab title format e Remote tab title format configurações.

Alémdisso,vocêpodequererconferir:

  • este "Como alterar o título de um xterm" FAQ para outros shells
  • esta "Prompt Magic" dica para uma boa referência das sequências de escape esse trabalho em bash.
  • este Bash Prompt HOWTO para obter uma referência sobre sequências de escape de cores ANSI.
por 31.05.2011 / 23:08
3

Aqui está uma versão do script bash SSH que eu uso que define o título do servidor remoto e o prompt de comando sem fazer nenhuma alteração no servidor remoto.

my_ssh.sh:

#!/bin/bash
SETTP='MY_PROMPT="$HOSTNAME:$PWD\$ "'
SETTP="$SETTP;"'MY_TITLE="\[\e]0;$HOSTNAME:$PWD\a\]"'
SETTP="$SETTP;"'PS1="$MY_TITLE$MY_PROMPT"'
ssh -t $1@$2 "export PROMPT_COMMAND='eval '\''$SETTP'\'; bash --login"

Você pode invocá-lo chamando ./my_ssh.sh username hostname

    
por 08.06.2012 / 20:40
1

O seguinte funciona para mim (provavelmente apenas no gnome-terminal):

comp@home$ cat /usr/bin/ssh
#!/bin/bash    
echo -ne "3]0;${1}
comp@home$ cat /usr/bin/ssh
#!/bin/bash    
echo -ne "3]0;${1}%pre%7"
ssh_bkup "$@"
7" ssh_bkup "$@"

Onde o comando ssh_bkup é apenas básico 'ssh' com um nome alterado, que é chamado logo após o comando echo alterar o título do terminal atual.

    
por 18.06.2015 / 15:46
0

esta é a versão do alias

SETTP='MY_PROMPT="$HOSTNAME:$PWD\$ "'
SETTP="$SETTP;"'MY_TITLE="\[\e]0;$HOSTNAME:$PWD\a\]"'
SETTP="$SETTP;"'PS1="$MY_TITLE$MY_PROMPT"'
SETPC="export PROMPT_COMMAND='eval '\''$SETTP'\'; bash --login"

alias myssh='function _myssh(){ ssh -t $1@$2 $SETPC; };_myssh'
    
por 04.12.2014 / 14:50