Можно ли установить для заголовка Gnome Terminal значение «user @ host» для любого хоста, к которому я подключен?

22

Я хотел бы установить заголовок терминала, user@hostчтобы я мог легко определить, к какой машине я подключен, из заголовка окна. Есть ли способ сделать это из SSH или из терминала GNOME?

Нафтули Кей
источник

Ответы:

20

Да. Вот пример для bash с использованием PS1, который должен быть дистро-независимым:

В частности, последовательность перехода \[\e]0; __SOME_STUFF_HERE__ \a\]представляет интерес. Я отредактировал это, чтобы установить в отдельной переменной для большей ясности.

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
        # We have color support; assume it's compliant with Ecma-48
        # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
        # a case would tend to support setf rather than setaf.)
        color_prompt=yes
    else
        color_prompt=
    fi
fi

TITLEBAR='\[\e]0;\u@\h\a\]'
# Same thing.. but with octal ASCII escape chars
#TITLEBAR='\[\033]2;\u@\h\007\]'

if [ "$color_prompt" = yes ]; then
    PS1="${TITLEBAR}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]\$ "
else
    PS1="${TITLEBAR}\u@\h:\W\$ "
fi
unset color_prompt force_color_prompt

Также обратите внимание, что может быть много способов установить заголовок xterm, в зависимости от того, какую терминальную программу вы используете и какую оболочку. Например, если вы используете Konsole KDE, вы можете изменить настройки заголовка, перейдя в Settings-> Configure Profiles-> Edit Profile-> Tabsи установив Tab title formatи Remote tab title formatнастройки.

Диалоговое окно настроек Konsole

Кроме того, вы можете проверить:

TrinitronX
источник
Так нужно ли мне устанавливать это на всех серверах, к которым я подключаюсь, или на моей локальной машине?
Нафтули Кей
@TKKocheran: Это нужно делать на каждой машине, где вы запускаете оболочку. Если вы хотите сделать это только для удаленных входов в систему, вставляйте \hэто приглашение, только если $SSH_CLIENTоно не пустое.
Жиль "ТАК - перестань быть злым"
@TK: Да, вам нужно будет установить это на всех серверах, к которым вы подключаетесь. Переменная PS1 является локальной для вашей текущей оболочки (даже на удаленном хосте), а не для программы терминала (то есть: gnome-терминал) .
TrinitronX
Я предполагаю, что это будет применяться по-разному на серверах, на которых не установлен Debian. Можете ли вы отредактировать свой ответ для серверов, работающих, скажем, с производными Fedora / Red Hat?
Нафтули Кей
1
@TK: Я проверил это с помощью SSH для различных хостов из Ubuntu 11.04 машины ... Так что строка заголовка была установлена правильно там ... Если это не сработает, попробуйте добавить эту последовательность на фронт: \[\e]2;\u@\h\a. (Также отредактировал мой ответ с этой информацией)
TrinitronX
3

Вот версия сценария bash SSH, которую я использую, которая устанавливает заголовок и командную строку удаленного сервера без каких-либо изменений на удаленном сервере.

my_ssh.sh:

#!/bin/bash
SETTP='MY_PROMPT="$HOSTNAME:$PWD\$ "'
SETTP="$SETTP;"'MY_TITLE="\[\e]0;$HOSTNAME:$PWD\a\]"'
SETTP="$SETTP;"'PS1="$MY_TITLE$MY_PROMPT"'
ssh -t $1@$2 "export PROMPT_COMMAND='eval '\\''$SETTP'\\'; bash --login"

Вы можете вызвать его, позвонив ./my_ssh.sh имя пользователя имя хоста

Остин Пиво
источник
Я сомневаюсь, что это работает при запуске другого сеанса bash после входа в систему через ssh (например, при использовании screen)
Laurens Rietveld
1

У меня работает следующее (возможно, только на gnome-терминал):

comp@home$ cat /usr/bin/ssh
#!/bin/bash    
echo -ne "\033]0;${1}\007"
ssh_bkup "$@"

Где команда ssh_bkup - это просто базовая команда 'ssh' с измененным именем, которая вызывается сразу после того, как команда echo изменяет заголовок текущего терминала.

Юрий Маньковский
источник
Разве решения псевдонимов не будут лучше, чем переименование команд в нечто нестандартное?
X Тянь
Это прекрасно работает для меня, также gnome-терминал. ~/binимеет приоритет на моем пути, поэтому я поместил ваш скрипт в мой ~/bin/ssh. Последняя строка явно вызывает /usr/bin/ssh. Таким образом, другие пользователи все еще используют стандарт sshпри входе в систему на этом компьютере, и (поскольку наши домашние каталоги находятся на сервере, учетные записи LDAP), я получаю функциональность на любом компьютере, на котором я вошел в систему.
Готье
Хороший звонок, @ Gauthier. Кажется, лучшее решение.
Юрий Маньковский
0

это псевдоним

SETTP='MY_PROMPT="$HOSTNAME:$PWD\$ "'
SETTP="$SETTP;"'MY_TITLE="\[\e]0;$HOSTNAME:$PWD\a\]"'
SETTP="$SETTP;"'PS1="$MY_TITLE$MY_PROMPT"'
SETPC="export PROMPT_COMMAND='eval '\\''$SETTP'\\'; bash --login"

alias myssh='function _myssh(){ ssh -t $1@$2 $SETPC; };_myssh'
Pasquale
источник