Могу ли я изменить свой фоновый терминал в зависимости от имени хоста?

17

Я бы хотел, чтобы цвет моего терминала менялся в зависимости от имени хоста. Мое объяснение этому заключается в основном в том, чтобы иметь и дополнительный способ напомнить себе, на каком сервере я работаю, чтобы я не делал глупостей.

Можно ли как-нибудь использовать стандартный фон баклажанов, если я нахожусь на локальном компьютере, а затем изменить красный, если я использую ssh на производственном веб-сервере или других хостах, которые я могу указать?

Крис
источник
Одна идея - записать изменение переменной среды, которая обрабатывает настройки терминала. Создайте сценарий для каждого места, к которому вы обычно используете ssh, и включите в него изменения параметров, вот руководство, которое может помочь: cyberciti.biz/faq/… - таким образом вы можете просто запустить сценарий, который не только соединит для вас, но настроит терминал для этого конкретного сеанса.
MaQleod
1
На сайте ubuntu есть тот же вопрос: askubuntu.com/questions/13705/… Ума, я не виню тебя, я тоже сначала его не нашел :)
Stefano

Ответы:

9

Вы можете использовать опцию localshmand в ssh / config для запуска команды, когда используется псевдоним. я использую

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

Это зависит от xtermcontrol и вашего термина xterm. Предположительно есть другие приложения для других условий.

Единственная проблема с этим подходом состоит в том, что это происходит, когда вы вызываете ssh. Там нет ничего, чтобы отменить изменение цвета. Я сделал это, обернув функцию вокруг ssh, но у этого тоже есть свои недостатки.

function ssh() {
  FG=$(xtermcontrol --get-fg)
  BG=$(xtermcontrol --get-bg)
  $(which ssh) "$@"
  xtermcontrol --fg="$FG"
  xtermcontrol --bg="$BG"
}
valadil
источник
7

Кажется, что нет никакой функциональности, gnome-terminalчтобы добавить новую вкладку в существующее окно из командной строки. Но есть несколько вариантов, чтобы выполнить то, что вы хотите.

По профилям команд

Создайте новый gnome-terminalпрофиль для каждого хоста, с которым вы будете работать по SSH. Если у вас есть только несколько хостов, к которым вы регулярно подключаетесь, это может быть самым простым. Каждый профиль может иметь разные заголовок, цвет переднего плана, цвет фона, пользовательские команды и другие параметры. Затем вы можете использовать, File -> Open Tabчтобы открыть новую вкладку с выбранным профилем.

Повторно используемый профиль

Создайте новый gnome-terminalпрофиль, который будет использоваться для открытия нового окна каждый раз, когда вы хотите подключиться к другому хосту SSH (на основе этого ответа AskUbuntu, на который указал Стефано ). Это будет хорошо работать, если вы часто подключаетесь к разным хостам. Это не позволит вам различать разные gnome-terminalокна, где вы подключены к разным хостам, только по цветам фона / переднего плана, но у вас будет разный заголовок для каждого окна.

  1. Создайте новый gnome-terminalпрофиль ( File -> New Profile) на основе Defaultпрофиля и назовите его «RemoteHost» (обратите внимание, в «RemoteHost» нет пробелов, чтобы упростить команды).
  2. Под Title and Commandвкладкой измените:
    1. Initial title: на «Удаленный хост»
    2. When terminal commands set their own titles: в Replace initial title
  3. Под Colorsвкладкой измените:
    1. Uncheck Use colors from system theme
    2. Build-in schemes: в Custom
    3. Text color:и Background color:цвета по вашему выбору. Имейте в виду, что некоторые команды (например ls) используют цвета для своего вывода, и вы не хотите выбирать цвета, которые затруднят чтение выходных данных.
  4. Нажмите на Closeкнопку, чтобы сохранить ваш новый профиль.
  5. Теперь вы можете открыть новое gnome-terminalокно для каждого удаленного хоста SSH с помощью команды gnome-terminal --window-with-profile=RemoteHost -t "Some Remote SSH Host" -x ssh user@somehost. -tОпция устанавливает gnome-terminalзаголовок окна и -xопция выполняет остальную часть командной строки в терминале. Вы могли бы даже сделать, aliasчтобы сократить общее количество нажатий клавиш.

Командная строка

Я нашел эту запись в блоге с помощью следующего сценария , который использует xdotoolи wmctrlкоманды (они не были установлены по умолчанию в Ubuntu, так что вам , возможно , потребуется установить их первый) использовать gnome-terminal Ctrl+ Shift+ tклавиши быстрого доступа , чтобы открыть новую вкладку в текущем gnome-terminalокне , Его можно изменить, чтобы открыть новую вкладку с определенным профилем и выполнить некоторую команду для вас.

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

Другой

Вы можете проявить творческий подход и попробовать другие вещи.

Этот ответ SuperUser в основном использует немного акробатов «script-fu» для создания временного gnome-terminalпрофиля, который используется для открытия нового окна. Он может быть изменен для вашего использования.

Возможно, вы могли бы использовать эти вопросы и ответы StackOverflow и другие акробаты «script-fu» для динамического изменения gnome-terminalзаголовка всякий раз, когда вы подключаетесь к удаленному хосту по SSH. Он не будет таким заметным, как изменения цвета фона / переднего плана, но все время будет лучше, чем стандартный Terminalзаголовок.

Дэн Круз
источник
6

Это будет работать в Gnome, ЕСЛИ вы готовы использовать новое окно gnome-терминала для каждой сессии ssh.

  1. Создайте новый профиль (с другим цветом фона) под названием «Удаленный»

  2. Вставьте следующее в .bash_aliasesили.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-machineоткрывается новый сеанс gnome-терминала с профилем «Удаленный». это будет отличать локальные и удаленные профили.

Чтобы разместить несколько профилей / хостов, создайте несколько профилей и поместите в них что-то вроде этого .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

Теперь sshc Productionоткроется новое окно сеанса с использованием «красного» профиля, sshc Testоткроется новое окно сеанса с помощью «зеленого» профиля, а другие хосты будут использовать профиль «по умолчанию».

peonicles
источник
2

Сбор всей информации со стековых *** сайтов здесь - самое простое решение, которое я нашел для терминала mint mate + mate (так же, как для gnome).

  1. В терминале сопряжения определите второй профиль с другим фоном.
  2. Проверьте, работают ли клавиши по умолчанию. Alt + PageDown / Alt + PageUp должны изменить профиль, а также фон.
  3. sudo apt get install xdotool

Теперь вы можете изменить / etc / ssh / ssh_config, чтобы он мог изменять профиль после каждой сессии ssh:

Host *
  PermitLocalCommand yes
  LocalCommand xdotool key Alt+Page_Down

Теперь, после того как каждое ssh-соединение установлено в терминале, профиль будет изменен, и вы больше никогда не будете помещать нежелательное обновление sql в производственную базу данных :)

Однако нет простого решения вернуться к профилю по умолчанию после закрытия ssh-соединения. Но это выглядит достаточно для меня, и я не стал искать дополнительную информацию.

Лукаш Франковски
источник