¿Puedo cambiar el fondo de mi terminal según el nombre de host?

17

Me gustaría que mi color de fondo del terminal cambie según el nombre de host. Mi razonamiento para esto es principalmente tener una forma adicional de recordarme en qué servidor estoy, así que no hago nada estúpido.

¿De alguna manera puedo hacer que use el fondo de berenjena estándar si estoy en mi máquina local, y luego cambie el rojo si ingreso en un servidor web de producción u otros hosts que pueda especificar?

Chris
fuente
Una idea, escribir el cambio en la variable ambiental que maneja la configuración del terminal. Haga una secuencia de comandos para cada lugar en el que normalmente ssh e incluya el cambio en la configuración de esa secuencia de comandos, aquí hay una guía que puede ayudar: cyberciti.biz/faq/… - de esta manera puede ejecutar una secuencia de comandos que no solo se conectará para usted, pero personalizará el terminal para esa sesión en particular.
MaQleod
1
Hay la misma pregunta en el sitio de ubuntu: askubuntu.com/questions/13705/… Ojo , no te culpo, tampoco lo encontré al principio :)
Stefano

Respuestas:

9

Puede usar la opción de comando local de ssh / config para ejecutar un comando siempre que se use un alias. yo suelo

host hostname
    user myusername
    localcommand xtermcontrol --bg '#abc'

Esto depende de xtermcontrol y su término como xterm. Presumiblemente hay otras aplicaciones para otros términos.

El único problema con este enfoque es que ocurre cuando llamas a ssh. No hay nada para deshacer el cambio de color. Lo hice envolviendo una función alrededor de ssh, pero eso también tiene sus inconvenientes.

function ssh() {
  FG=$(xtermcontrol --get-fg)
  BG=$(xtermcontrol --get-bg)
  $(which ssh) "$@"
  xtermcontrol --fg="$FG"
  xtermcontrol --bg="$BG"
}
valadil
fuente
7

No parece que haya ninguna funcionalidad gnome-terminalpara agregar una nueva pestaña a una ventana existente desde la línea de comandos. Pero hay algunas opciones para lograr lo que quieres.

Por perfiles de comando

Cree un nuevo gnome-terminalperfil para cada host en el que vaya a SSH. Si solo tiene unos pocos hosts a los que se conecta regularmente, este podría ser el más simple. Cada perfil puede tener un título diferente, color de primer plano, color de fondo, comando personalizado y otras configuraciones definidas. Luego puede usar File -> Open Tabpara abrir una nueva pestaña con el perfil seleccionado.

Perfil reutilizable

Cree un nuevo gnome-terminalperfil que se utilizará para abrir una nueva ventana cada vez que desee conectarse a un host SSH diferente (según esta respuesta de AskUbuntu que Stefano señaló). Esto funcionaría bien si se conecta a muchos hosts diferentes con frecuencia. Esto no le permitirá distinguir entre diferentes gnome-terminalventanas donde está conectado a diferentes hosts únicamente en los colores de fondo / primer plano, pero tendrá un título diferente por ventana.

  1. Cree un nuevo gnome-terminalperfil ( File -> New Profile) basado en el Defaultperfil y llámelo "RemoteHost" (nota, no hay espacios en "RemoteHost" para facilitar los comandos).
  2. Debajo de la Title and Commandpestaña, cambie:
    1. Initial title: a "Host remoto"
    2. When terminal commands set their own titles: a Replace initial title
  3. Debajo de la Colorspestaña, cambie:
    1. Desmarcar Use colors from system theme
    2. Build-in schemes: a Custom
    3. Text color:y Background color:a los colores que elijas. Tenga en cuenta que algunos comandos (como ls) el uso de colores para su producción y que no quiere escoger los colores que harán que sea difícil de leer la salida.
  4. Haga clic en el Closebotón para guardar su nuevo perfil.
  5. Ahora puede abrir una nueva gnome-terminalventana para cada host SSH remoto utilizando el comando gnome-terminal --window-with-profile=RemoteHost -t "Some Remote SSH Host" -x ssh user@somehost. La -topción establece el gnome-terminaltítulo de la ventana y la -xopción ejecuta el resto de la línea de comando en el terminal. Incluso podría hacer una aliaspara acortar las pulsaciones de teclas totales.

Línea de comando

Encontré esta entrada de blog con el siguiente script que usa los comandos xdotooly wmctrl(no se instalaron de forma predeterminada en Ubuntu, por lo que es posible que deba instalarlos primero) para usar el método abreviado de teclado gnome-terminal Ctrl+ Shift+ tpara abrir una nueva pestaña en la gnome-terminalventana actual . Podría modificarse para abrir una nueva pestaña con un perfil específico y ejecutar algún comando para usted.

#!/bin/bash
# Path: /usr/local/bin/gnome-terminal
if [ "x$*" != "x" ]; then
  /usr/bin/gnome-terminal "$@"
else
  pgrep -u "$USER" gnome-terminal | grep -qv "$$"
  if [ "$?" == "0" ]; then
    WID=`xdotool search --class "gnome-terminal" | head -1`
    xdotool windowfocus $WID
    xdotool key ctrl+shift+t
    wmctrl -i -a $WID
  else
    /usr/bin/gnome-terminal
  fi
fi

Otro

Podrías ser creativo y probar otras cosas.

Esta respuesta de Superusuario básicamente usa un poco de acróbatas "script-fu" para crear un gnome-terminalperfil temporal que se usa para abrir una nueva ventana. Puede ser modificado para su uso.

Probablemente podría usar estas preguntas y respuestas de StackOverflow y más acróbatas "script-fu" para cambiar dinámicamente el gnome-terminaltítulo cada vez que utilice SSH en un host remoto. No sería tan prominente como los cambios de color de fondo / primer plano, pero sería mejor que un Terminaltítulo estándar todo el tiempo.

Dan Cruz
fuente
6

Esto funcionará en Gnome, SI está dispuesto a usar una nueva ventana gnome-terminal para cada sesión ssh.

  1. Cree un nuevo perfil (con un color de fondo diferente) llamado "Remoto"

  2. Inserte lo siguiente en .bash_aliases, o.bashrc

    ### add to .bash_aliases, for differentiating between local and remote hosts 
    sshhelper() {
       gnome-terminal --window-with-profile=Remote -x bash -c "ssh $1";
    }
    alias sshc=sshhelper
    

Ahora sshc remote-machineabre un nuevo sesión de gnome-terminal con el perfil "Remoto". Esto diferenciará entre perfiles locales y remotos.

Para acomodar múltiples perfiles / hosts, cree múltiples perfiles y coloque algo como esto en su .bash_aliaseslugar:

### add to .bash_aliases, for differentiating between multiple remote hosts
sshhelper() {
    HOST=`echo $1 | cut -d'@' -f2`

    case $HOST in
        Production )  PROFILE="Red" ;;
        Test )        PROFILE="Green" ;;
        # ... if you have more cases ...
        *)           PROFILE="Default" ;;
    esac

    gnome-terminal --window-with-profile=$PROFILE -x bash -c "ssh $1";
}

# alias ssh=sshhelper    # this will "override" the ssh command, but may break other stuff!
alias sshc=sshhelper

Ahora sshc Productionabrirá una nueva ventana de sesión usando el perfil "Rojo", sshc Testabrirá una nueva ventana de sesión usando el perfil "Verde", y otros hosts usarán el Perfil "Predeterminado".

peonículas
fuente
2

Recopilar toda la información de los sitios de stack *** aquí es la solución más simple que he encontrado para mint mate + mate terminal (igual que para gnome).

  1. En el terminal mate, defina el segundo perfil, con diferente fondo.
  2. Compruebe si las teclas predeterminadas funcionan Alt + PageDown / Alt + PageUp deberían cambiar el perfil y el fondo también.
  3. sudo apt get install xdotool

Ahora puede modificar / etc / ssh / ssh_config, para que pueda cambiar el perfil después de establecer cada sesión ssh:

Host *
  PermitLocalCommand yes
  LocalCommand xdotool key Alt+Page_Down

Ahora, después de establecer cada conexión ssh en el terminal, se cambiará el perfil y nunca volverá a colocar una actualización SQL no deseada en la base de datos de producción :)

Sin embargo, no hay una solución fácil para volver al perfil predeterminado después de cerrar la conexión ssh. Pero esto me parece suficiente, y no busqué más información.

Lukasz Frankowski
fuente