Kann ich meinen Terminal-Hintergrund basierend auf dem Hostnamen ändern lassen?

17

Ich möchte, dass sich die Hintergrundfarbe meines Terminals basierend auf dem Hostnamen ändert. Meine Argumentation dafür ist hauptsächlich, dass ich eine zusätzliche Möglichkeit habe, mich daran zu erinnern, auf welchem ​​Server ich mich befinde, damit ich nichts Dummes tue.

Gibt es eine Möglichkeit, den Standard-Auberginen-Hintergrund zu verwenden, wenn ich mich auf meinem lokalen Computer befinde, und dann rot zu ändern, wenn ich einen Produktions-Webserver oder andere Hosts verwandle, die ich angeben könnte?

chris
quelle
Eine Idee ist, die Änderung der Umgebungsvariablen, die die Terminaleinstellungen behandelt, per Skript zu ändern. Erstellen Sie ein Skript für jeden Ort, zu dem Sie normalerweise eine Verbindung herstellen, und nehmen Sie die Änderungen an den Einstellungen in das Skript auf. Hier ist eine Anleitung, die Ihnen dabei helfen kann: cyberciti.biz/faq/… - auf diese Weise können Sie einfach ein Skript ausführen, das nicht nur eine Verbindung herstellt für Sie, aber wird das Terminal für diese bestimmte Sitzung anpassen.
MaQleod
1
Es gibt dieselbe Frage auf der Ubuntu-Website: askubuntu.com/questions/13705/… Vergesst nicht , ich beschuldige euch, ich habe sie auch zuerst nicht gefunden :)
Stefano

Antworten:

9

Sie können die localcommand-Option von ssh / config verwenden, um einen Befehl auszuführen, wenn ein Alias ​​verwendet wird. ich benutze

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

Dies hängt von xtermcontrol und Ihrer Bezeichnung xterm ab. Vermutlich gibt es andere Apps für andere Begriffe.

Das einzige Problem bei diesem Ansatz ist, dass es passiert, wenn Sie ssh aufrufen. Es gibt nichts, was den Farbwechsel rückgängig machen könnte. Ich habe es getan, indem ich eine Funktion um ssh gewickelt habe, aber das hat auch seine Nachteile.

function ssh() {
  FG=$(xtermcontrol --get-fg)
  BG=$(xtermcontrol --get-bg)
  $(which ssh) "$@"
  xtermcontrol --fg="$FG"
  xtermcontrol --bg="$BG"
}
Valadil
quelle
7

Es scheint keine Funktionalität gnome-terminalzu geben, um einem vorhandenen Fenster über die Befehlszeile eine neue Registerkarte hinzuzufügen . Es gibt jedoch einige Möglichkeiten, um das zu erreichen, was Sie wollen.

Pro Befehlsprofile

Erstellen Sie ein neues gnome-terminalProfil für jeden Host, auf dem Sie SSH ausführen. Wenn Sie nur wenige Hosts haben, zu denen Sie regelmäßig eine Verbindung herstellen, ist dies möglicherweise der einfachste. Für jedes Profil können ein anderer Titel, eine andere Vordergrundfarbe, eine andere Hintergrundfarbe, ein benutzerdefinierter Befehl und andere Einstellungen definiert werden. Anschließend können Sie File -> Open Tabmit eine neue Registerkarte mit dem ausgewählten Profil öffnen.

Wiederverwendbares Profil

Erstellen Sie ein neues gnome-terminalProfil, mit dem jedes Mal, wenn Sie eine Verbindung zu einem anderen SSH-Host herstellen möchten, ein neues Fenster geöffnet wird (basierend auf dieser Antwort von AskUbuntu, auf die Stefano hingewiesen hat). Dies funktioniert gut, wenn Sie häufig eine Verbindung zu vielen verschiedenen Hosts herstellen. Auf diese Weise können Sie nicht zwischen verschiedenen gnome-terminalFenstern unterscheiden , in denen Sie ausschließlich in den Hintergrund- / Vordergrundfarben mit verschiedenen Hosts verbunden sind. Sie haben jedoch einen anderen Titel pro Fenster.

  1. Erstellen Sie ein neues gnome-terminalProfil ( File -> New Profile) basierend auf dem DefaultProfil und nennen Sie es "RemoteHost" (beachten Sie, dass "RemoteHost" keine Leerzeichen enthält, um Befehle zu vereinfachen).
  2. Title and CommandÄndern Sie unter der Registerkarte Folgendes:
    1. Initial title: zu "Remote Host"
    2. When terminal commands set their own titles: zu Replace initial title
  3. ColorsÄndern Sie unter der Registerkarte Folgendes:
    1. Deaktivieren Sie Use colors from system theme
    2. Build-in schemes: zu Custom
    3. Text color:und Background color:zu Farben Ihrer Wahl. Denken Sie daran, dass einige Befehle (wie ls) Farben für ihre Ausgabe verwenden und Sie keine Farben auswählen möchten, die das Lesen der Ausgabe erschweren.
  4. Klicken Sie auf die CloseSchaltfläche, um Ihr neues Profil zu speichern.
  5. Jetzt können Sie gnome-terminalmit dem Befehl für jeden entfernten SSH-Host ein neues Fenster öffnen gnome-terminal --window-with-profile=RemoteHost -t "Some Remote SSH Host" -x ssh user@somehost. Die -tOption legt den gnome-terminalFenstertitel fest und -xführt den Rest der Befehlszeile im Terminal aus. Sie könnten sogar eine aliasTastenkürzung vornehmen .

Befehlszeile

Ich habe diesen Blogeintrag mit dem folgenden Skript gefunden, das die Befehle xdotoolund verwendet wmctrl(sie wurden unter Ubuntu nicht standardmäßig installiert, daher müssen Sie sie möglicherweise zuerst installieren), um mit der Tastenkombination gnome-terminal Ctrl+ Shift+ teine neue Registerkarte im aktuellen gnome-terminalFenster zu öffnen . Es kann geändert werden, um eine neue Registerkarte mit einem bestimmten Profil zu öffnen und einen Befehl für Sie auszuführen.

#!/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

Andere

Sie könnten kreativ werden und ein paar andere Dinge ausprobieren.

Diese SuperUser-Antwort verwendet im Grunde genommen ein bisschen "script-fu" -Akrobaten, um ein temporäres gnome-terminalProfil zu erstellen , das zum Öffnen eines neuen Fensters verwendet wird. Es kann für Ihre Verwendung geändert werden.

Mit diesen StackOverflow-Fragen und -Akrobaten und weiteren "script-fu" -Akrobaten können gnome-terminalSie den Titel möglicherweise dynamisch ändern, wenn Sie SSH an einen Remotehost senden. Es wäre nicht so auffällig wie Änderungen der Hintergrund- / Vordergrundfarbe, aber es wäre immer besser als ein Standardtitel Terminal.

Dan Cruz
quelle
6

Dies funktioniert in Gnome, WENN Sie bereit sind, für jede SSH-Sitzung ein neues Gnome-Terminal-Fenster zu verwenden.

  1. Erstelle ein neues Profil (mit anderer Hintergrundfarbe) mit dem Namen "Remote"

  2. Fügen Sie Folgendes in .bash_aliasesoder ein.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
    

Jetzt sshc remote-machineöffnet sich eine neue Gnome-Terminal-Sitzung mit dem "Remote" -Profil. Dadurch wird zwischen lokalen und Remote-Profilen unterschieden.

Um mehrere Profile / Hosts aufzunehmen, erstellen Sie mehrere Profile und platzieren Sie .bash_aliasesstattdessen so etwas:

### 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

Jetzt sshc Productionöffnet sich ein neues Sitzungsfenster mit dem Profil "Rot", sshc Testöffnet sich ein neues Sitzungsfenster mit dem Profil "Grün" und andere Hosts verwenden das Profil "Standard".

Pfingstrosen
quelle
2

Die einfachste Lösung, die ich für mint mate + mate terminal gefunden habe, besteht darin, alle Informationen von Stack *** Sites zu sammeln (genau wie für gnome).

  1. Definieren Sie im Partner-Terminal das zweite Profil mit unterschiedlichem Hintergrund.
  2. Überprüfen Sie, ob die Standardtasten Alt + Bild-Ab / Alt + Bild-Auf funktionieren, um das Profil und den Hintergrund zu ändern.
  3. sudo apt get install xdotool

Jetzt können Sie / etc / ssh / ssh_config so ändern, dass es das Profil nach jedem Aufbau einer ssh-Sitzung ändert:

Host *
  PermitLocalCommand yes
  LocalCommand xdotool key Alt+Page_Down

Jetzt, nachdem jede SSH-Verbindung im Terminal hergestellt wurde, wird das Profil geändert und Sie werden nie wieder ein unerwünschtes SQL-Update in die Produktionsdatenbank laden :)

Es gibt jedoch keine einfache Lösung, um das Standardprofil wiederherzustellen, nachdem die SSH-Verbindung geschlossen wurde. Aber das scheint mir genug zu sein, und ich habe nicht nach weiteren Informationen gesucht.

Lukasz Frankowski
quelle