Come cambiare automaticamente lo sfondo del terminale, in base al nome host ssh?


9

Come si può cambiare in modo programmatico il colore di sfondo di una finestra terminale, in base al nome host in cui ci si trova?

vale a dire quando vengo coinvolto in sistemi embedded live su hardware di produzione, desidero che lo sfondo del terminale cambi in rosso - per "mantenere la consapevolezza" su quale server mi trovo. Avere solo il nome host in PS1 non è sempre sufficiente.

Sto usando gnome-terminal, ma accetterei qualsiasi soluzione praticabile sotto Linux.

Risposte:


7

È possibile utilizzare LocalCommand ssh per emettere la sequenza di escape ANSI per modificare il colore di sfondo e disporre di una sezione per host (o modello host) per selezionare il colore appropriato che si desidera corrispondere all'host remoto.

Se i tuoi server di produzione seguono una convenzione di denominazione come "inizia con prod", puoi provare il seguente frammento nel tuo file ~ / .ssh / config: Host prod* PermitLocalCommand yes LocalCommand printf "\x1b[41m\x1b[2JPRODUCTION SYSTEM [%n]\n\n"

Se non esiste una pratica convenzione di denominazione per utilizzare modelli di caratteri jolly, è possibile elencare solo i nomi host separati da spazi. È possibile creare ulteriori blocchi host con diversi valori di colore e stringhe anche per vari altri server non di produzione.

Dopo aver effettuato la connessione a un host che corrisponde al modello, la stampa corrispondente verrà eseguita localmente, cambiando il colore di sfondo in rosso (il [41m sceglie il rosso come colore di sfondo, la parte [2J ridipinge l'intero schermo con il colore di sfondo aggiornato. Vedi https://en.wikipedia.org/wiki/ANSI_escape_code per molte più opzioni)

Il più grande fastidio di questo approccio è che il colore di sfondo persiste all'uscita dalla sessione ssh; Non esiste alcuna controparte per LocalCommand da eseguire al momento della disconnessione (di cui sono a conoscenza). Uno script alias o shell wrapper per ssh potrebbe invocare printf "\x1b[0m"come reset. D'altra parte, avere il colore di sfondo impostato tramite LocalCommand significa che otterrai il colore impostato anche se ssh non viene eseguito tramite uno script wrapper o un alias.


Risposta eccellente! L'unico problema che sto vedendo, che è comunque significativo, è che il cambio di colore rimane solo per il primo "schermo". Non appena vengono immessi i comandi e lo schermo scorre verso l'alto, passa dal rosso al nero. Forse il controllo del colore di gnome-terminal ha la precedenza sulla sequenza di escape ANSI? Conosci una soluzione?
Mtl Dev,

È possibile fare qualcosa di simile, forse alla variabile prompt PS1 sull'host SSH?
Mtl Dev,

Il ripristino potrebbe essere causato da sequenze nella variabile del prompt di PS1 o se si dispone di comandi come lsaliasati ls --color=autoe include la sequenza di ripristino '<ESC> [0m'. Per perseverare, però, probabilmente avresti bisogno di configurare diversi profili gnome-terminal, e seguire il percorso dello script wrapper, selezionando un nome profilo basato sul nome host e invocandognome-terminal --profile=$PROFILE_NAME -e ssh $HOST &
PKapp

Hai esattamente ragione: se ho ls --colourOR la ​​sequenza di reset in PS1, uno dei due sostituirà le precedenti impostazioni di colore ansi. Quindi esaminerò l'implementazione della soluzione di script wrapper proposta, che è anche un'ottima idea! Grazie mille!
Mtl Dev,

Proprio così gli altri sono consapevoli: l'aggiunta di printf a ~ / .ssh / config sembra interrompere rsync. Dettagli correlati qui: serverfault.com/questions/267154/…
Mtl Dev
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.