É possível definir o título do Gnome Terminal como "usuário @ host" para qualquer host ao qual estou conectado?

22

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

Naftuli Kay
fonte

Respostas:

20

Sim. Aqui está um exemplo para o bash usando o PS1 que deve ser independente da distribuição:

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='\[\033]2;\u@\h\007\]'

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

Observe também que existem várias maneiras de definir o título de um xterm, dependendo do programa do terminal que você está usando e do shell. Por exemplo, se você estiver usando o Konsole do KDE, poderá substituir a configuração do título em Settings-> Configure Profiles-> Edit Profile-> Tabse definir as configurações Tab title formate Remote tab title format.

Caixa de diálogo de configurações da barra de título do Konsole

Além disso, você pode querer conferir:

TrinitronX
fonte
Então, preciso definir isso em todos os servidores aos quais estou conectando ou em minha própria máquina local?
Naftuli Kay
@TKKocheran: Você precisa fazer isso em todas as máquinas em que está executando um shell. Se você deseja fazer isso apenas para logins remotos, insira \hesse prompt apenas se $SSH_CLIENTnão estiver vazio.
Gilles 'SO- stop be evil'
@TK: Sim, você precisará definir isso em todos os servidores aos quais você se conecta. A variável PS1 é local no shell atual (mesmo em um host remoto), não no programa do terminal (ou seja: gnome-terminal) .
TrinitronX 31/05
Eu assumo que isso se aplicará de maneira diferente em servidores que não executam o Debian. Você pode editar sua resposta para fornecer servidores executando, digamos, derivados do Fedora / Red Hat?
Naftuli Kay
1
@TK: Eu testei isso usando SSH para vários anfitriões de um 11,04 máquina Ubuntu ... Assim, a barra de título foi definido corretamente lá ... Se isso não funcionar, tente adicionar esta sequência para a frente: \[\e]2;\u@\h\a. (Também editei a minha resposta com que info)
TrinitronX
3

Aqui está uma versão do script SSH bash que eu uso, que define o título e o prompt de comando do servidor remoto sem fazer alterações 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 nome de usuário hostname

Austin Beer
fonte
Eu duvido que isso funciona quando iniciar outra sessão de festa após o login ssh embora (por exemplo, quando usando a tela)
Laurens Rietveld
1

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

comp@home$ cat /usr/bin/ssh
#!/bin/bash    
echo -ne "\033]0;${1}\007"
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.

Yuriy Mankovskiy
fonte
As soluções de alias não seriam melhores do que renomear comandos para algo fora do padrão?
X Tian
Isso funciona bem para mim, também gnome-terminal. ~/bintem prioridade no meu caminho, então coloquei seu script no meu ~/bin/ssh. A última linha chama explicitamente para /usr/bin/ssh. Dessa forma, outros usuários ainda usam o padrão sshquando estão conectados à máquina e (como nossos diretórios pessoais estão no servidor, contas LDAP) recebo a funcionalidade em qualquer máquina em que estiver conectado.
Gauthier
Boa chamada, @Gauthier. Parece uma solução melhor.
Yuriy Mankovskiy 1/11/16
0

esta é a versão 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'
Pasquale
fonte