Исправлен заголовок терминала после удаленного входа по протоколу SSH на другую машину

Исправлен заголовок терминала после удаленного входа по протоколу SSH на другую машину

Сейчас я использую однострочный код Perl для изменения заголовков панелей терминала,

print("\e]0;@ARGV\7");

но каждый раз после того, как я подключаюсь по ssh к другой удаленной машине, заголовок будет изменен хостом (что меня не особо беспокоит). Но после того, как я выхожу из соединения, измененный заголовок остается. Есть ли способ это исправить? по сути, я хочу фиксированный заголовок для своих терминалов при локальной работе.

Я в основном использую xfce terminal и terminator либо под CentOS, либо под Debian. Спасибо.

РЕДАКТИРОВАТЬ

Еще одна тонкость заключается в том, что вместо того, чтобы присваивать всем терминалам одинаковые имена, я бы предпочел иметь возможность редактировать их заголовки «на лету», но запретить сеансу SSH изменять только то, что я отредактировал.

решение1

Решение: добавьте несколько функций ~/.bashrc, чтобы что-то сделатьпослекоманды ssh и su

function title()
{
   # change the title of the current window or tab
   echo -ne "\033]0;$*\007"
}

function ssh()
{
   /usr/bin/ssh "$@"
   # revert the window title after the ssh command
   title $USER@$HOST
}

function su()
{
   /bin/su "$@"
   # revert the window title after the su command
   title $USER@$HOST
}

Примечание: перезапустите bash после редактирования ~/.bashrc

Пример:

# title is "user1@boxA"
ssh boxB  # auto changes title while on boxB to "user1@boxB"
exit
# title returns back to "user1@boxA" because of our title call in ssh()
su - user2 # auto changes title while switched user to user2: "user2@boxA"
exit
# title returns back to "user1@boxA" because of our title call in su()

Надеюсь, это поможет.

решение2

Я не знаю о заголовках окон, но я пытался заставить свою систему делать что-то при завершении сеанса ssh — на самом деле, после завершения сеанса ssh. Короче говоря: это так не работает. По сути, у вас есть три варианта:

  1. Напишите оболочку вокруг ssh, т. е. исполняемый скрипт оболочки с именем ssh, который имеет приоритет над /usr/bin/ssh$PATH, содержащим строку exec /usr/bin/ssh $@где-то в середине. Это позволяет вам заставить вашу оболочку делать что-то до и после запуска эффективного бинарного файла ssh, при этом сводя накладные расходы к минимуму.

  2. Напишите патч для источников SSH по вашему выбору, чтобы предоставить вам хук очистки, который выполняет команду оболочки, переданную через командную строку или некоторые настройки конфигурации. Это то, что нам нужно.

  3. Оценить PROMPT_COMMANDвывод history. По сути, более общий и более уродливый подход к 1.

решение3

Настройте локальный dotfile оболочки (например, $PROMPT_COMMANDв ~/.bashrc), чтобы правильно задать заголовок терминала, используя тот же механизм.

Например:

export PROMPT_COMMAND="printf '\e]0;bash\7\n'"

решение4

Другие ответы не сработали бы для меня, когда я выхожу из SSH, но приблизили меня к этому. Добавление setw automatic-rename работает, когда я выхожу из удаленного сеанса ssh, поэтому он автоматически переименовывает и больше не нужно выходить из окна для сброса. [Янв. 2018 - Debian 9]

ssh() {
tmux rename-window "$*"
command ssh "$@"
tmux setw automatic-rename
}

Связанный контент