Czy mogę zmienić tło mojego terminala na podstawie nazwy hosta?

17

Chcę zmienić kolor tła terminala na podstawie nazwy hosta. Moim uzasadnieniem jest przede wszystkim mieć dodatkowy sposób na przypomnienie sobie, na jakim serwerze jestem, więc nie robię czegoś głupiego.

Czy mogę w jakiś sposób użyć standardowego tła bakłażana, jeśli jestem na komputerze lokalnym, a następnie zmienić kolor czerwony, jeśli ssh to produkcyjny serwer WWW lub inne hosty, które mógłbym określić?

Chris
źródło
Jeden pomysł, skryptuj zmianę do zmiennej środowiskowej, która obsługuje ustawienia terminala. Utwórz skrypt dla każdego miejsca, w którym zwykle ssh, i włącz zmianę ustawień w tym skrypcie, oto przewodnik, który może pomóc: cyberciti.biz/faq/… - w ten sposób możesz po prostu uruchomić skrypt, który nie tylko się połączy dla Ciebie, ale dostosujesz terminal dla tej konkretnej sesji.
MaQleod,
1
To samo pytanie znajduje się na stronie ubuntu: askubuntu.com/questions/13705/… Umysł, nie obwiniam cię, na początku też go nie znalazłem :)
Stefano

Odpowiedzi:

9

Możesz użyć opcji localcommand ssh / config, aby uruchomić polecenie za każdym razem, gdy używany jest alias. używam

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

Zależy to od xtermcontrol i twojego terminu bycia xterm. Przypuszczalnie istnieją inne aplikacje na inne warunki.

Jedynym problemem związanym z tym podejściem jest to, że dzieje się tak, gdy wywołujesz ssh. Nie ma nic, by cofnąć zmianę koloru. Zrobiłem to, owijając funkcję wokół ssh, ale ma to również swoje wady.

function ssh() {
  FG=$(xtermcontrol --get-fg)
  BG=$(xtermcontrol --get-bg)
  $(which ssh) "$@"
  xtermcontrol --fg="$FG"
  xtermcontrol --bg="$BG"
}
waladil
źródło
7

Nie wydaje się, gnome-terminalaby dodawać nową kartę do istniejącego okna z wiersza polecenia. Ale istnieje kilka opcji, aby osiągnąć to, czego chcesz.

Według profili poleceń

Utwórz nowy gnome-terminalprofil dla każdego hosta, na którym będziesz SSH. Jeśli masz tylko kilka hostów, z którymi regularnie się łączysz, może to być najprostsze. Każdy profil może mieć inny tytuł, kolor pierwszego planu, kolor tła, niestandardowe polecenie i inne zdefiniowane ustawienia. Następnie możesz użyć, File -> Open Tababy otworzyć nową kartę z wybranym profilem.

Profil wielokrotnego użytku

Utwórz nowy gnome-terminalprofil, który będzie używany do otwierania nowego okna za każdym razem, gdy chcesz połączyć się z innym hostem SSH (na podstawie tej odpowiedzi AskUbuntu, na którą wskazał Stefano ). To działałoby dobrze, jeśli często łączysz się z wieloma różnymi hostami. Nie pozwoli to na rozróżnienie między różnymi gnome-terminaloknami, w których jesteś podłączony do różnych hostów wyłącznie w kolorach tła / pierwszego planu, ale będziesz mieć inny tytuł dla każdego okna.

  1. Utwórz nowy gnome-terminalprofil ( File -> New Profile) na podstawie Defaultprofilu i nazwij go „RemoteHost” (uwaga, brak spacji w „RemoteHost”, aby ułatwić komendy).
  2. W Title and Commandzakładce zmień:
    1. Initial title: do „hosta zdalnego”
    2. When terminal commands set their own titles: do Replace initial title
  3. W Colorszakładce zmień:
    1. Odznacz Use colors from system theme
    2. Build-in schemes: do Custom
    3. Text color:i Background color:do wybranych przez ciebie kolorów. Należy pamiętać, że niektóre polecenia (np. ls) Używają kolorów dla swoich wyników i nie chcesz wybierać kolorów, które utrudniają odczytanie wyników.
  4. Kliknij Closeprzycisk, aby zapisać nowy profil.
  5. Teraz możesz otworzyć nowe gnome-terminalokno dla każdego zdalnego hosta SSH za pomocą polecenia gnome-terminal --window-with-profile=RemoteHost -t "Some Remote SSH Host" -x ssh user@somehost. -tOpcja ustawia gnome-terminaltytuł okna, a -xopcja wykona resztę linii poleceń w terminalu. Możesz nawet aliasskrócić całkowitą liczbę naciśnięć klawiszy.

Wiersz poleceń

Znalazłem ten wpis na blogu z następującym skryptem, który używa poleceń xdotooli wmctrl(nie były one domyślnie instalowane na Ubuntu, więc być może trzeba je najpierw zainstalować), aby użyć skrótu klawiaturowego gnome-terminal Ctrl+ Shift+, taby otworzyć nową kartę w bieżącym gnome-terminaloknie . Można go zmodyfikować, aby otworzyć nową kartę z określonym profilem i wykonać dla Ciebie polecenie.

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

Inny

Możesz być kreatywny i spróbować innych rzeczy.

Ta odpowiedź SuperUser używa w zasadzie trochę akrobatów „script-fu”, aby utworzyć tymczasowy gnome-terminalprofil, który służy do otwierania nowego okna. Może być zmodyfikowany do twojego użytku.

Prawdopodobnie możesz użyć tego pytania i odpowiedzi StackOverflow oraz innych akrobatów „script-fu”, aby dynamicznie zmieniać gnome-terminaltytuł za każdym razem, gdy SSH łączy się ze zdalnym hostem. Nie byłby tak widoczny jak zmiany koloru tła / pierwszego planu, ale byłby lepszy od standardowego Terminaltytułu przez cały czas.

Dan Cruz
źródło
6

Działa to w Gnome, JEŚLI chcesz użyć nowego okna terminala gnome dla każdej sesji ssh.

  1. Utwórz nowy profil (z innym kolorem tła) o nazwie „Zdalny”

  2. Wstaw następujące elementy do .bash_aliaseslub.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
    

Teraz sshc remote-machineotwiera nową sesję terminalu gnome z profilem „Zdalny”. spowoduje to rozróżnienie między profilami lokalnymi i zdalnymi.

Aby pomieścić wiele profili / hostów, utwórz wiele profili i umieść w nich coś takiego .bash_aliases:

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

Teraz sshc Productionotworzy nowe okno sesji przy użyciu profilu „Czerwony”, sshc Testotworzy nowe okno sesji przy użyciu profilu „Zielony”, a inni gospodarze będą używać profilu „Domyślny”.

piwonie
źródło
2

Zebranie tutaj wszystkich informacji ze stron stosu *** jest najprostszym rozwiązaniem, jakie znalazłem dla mint mate + mate terminal (tak samo jak dla gnome).

  1. W terminalu wiązania zdefiniuj drugi profil z innym tłem.
  2. Sprawdź, czy działają domyślne klawisze Alt + PageDown / Alt + PageUp powinny zmienić profil, a także tło.
  3. sudo apt get install xdotool

Teraz możesz zmodyfikować / etc / ssh / ssh_config, aby mógł zmienić profil po ustanowieniu każdej sesji ssh:

Host *
  PermitLocalCommand yes
  LocalCommand xdotool key Alt+Page_Down

Teraz, po ustanowieniu każdego połączenia ssh w terminalu, profil zostanie zmieniony i nigdy więcej nie umieścisz niechcianej aktualizacji SQL w produkcyjnej bazie danych :)

Jednak nie ma łatwego rozwiązania, aby przywrócić domyślny profil po zamknięciu połączenia ssh. Ale to dla mnie wygląda wystarczająco i nie szukałem więcej informacji.

Łukasz Frankowski
źródło