Чи можна встановити назву терміналу Gnome на "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, залежно від того, яку термінальну програму ви використовуєте та яку оболонку. Наприклад, якщо ви використовуєте консоль KDE, ви можете змінити налаштування заголовка, перейшовши до Settings-> Configure Profiles-> Edit Profile-> Tabsта встановивши параметри Tab title formatта Remote tab title formatналаштування.

Діалогове вікно налаштування панелі заголовків

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


Тож чи потрібно це встановити на всіх серверах, до яких я підключаюсь, або на своїй локальній машині?
Нафтулі Кей

@TKKocheran: Це потрібно робити на кожній машині, де працює оболонка. Якщо ви хочете робити це лише для віддалених входів, \hвведіть це запит лише у тому випадку, якщо $SSH_CLIENTвін не порожній.
Жиль 'ТАК - перестань бути злим'

@TK: Так, вам потрібно буде встановити це на всіх серверах, до яких ви підключаєтесь. Змінна PS1 є локальною для вашої поточної оболонки (навіть на віддаленому хості), а не термінальної програми (тобто: gnome-terminal) .
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, хоча (наприклад, при використанні екрана)
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 Tian

Це добре для мене, також 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'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.