Действительно ли возможно установить заголовок Терминала Gnome на “user@host” для любого хоста, с которым я подключен?

Я думаю, Gilles и ответы Cakemox хороши, но только для полноты...

Last login: Fri Mar 18 23:07:28 CET 2011 from max on pts/1

прибывает из pam_lastlog1.

Можно распечатать pam_lastlog информация с помощью lastlog2 команды, например.

$ lastlog -u mikel  
Username         Port     From             Latest
mikel            tty1                      Fri Jan 28 10:58:10 +1100 2011

для локального входа в систему, по сравнению с

Username         Port     From             Latest
mikel            pts/9    mikel-laptop     Sat Mar 19 11:11:58 +1100 2011

для входа в систему SSH.

В моей системе это работает для извлечения его

$ lastlog -u mikel | sed -ne '2{p;q}' | cut -c 27-42
mikel-laptop 

last и w могло быть полезным также, например

$ TTY=$(tty)
$ last -n 1 ${TTY#/dev/} | sed -ne '1{p;q}'
mikel    pts/12       :0.0             Sat Mar 19 11:29   still logged in 


1

документация Linux/FreeBSD для pam_lastlog.
2Linux/FreeBSD lastlog(8) страницы справочника.

22
01.06.2011, 00:20
4 ответа

Да. Вот пример для удара с помощью PS1, который должен быть агностиком дистрибутива:

А именно, escape-последовательность \[\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 titlebar settings dialog

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

20
27.01.2020, 19:43
  • 1
    Я должен установить это на всех серверах, которые я подключаю с или на моей собственной локальной машине? –  Naftuli Kay 01.06.2011, 00:11
  • 2
    @TKKocheran: необходимо сделать это на каждой машине, куда Вы выполняете оболочку. Если Вы только хотите сделать это для удаленных входов в систему, поместить \h в той подсказке, только если $SSH_CLIENT непусто. –  Gilles 'SO- stop being evil' 01.06.2011, 00:19
  • 3
    @TK: Да, необходимо будет установить это на всех серверах, с которыми Вы соединяетесь. Переменная PS1 локальна для Вашей текущей оболочки (даже на удаленном хосте), не терминальная программа (т.е.: терминал гнома). –  TrinitronX 01.06.2011, 00:20
  • 4
    я предполагаю, что это будет применяться по-другому на серверы, не выполняющие Debian. Можно ли отредактировать ответ для обеспечения выполнения серверов, скажем, производных Fedora/Red Hat? –  Naftuli Kay 01.06.2011, 00:29
  • 5
    @TK: Я протестировал это использование SSH к различным хостам от машины Ubuntu 11.04... Таким образом, строка заголовка была установлена правильно там... Если это не работает, попытайтесь добавить эту последовательность к передней стороне: \[\e]2;\u@\h\a. (Также отредактированный мой ответ с той информацией) –  TrinitronX 01.06.2011, 01:14

Вот версия сценария удара 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 имени хоста имени пользователя

3
27.01.2020, 19:43
  • 1
    я сомневаюсь относительно этого, работает при запуске другой сессии удара после ssh вход в систему, хотя (например, при использовании экрана) –  Laurens Rietveld 16.09.2014, 13:23

Это версия псевдонима

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'
0
27.01.2020, 19:43

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

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

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

1
27.01.2020, 19:43

Теги

Похожие вопросы