¿Es posible establecer el título de Gnome Terminal en "usuario @ host" para cualquier host al que esté conectado?

22

Me gustaría establecer el título del terminal para user@hostque pueda decir fácilmente a qué máquina estoy conectado desde el título de la ventana. ¿Hay alguna manera de hacer esto desde SSH o desde la Terminal de GNOME?

Naftuli Kay
fuente

Respuestas:

20

Sí. Aquí hay un ejemplo para bash usando PS1 que debería ser independiente de la distribución:

Específicamente, la secuencia de escape \[\e]0; __SOME_STUFF_HERE__ \a\]es de interés. He editado esto para que se establezca en una variable separada para mayor claridad.

# 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

También tenga en cuenta que puede haber muchas formas de configurar el título de un xterm, según el programa de terminal que esté utilizando y el shell. Por ejemplo, si está utilizando Konsole de KDE, puede anular la configuración del título yendo a Settings-> Configure Profiles-> Edit Profile-> Tabsy configurando la configuración Tab title formaty Remote tab title format.

Diálogo de configuración de la barra de título de Konsole

Además, es posible que desee consultar:

TrinitronX
fuente
Entonces, ¿debo configurar esto en todos los servidores a los que me estoy conectando o en mi propia máquina local?
Naftuli Kay
@TKKocheran: debe hacer esto en todas las máquinas donde ejecuta un shell. Si solo desea hacerlo para inicios de sesión remotos, ingrese \hese aviso solo si $SSH_CLIENTno está vacío.
Gilles 'SO- deja de ser malvado'
@TK: Sí, deberá configurar esto en todos los servidores a los que se conecte. La variable PS1 es local para su shell actual (incluso en un host remoto), no para el programa de terminal (es decir: gnome-terminal) .
TrinitronX
Supongo que esto se aplicará de manera diferente en los servidores que no ejecutan Debian. ¿Puede editar su respuesta para proporcionar servidores que ejecutan, digamos, derivados de Fedora / Red Hat?
Naftuli Kay
1
@TK: He probado esto mediante SSH a varios anfitriones de una máquina de Ubuntu 11.04 ... Así que la barra de título se estableció correctamente allí ... Si no funciona, trate de añadir esta secuencia a la parte delantera: \[\e]2;\u@\h\a. (También edité mi respuesta con esa información)
TrinitronX
3

Aquí hay una versión del script SSH bash que uso que establece el título del servidor remoto y el símbolo del sistema sin realizar ningún cambio en el 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"

Puede invocarlo llamando a ./my_ssh.sh username hostnamename

Austin Beer
fuente
Sin embargo, dudo que esto funcione al comenzar otra sesión de bash después del inicio de sesión ssh (por ejemplo, cuando se usa la pantalla)
Laurens Rietveld
1

Lo siguiente funciona para mí (probablemente solo en gnome-terminal):

comp@home$ cat /usr/bin/ssh
#!/bin/bash    
echo -ne "\033]0;${1}\007"
ssh_bkup "$@"

Donde el comando ssh_bkup es simplemente 'ssh' básico con un nombre cambiado, que se llama justo después de que el comando echo cambia el título del terminal actual.

Yuriy Mankovskiy
fuente
¿No serían mejores las soluciones de alias que renombrar comandos a algo no estándar?
X Tian
Esto funciona bien para mí, también gnome-terminal. ~/bintiene prioridad en mi camino, así que puse tu script en mi ~/bin/ssh. La última fila llama explícitamente a /usr/bin/ssh. De esta manera, otros usuarios aún usan el estándar sshcuando inician sesión en esa máquina y (dado que nuestros directorios principales están en el servidor, cuentas LDAP) obtengo la funcionalidad en cualquier máquina en la que haya iniciado sesión.
Gauthier
Buena llamada, @Gauthier. Parece una mejor solución.
Yuriy Mankovskiy
0

esta es la versión 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
fuente