Cambiar el fondo del terminal basado en el host

4

¿Hay alguna forma de que mi terminal cambie dinámicamente las coberturas en función del host en el que me encuentre? Por ejemplo, el fondo predeterminado (determinado por el perfil del terminal) es negro. Quizás haya otro perfil de terminal que sea exactamente el mismo, excepto que tiene un fondo azul. Ahora, si SSH de black_host , que es el valor predeterminado en blue_host , mi perfil de terminal cambia (o el fondo cambia de negro a azul).

¿Es esto posible? A menudo tengo de 5 a 10 terminales abiertas a la vez en 3 a 4 máquinas diferentes y sería bueno ver y ver qué terminal pertenece a cada host.

    
pregunta drjrm3 16.04.2015 - 15:38

2 respuestas

2

Creo que esto es exactamente lo que quieres:

enlace

Todo el crédito va a Yurii Soldak :

Coloque el siguiente script en ~ / bin / ssh (asegúrese de que ~ / bin / haya visto 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 "$@"

El script anterior extrae el nombre de host de la línea "username @ host" (asume que inicias sesión en hosts remotos con "ssh user @ host").

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

Supongo que aquí el fondo predeterminado es negro, por lo que la secuencia de comandos revierte el color de fondo a negro cuando se desconecta del servidor remoto (consulte "captura en_exita").

Tenga en cuenta, sin embargo, que esta secuencia de comandos no realiza un seguimiento de 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 este.

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 usa Nuevo comando ... 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.

    
respondido por el Vincent 16.04.2015 - 15:51
0

Establezca los colores del terminal en cada host.

Mi situación es ligeramente diferente a la tuya, 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 sencilla de cambiar los colores del terminal cuando estaba conectado a un servidor remoto para que no ejecutara accidentalmente un comando de desarrollo o prueba en un servidor de producción o de transición.

Para lograr esto, usé el comando setterm en el archivo de mi servidor (s) ~./bashrc para invertir los colores del terminal al conectar 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 puse esto en todos los archivos ~/.bashrc de los servidores para saber cuándo mi terminal está en un servidor remoto o no. Funciona muy bien.

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

Para lograr esto, simplemente puede usar los parámetros setterm personalizados para establecer colores únicos para cada uno de sus 3 o 4 servidores.

Por ejemplo, un servidor puede ser un fondo blanco con texto en 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
    
respondido por el Joshua Pinter 28.04.2018 - 18:15

Lea otras preguntas en las etiquetas