Cambia lo sfondo del terminale in base all'host

4

C'è un modo in cui posso cambiare dinamicamente il mio cover in base all'host su cui sono presente? Ad esempio, lo sfondo predefinito (come determinato dal profilo del terminale) è nero. Forse c'è un altro profilo terminale che è esattamente lo stesso, tranne che ha uno sfondo blu. Ora, se I SSH da black_host che è il valore predefinito in blue_host , il mio profilo del terminale cambia (o lo sfondo cambia dal nero al blu).

È possibile? Spesso ho aperto da 5 a 10 terminali alla volta su 3-4 macchine diverse e sarebbe bello guardare e vedere da un punto di vista dell'uccello quale terminale appartiene a quale host.

    
posta drjrm3 16.04.2015 - 15:38
fonte

2 risposte

2

Credo che questo sia esattamente ciò che desideri:

link

Tutto il credito va a Yurii Soldak :

Inserisci il seguente script in ~ / bin / ssh (assicurati che ~ / bin / guardato prima / usr / bin / nel tuo PATH):

#!/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 "$@"

Lo script sopra estrae il nome host dalla riga "username @ host" (presuppone l'accesso agli host remoti con "ssh user @ host").

Quindi, a seconda del nome host, imposta uno sfondo rosso (per i server di produzione) o uno sfondo verde (per tutti gli altri). Di conseguenza tutte le finestre ssh avranno lo sfondo colorato.

Presumo che lo sfondo predefinito sia nero, quindi lo script ripristina il colore dello sfondo in nero quando esci dal server remoto (vedi "trap su_exit").

Nota, tuttavia, questo script non traccia la catena di accessi ssh da un host a un altro. Di conseguenza, lo sfondo sarà verde nel caso in cui si effettui il login prima al server di testing, quindi accedi alla produzione da esso.

Nello stesso post, scrive Chris Page :

Una funzionalità meno nota di Terminal è che puoi impostare il nome di un profilo di impostazioni su un nome di comando e selezionerà quel profilo quando creerai un nuovo terminale tramite Shell > Nuovo comando ... o Shell > Nuova connessione remota ... .

Ad esempio, duplica il tuo profilo predefinito, chiamalo "ssh" e imposta il colore dello sfondo su rosso. Quindi utilizza Nuovo comando ... per eseguire ssh host.example.com .

Corrisponde anche agli argomenti, quindi puoi farlo scegliere impostazioni diverse per diversi host remoti, ad esempio.

    
risposta data 16.04.2015 - 15:51
fonte
0

Imposta i colori del terminale su ciascun host.

La mia situazione è leggermente diversa dalla tua, in quanto, non mi connetto a più server remoti contemporaneamente, ma i principi sono gli stessi.

Nel mio caso volevo un modo semplice per cambiare i colori del terminale quando ero connesso a un server remoto in modo da non eseguire accidentalmente un comando di sviluppo o test su un server di staging o di produzione.

Per fare questo, ho usato il comando setterm nel mio file ~./bashrc del mio server per invertire i colori del terminale quando ci si collega e si ripristinano i colori quando si esce.

~ / .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

Quindi lo metto in tutti i file ~/.bashrc dei server in modo che io sappia quando il mio terminale si trova su un server remoto o meno. Funziona alla grande.

Tuttavia, ciò che non fa è dirti a quale server sei connesso, che è quello che stai cercando.

Per riuscirci puoi semplicemente utilizzare i parametri personalizzati setterm per impostare colori unici per ciascuno dei tuoi 3 o 4 server.

Ad esempio, un server può essere uno sfondo bianco con testo rosso, in questo modo:

setterm --background white --foreground red

Ecco tutte le opzioni per 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
    
risposta data 28.04.2018 - 18:15
fonte

Leggi altre domande sui tag