Puis-je faire changer l'arrière-plan de mon terminal en fonction du nom d'hôte?

17

J'aimerais que la couleur d'arrière-plan de mon terminal change en fonction du nom d'hôte. Mon raisonnement est principalement d'avoir un moyen supplémentaire de me rappeler sur quel serveur je suis, donc je ne fais pas quelque chose de stupide.

Existe-t-il un moyen de lui faire utiliser l'arrière-plan aubergine standard si je suis sur ma machine locale, puis de changer en rouge si je ssh dans un serveur Web de production ou d'autres hôtes que je pourrais spécifier?

chris
la source
Une idée, script la modification de la variable d'environnement qui gère les paramètres du terminal. Faites un script pour chaque endroit que vous utilisez généralement et incluez la modification des paramètres dans ce script, voici un guide qui peut vous aider: cyberciti.biz/faq/… - de cette façon, vous pouvez simplement exécuter un script qui non seulement se connectera pour vous, mais personnalisera le terminal pour cette session particulière.
MaQleod
1
Il y a la même question sur le site ubuntu: askubuntu.com/questions/13705/… Attention, je ne vous en veux pas, je ne l'ai pas trouvé au début non plus :)
Stefano

Réponses:

9

Vous pouvez utiliser l'option localcommand de ssh / config pour exécuter une commande chaque fois qu'un alias est utilisé. j'utilise

host hostname
    user myusername
    localcommand xtermcontrol --bg '#abc'

Cela dépend de xtermcontrol et de votre terme étant xterm. Vraisemblablement, il existe d'autres applications pour d'autres termes.

Le seul problème avec cette approche est qu'elle se produit lorsque vous appelez ssh. Il n'y a rien pour annuler le changement de couleur. Je l'ai fait en enveloppant une fonction autour de ssh, mais cela a aussi ses inconvénients.

function ssh() {
  FG=$(xtermcontrol --get-fg)
  BG=$(xtermcontrol --get-bg)
  $(which ssh) "$@"
  xtermcontrol --fg="$FG"
  xtermcontrol --bg="$BG"
}
valadil
la source
7

Il ne semble pas y avoir de fonctionnalité gnome-terminalpour ajouter un nouvel onglet à une fenêtre existante à partir de la ligne de commande. Mais il existe quelques options pour accomplir ce que vous voulez.

Profils par commande

Créez un nouveau gnome-terminalprofil pour chaque hôte sur lequel vous allez vous connecter. Si vous ne disposez que de quelques hôtes auxquels vous vous connectez régulièrement, cela peut être le plus simple. Chaque profil peut avoir un titre différent, une couleur de premier plan, une couleur d'arrière-plan, une commande personnalisée et d'autres paramètres définis. Ensuite, vous pouvez utiliser File -> Open Tabpour ouvrir un nouvel onglet avec le profil sélectionné.

Profil réutilisable

Créez un nouveau gnome-terminalprofil qui sera utilisé pour ouvrir une nouvelle fenêtre chaque fois que vous souhaitez vous connecter à un hôte SSH différent (sur la base de cette réponse AskUbuntu que Stefano a indiquée). Cela fonctionnerait bien si vous vous connectez fréquemment à de nombreux hôtes différents. Cela ne vous permettra pas de distinguer les différentes gnome-terminalfenêtres où vous êtes connecté à différents hôtes uniquement sur les couleurs d'arrière-plan / de premier plan, mais vous aurez un titre différent par fenêtre.

  1. Créez un nouveau gnome-terminalprofil ( File -> New Profile) basé sur le Defaultprofil et appelez-le "RemoteHost" (notez, aucun espace dans "RemoteHost" pour faciliter les commandes).
  2. Sous l' Title and Commandonglet, modifiez:
    1. Initial title: vers "Hôte distant"
    2. When terminal commands set their own titles: à Replace initial title
  3. Sous l' Colorsonglet, modifiez:
    1. Décochez Use colors from system theme
    2. Build-in schemes: à Custom
    3. Text color:et Background color:aux couleurs de votre choix. Gardez à l'esprit que certaines commandes (comme ls) utilisent des couleurs pour leur sortie et que vous ne voulez pas choisir des couleurs qui rendront la lecture de la sortie difficile.
  4. Cliquez sur le Closebouton pour enregistrer votre nouveau profil.
  5. Vous pouvez maintenant ouvrir une nouvelle gnome-terminalfenêtre pour chaque hôte SSH distant à l'aide de la commande gnome-terminal --window-with-profile=RemoteHost -t "Some Remote SSH Host" -x ssh user@somehost. L' -toption définit le gnome-terminaltitre de la fenêtre et l' -xoption exécute le reste de la ligne de commande dans le terminal. Vous pouvez même aliasraccourcir le nombre total de touches.

Ligne de commande

J'ai trouvé cette entrée de blog avec le script suivant qui utilise les commandes xdotoolet wmctrl(elles n'étaient pas installées par défaut sur Ubuntu, vous devrez peut-être les installer d'abord) pour utiliser le raccourci clavier gnome-terminal Ctrl+ Shift+ tpour ouvrir un nouvel onglet dans la gnome-terminalfenêtre actuelle . Il pourrait être modifié pour ouvrir un nouvel onglet avec un profil spécifique et exécuter une commande pour vous.

#!/bin/bash
# Path: /usr/local/bin/gnome-terminal
if [ "x$*" != "x" ]; then
  /usr/bin/gnome-terminal "$@"
else
  pgrep -u "$USER" gnome-terminal | grep -qv "$$"
  if [ "$?" == "0" ]; then
    WID=`xdotool search --class "gnome-terminal" | head -1`
    xdotool windowfocus $WID
    xdotool key ctrl+shift+t
    wmctrl -i -a $WID
  else
    /usr/bin/gnome-terminal
  fi
fi

Autre

Vous pourriez faire preuve de créativité et essayer d'autres choses.

Cette réponse SuperUser utilise essentiellement un peu d'acrobates "script-fu" pour créer un gnome-terminalprofil temporaire qui est utilisé pour ouvrir une nouvelle fenêtre. Il peut être modifié pour votre usage.

Vous pourriez probablement utiliser ce Q&A StackOverflow et plus d'acrobates "script-fu" pour changer dynamiquement le gnome-terminaltitre chaque fois que vous SSH vers un hôte distant. Il ne serait pas aussi important que les changements de couleur d'arrière-plan / de premier plan, mais ce serait toujours mieux qu'un Terminaltitre standard .

Dan Cruz
la source
6

Cela fonctionnera dans Gnome, SI vous êtes prêt à utiliser une nouvelle fenêtre gnome-terminal pour chaque session ssh.

  1. Créez un nouveau profil (avec une couleur d'arrière-plan différente) appelé "Remote"

  2. Insérez ce qui suit dans .bash_aliases, ou.bashrc

    ### add to .bash_aliases, for differentiating between local and remote hosts 
    sshhelper() {
       gnome-terminal --window-with-profile=Remote -x bash -c "ssh $1";
    }
    alias sshc=sshhelper
    

sshc remote-machineOuvre maintenant une nouvelle session gnome-terminal avec le profil "Remote". cela fera la différence entre les profils locaux et distants.

Pour accueillir plusieurs profils / hôtes, créez plusieurs profils et placez quelque chose comme ceci à la .bash_aliasesplace:

### add to .bash_aliases, for differentiating between multiple remote hosts
sshhelper() {
    HOST=`echo $1 | cut -d'@' -f2`

    case $HOST in
        Production )  PROFILE="Red" ;;
        Test )        PROFILE="Green" ;;
        # ... if you have more cases ...
        *)           PROFILE="Default" ;;
    esac

    gnome-terminal --window-with-profile=$PROFILE -x bash -c "ssh $1";
}

# alias ssh=sshhelper    # this will "override" the ssh command, but may break other stuff!
alias sshc=sshhelper

Maintenant sshc Production, ouvrira une nouvelle fenêtre de session en utilisant le profil "Rouge", sshc Testouvrira une nouvelle fenêtre de session en utilisant le profil "Vert", et d'autres hôtes utiliseront le profil "Par défaut".

peonicles
la source
2

Rassembler toutes les informations des sites de pile *** ici est la solution la plus simple que j'ai trouvée pour mint mate + mate terminal (la même que pour gnome).

  1. Dans le terminal partenaire, définissez le deuxième profil, avec un arrière-plan différent.
  2. Vérifiez si les touches par défaut fonctionnent. Alt + PageDown / Alt + PageUp doit également modifier le profil et l'arrière-plan.
  3. sudo apt get install xdotool

Vous pouvez maintenant modifier / etc / ssh / ssh_config, afin qu'il puisse changer le profil après chaque session ssh est établie:

Host *
  PermitLocalCommand yes
  LocalCommand xdotool key Alt+Page_Down

Maintenant, après que chaque connexion ssh soit établie dans le terminal, le profil sera modifié et vous ne mettrez plus jamais de mise à jour sql indésirable dans la base de données de production :)

Cependant, il n'y a pas de solution facile pour revenir au profil par défaut après la fermeture de la connexion ssh. Mais cela me semble suffisant, et je n'ai pas cherché plus d'informations.

Lukasz Frankowski
la source