Cambiar el fondo de la terminal según el host

¿Hay alguna manera de que mi terminal cambie dinámicamente las cubiertas según el host en el que estoy? Por ejemplo, el fondo predeterminado (determinado por el perfil del terminal) es negro. Tal vez haya otro perfil de terminal que sea exactamente igual, excepto que tiene un fondo azul. Ahora, si uso SSH desde black_hostel que es el valor predeterminado a blue_host, mi perfil de terminal cambia (o el fondo cambia de negro a azul).

es posible? A menudo tengo entre 5 y 10 terminales abiertos a la vez en 3 o 4 máquinas diferentes y sería bueno mirar y ver a vista de pájaro qué terminal pertenece a qué host.

Respuestas (2)

Creo que esto es exactamente lo que quieres:

https://stackoverflow.com/questions/157959/how-do-i-make-the-apple-terminal-window-auto-change-colour-scheme-when-i-ssh-to

Todo el crédito es para Yurii Soldak :

Coloque el siguiente script en ~/bin/ssh (asegúrese de que ~/bin/ miró antes de /usr/bin/ en su RUTA):

#!/bin/sh

HOSTNAME=`echo $@ | sed s/.*@//`

set_bg () {
  osascript -e "tell application \"Terminal\" to set background color of window 1 to $1"
}

on_exit () {
  set_bg "{0, 0, 0, 50000}"
}
trap on_exit EXIT

case $HOSTNAME in
  production1|production2|production3) set_bg "{45000, 0, 0, 50000}" ;;
  *) set_bg "{0, 45000, 0, 50000}" ;;
esac

/usr/bin/ssh "$@"

La secuencia de comandos anterior extrae el nombre del host de la línea "username@host" (supone que inicia sesión en hosts remotos con "ssh user@host").

Luego, dependiendo del nombre de host, establece un fondo rojo (para servidores de producción) o un fondo verde (para todos los demás). Como resultado, todas sus ventanas ssh tendrán un fondo de color.

Supongo que aquí su fondo predeterminado es negro, por lo que la secuencia de comandos revierte el color de fondo a negro cuando cierra sesión en el servidor remoto (consulte "trap on_exit").

Sin embargo, tenga en cuenta que este script no rastrea la cadena de inicios de sesión ssh de un host a otro. Como resultado, el fondo será verde en caso de que primero inicie sesión en el servidor de prueba y luego inicie sesión en producción desde él.

En la misma publicación, Chris Page escribe:

Una característica menos conocida de Terminal es que puede establecer el nombre de un perfil de configuración en un nombre de comando y seleccionará ese perfil cuando cree un nuevo terminal a través de Shell> Nuevo comando... o Shell> Nueva conexión remota ... .

Por ejemplo, duplique su perfil predeterminado, asígnele el nombre "ssh" y establezca su color de fondo en rojo. Luego use New Command… para ejecutar ssh host.example.com.

También coincide con los argumentos, por lo que puede hacer que elija diferentes configuraciones para diferentes hosts remotos, por ejemplo.

Establezca los colores de terminal en cada host.

Mi situación es ligeramente diferente a la suya, ya que no me estoy conectando a varios servidores remotos al mismo tiempo, pero los principios son los mismos.

En mi caso, quería una forma simple de cambiar los colores de la terminal cuando estaba conectado a un servidor remoto para que accidentalmente no ejecutara un comando de desarrollo o prueba en un servidor de ensayo o producción.

Para lograr esto, utilicé el settermcomando en ~./bashrcel archivo de mi(s) servidor(es) para invertir los colores de la terminal al conectarme y restaurar los colores al salir.

~/.bashrc

# Inverts console colours so that we know that we are in a remote server. 
# This is very important to avoid running commands on the server by accident.
setterm --inversescreen on

# This ensures we restore the console colours after exiting.
function restore_screen_colours {
  setterm --inversescreen off
}
trap restore_screen_colours EXIT

Luego coloco esto en todos los ~/.bashrcarchivos de los servidores para saber cuándo mi terminal está en un servidor remoto o no. Funciona genial.

Sin embargo, lo que esto no hace es decirle a qué servidor está conectado, que es lo que está buscando.

Para lograr eso, simplemente puede usar settermparámetros personalizados para establecer colores únicos para cada uno de sus 3 o 4 servidores.

Por ejemplo, un servidor puede tener un fondo blanco con texto rojo, así:

setterm --background white --foreground red

Aquí están todas las opciones para setterm:

Options:
 --term          <terminal_name>   override TERM environment variable
 --reset                           reset terminal to power-on state
 --initialize                      display init string, and use default settings
 --default                         use default terminal settings
 --store                           save current terminal settings as default
 --cursor        [on|off]          display cursor
 --repeat        [on|off]          keyboard repeat
 --appcursorkeys [on|off]          cursor key application mode
 --linewrap      [on|off]          continue on a new line when a line is full
 --inversescreen [on|off]          swap colors for the whole screen
 --foreground    default|<color>   set foreground color
 --background    default|<color>   set background color
 --ulcolor       [bright] <color>  set underlined text color
 --hbcolor       [bright] <color>  set bold text color
                 <color>: black blue cyan green grey magenta red white yellow
 --bold          [on|off]          bold
 --half-bright   [on|off]          dim
 --blink         [on|off]          blink
 --underline     [on|off]          underline
 --reverse       [on|off]          swap foreground and background colors
 --clear         [all|rest]        clear screen and set cursor position
 --tabs          [<number>...]     set these tab stop positions, or show them
 --clrtabs       [<number>...]     clear these tab stop positions, or all
 --regtabs       [1-160]           set a regular tab stop interval
 --blank         [0-60|force|poke] set time of inactivity before screen blanks
 --dump          [<number>]        write vcsa<number> console dump to file
 --append        [<number>]        append vcsa<number> console dump to file
 --file          <filename>        name of the dump file
 --msg           [on|off]          send kernel messages to console
 --msglevel      0-8               kernel console log level
 --powersave     [on|vsync|hsync|powerdown|off]
                                   set vesa powersaving features
 --powerdown     [0-60]            set vesa powerdown interval in minutes
 --blength       [0-2000]          duration of the bell in milliseconds
 --bfreq         <number>          bell frequency in Hertz
 --version                         show version information and exit
 --help                            display this help and exit