9 votes

Changer l'arrière-plan du terminal en fonction de l'hôte

Existe-t-il un moyen pour que mon terminal change dynamiquement de thèmes en fonction de l'hôte sur lequel je suis ? Par exemple, l'arrière-plan par défaut (tel que défini par le profil de terminal) est noir. Peut-être qu'il existe un autre profil de terminal qui est exactement le même sauf qu'il a un arrière-plan bleu. Maintenant, si je me connecte en SSH depuis black_host qui est le profil par défaut vers blue_host, mon profil de terminal change (ou l'arrière-plan passe de noir à bleu).

Est-ce possible ? J'ai souvent entre 5 et 10 terminaux ouverts en même temps sur 3 à 4 machines différentes et ce serait bien de pouvoir voir en un coup d'œil à quel hôte appartient chaque terminal.

4voto

Justin Love Points 3073

Je crois que c'est exactement ce que vous voulez :

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

Tout le crédit revient à Yurii Soldak:

Placez le script suivant dans ~/bin/ssh (assurez-vous que ~/bin/ soit placé avant /usr/bin/ dans votre 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 "$@"

Le script ci-dessus extrait le nom d'hôte à partir de la ligne "username@host" (il suppose que vous vous connectez aux hôtes distants avec "ssh user@host").

Ensuite, en fonction du nom d'hôte, il définit un arrière-plan rouge (pour les serveurs de production) ou un arrière-plan vert (pour tous les autres). Ainsi, toutes vos fenêtres ssh seront avec un arrière-plan coloré.

Ici, je suppose que votre arrière-plan par défaut est noir, donc le script rétablit la couleur d'arrière-plan en noir lorsque vous vous déconnectez du serveur distant (voir "trap on_exit").

Veuillez noter cependant que ce script ne suit pas la chaîne de connexions ssh d'un hôte à un autre. Par conséquent, l'arrière-plan sera vert si vous vous connectez d'abord à un serveur de test, puis à la production.

Dans le même post, Chris Page écrit :

Une fonctionnalité moins connue de Terminal est que vous pouvez définir le nom d'un profil de paramètres sur un nom de commande et il sélectionnera ce profil lorsque vous créez un nouveau terminal via Shell > New Command... ou Shell > New Remote Connection....

Par exemple, dupliquez votre profil par défaut, nommez-le "ssh" et définissez sa couleur d'arrière-plan en rouge. Ensuite, utilisez New Command… pour exécuter ssh host.example.com.

Il correspond également aux arguments, donc vous pouvez avoir des réglages différents pour des hôtes distants différents, par exemple.

3voto

Joshua Pinter Points 1347

Définir les couleurs du terminal sur chaque hôte.

Ma situation est légèrement différente de la vôtre, en ce sens que je ne me connecte pas à plusieurs serveurs distants simultanément, mais les principes sont les mêmes.

Dans mon cas, je voulais une manière simple de changer les couleurs du terminal lorsque j'étais connecté à un serveur distant afin de ne pas exécuter accidentellement une commande de développement ou de test sur un serveur de staging ou de production.

Pour ce faire, j'ai utilisé la commande setterm dans le fichier ~./bashrc de mon serveur(s) pour inverser les couleurs du terminal lors de la connexion et restaurer les couleurs à la sortie.

~/.bashrc

# Inverse les couleurs de la console pour savoir que nous sommes sur un serveur distant.
# C'est très important pour éviter d'exécuter des commandes accidentellement sur le serveur.
setterm --inversescreen on

# Cela nous assure de restaurer les couleurs de la console après la sortie.
function restore_screen_colours {
  setterm --inversescreen off
}
trap restore_screen_colours EXIT

J'ai ensuite mis ceci dans tous les fichiers ~/.bashrc des serveurs pour savoir quand mon terminal est sur un serveur distant ou non. Ça marche très bien.

Cependant, ce que cela ne fait pas, c'est vous dire à quel serveur vous êtes connecté, ce qui est ce que vous recherchez.

Pour y parvenir, vous pouvez simplement utiliser des paramètres personnalisés de setterm pour définir des couleurs uniques pour chacun de vos 3 ou 4 serveurs.

Par exemple, un serveur peut avoir un fond blanc avec un texte rouge, comme ceci :

setterm --background white --foreground red

Voici toutes les options pour setterm:

Options:
 --term             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|   set foreground color
 --background    default|   set background color
 --ulcolor       [bright]   set underlined text color
 --hbcolor       [bright]   set bold text 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          [...]     set these tab stop positions, or show them
 --clrtabs       [...]     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          []        write vcsa console dump to file
 --append        []        append vcsa console dump to file
 --file                  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                   bell frequency in Hertz
 --version                         show version information and exit
 --help                            display this help and exit

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X