Se corrigió el título del terminal después del registro remoto SSH en otra máquina

18

en este momento estoy usando un código perl de una línea para cambiar los títulos de mis barras de terminales,

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

pero cada vez que ssh a otra máquina remota, el título será modificado por el host (por lo cual no estoy particularmente molesto). Pero después de salir de la conexión, el título modificado permanece. ¿Hay alguna manera de arreglar esto? esencialmente quiero un título fijo para mis terminales cuando opere localmente.

Principalmente uso el terminal y terminador xfce en CentOS o Debian. Gracias.

EDITAR

Otra sutileza es que, en lugar de tener todas las terminales con el mismo nombre, preferiría tener la libertad de editar sus títulos sobre la marcha, pero solo prohibir que la sesión SSH modifique lo que edité.

nye17
fuente

Respuestas:

6

No sé acerca de los títulos de las ventanas, pero he estado intentando que mi sistema haga algo al finalizar una sesión ssh, en realidad, después de terminar una sesión ssh. En resumen: no funciona así. Básicamente tienes tres opciones:

  1. Escriba un contenedor alrededor de ssh, es decir, un script de shell ejecutable llamado sshque tenga prioridad sobre /usr/bin/sshsu $ PATH que contiene la línea exec /usr/bin/ssh $@en algún lugar en el medio. Esto le permite hacer que su shell haga algunas cosas antes y después de que se ejecute el binario ssh efectivo, manteniendo al mínimo los gastos generales.

  2. Escriba un parche contra las fuentes SSH de su elección para proporcionarle un enlace de limpieza que ejecute un comando de shell que se pasa a través de la línea de comandos o alguna configuración. Eso es lo que queremos.

  3. Tener PROMPT_COMMANDevaluar la salida de history. Básicamente, un enfoque más genérico y más feo para 1.

Bananguin
fuente
Básicamente, acabo de escribir un script simple para tomar el título actual y guardarlo antes de la sesión SSH, luego recuperar el título después.
nye17
44
@ nye17 ¿Puede publicar el script de solución que utilizó?
Reg Mem
Publiqué mi script de solución a continuación. debería ser una coincidencia similar a lo que hizo @ nye17. unix.stackexchange.com/a/341277/112190
phyatt
7

Solución: agregue algunas funciones ~ / .bashrc para hacer algo después de los comandos ssh y su

function title()
{
   # change the title of the current window or tab
   echo -ne "\033]0;$*\007"
}

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 bash después de las ediciones en ~ / .bashrc

Ejemplo:

# 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()

Espero que ayude.

phyatt
fuente
un poco impreciso para decir, revertya que no verifica qué era antes ... si consultó y guardó el valor anterior aunque ;-)
nhed
4

Configure su archivo de puntos de shell local (por ejemplo, $PROMPT_COMMANDen ~/.bashrc) para establecer el título del terminal de manera apropiada, utilizando el mismo mecanismo.

Por ejemplo:

export PROMPT_COMMAND="printf '\e]0;bash\7\n'"
Ignacio Vazquez-Abrams
fuente
1. prompt_command no tiene nada que ver con el título de su ventana de terminal, ¿verdad? Tengo prompt_command configurado pero solo para el prompt. 2. Todavía necesito un mecanismo para recordar y activar mi configuración local después de salir del registro ssh.
nye17
El comando de solicitud simplemente emite la secuencia de escape necesaria para que su terminal cambie el nombre de su barra de título. :)
Vuelva a instalar Mónica
pero también quiero la libertad de cambiar el nombre de cualquier terminal que desee, en lugar de tener cada sesión con el mismo nombre. En la práctica, básicamente edito el manual del título del terminal y espero que el terminal siga teniendo un título fijo incluso después de iniciar / cerrar sesión SSH. ¿Tiene sentido?
nye17
1
Entonces, coloque el título deseado en una variable y envíe ese resultado.
Ignacio Vazquez-Abrams
Si usa esta secuencia de escape de terminal para establecer un título nulo (por ejemplo, export PROMPT_COMMAND="printf '\e]0;\7\n'"), entonces su emulador de terminal puede establecer el título de la ventana como mejor le parezca. Cuando ssh a un host remoto que establece el título del terminal, su emulador de terminal mostrará ese título, y cuando cierre la sesión, volverá a usar su propio título. Al menos, así es como funciona la aplicación MacOS Terminal.
claymation
3

AGREGAR estas líneas 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 bien con Linux basados ​​en Debian

hrushikesh
fuente
1
Sin embargo, no establece el título ...
Bananguin
Por lo general, funciona mejor usar en PROMPT_COMMANDlugar de usar PS1, ya que no tiene que incluir los \[ \]corchetes y puede eliminar algunas citas.
Chris Page
2

Una solución es cambiar la variable terminal a vt100 antes de ssh'ing, por ejemplo, ejecutar

export TERM=vt100

Esto funciona porque generalmente los scripts de inicialización miran la variable terminal y solo cambian su título si es xterm. Pierdes pantallas alternativas, colores y quizás algunas otras características sofisticadas que puedes apreciar o no.

Si desea mantener el terminal local como xterm, alias ssh para cambiar la variable del terminal sobre la marcha, como

alias ssh='TERM=vt100 /usr/bin/ssh'
Viljo Viitanen
fuente
cambia la forma en que se muestran las cosas. los colores no se muestran
npk
0

Solucioné este problema agregando esto a mi PS1 en mi archivo .bashrc.

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

Por lo tanto, toda la línea tiene este aspecto (¡he personalizado mi PS !:

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

Espero que eso ayude a los demás.

cwiggs
fuente
Si usa esta secuencia de escape de terminal para establecer un título nulo (por ejemplo, export PS1='\[\033]0;\007\]\h:\W \u\$ '), entonces su emulador de terminal puede establecer el título de la ventana como mejor le parezca. Cuando ssh a un host remoto que establece el título del terminal, su emulador de terminal lo mostrará, y cuando cierre la sesión, volverá a usar su propio título. Al menos, así es como funciona la aplicación MacOS Terminal.
claymation
0

Otras respuestas no funcionarían para mí cuando salga de SSH, pero me acercó. Agregar setw automatic-rename funciona cuando salgo de la sesión ssh remota, por lo que cambia automáticamente el nombre y ya no tengo que salir de la ventana para restablecer. [Ene. 2018 - Debian 9]

ssh() {
tmux rename-window "$*"
command ssh "$@"
tmux setw automatic-rename
}
solstis
fuente