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


18

зараз я використовую однорядковий код Perl для зміни назв моїх термінальних рядків,

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

але щоразу після того, як я сшу на інший віддалений комп'ютер, заголовок буде змінено хостом (яким я не особливо переймаюся). Але після виходу з з'єднання модифікований заголовок залишається. Чи є спосіб це виправити? По суті, я хочу фіксовану назву для своїх терміналів при локальній роботі.

Я в основному використовую xfce термінал і термінатор під CentOS або Debian. Спасибі.

EDIT

Ще одна тонкість полягає в тому, що, маючи всі термінали з однаковою назвою, я вважаю за краще мати свободу редагувати їхні заголовки в ході, але лише заборонити сеансу SSH змінювати те, що я редагував.

Відповіді:


6

Я не знаю про заголовки вікон, але я намагався змусити свою систему щось робити по закінченню сеансу ssh - фактично після закінчення сеансу ssh. Якщо коротко: це не працює так. В основному у вас є три варіанти:

  1. Напишіть обгортку навколо ssh, тобто виконуваного сценарію оболонки з назвою, sshякий має перевагу над /usr/bin/sshвашим $ PATH, який містить рядок exec /usr/bin/ssh $@десь посередині. Це дає змогу вашій командній оболонці робити якісь речі до та після запуску ефективного бінарного ssh, при цьому мінімізуючи свою eheadhead мінімум.

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

  3. Have PROMPT_COMMANDоцінити вихід history. В основному більш загальний і більш потворний підхід до 1.


в основному я просто написав простий сценарій, щоб схопити поточний заголовок і зберегти його перед сеансом SSH, а потім відновити заголовок після цього.
nye17

4
@ nye17 Чи можете ви розмістити сценарій рішення, який ви використовували?
Reg Mem

Я розмістив свій сценарій рішення нижче. має бути тісно збігатися з тим, що зробив @ nye17. unix.stackexchange.com/a/341277/112190
фіат

7

Рішення: додайте деякі функції ~ / .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()

Сподіваюся, що це допомагає.


трохи неточно сказати, revertяк ви не перевіряєте, щоб побачити, що було раніше ... якщо ви запитали і зберегли попереднє значення Тхо ;-)
nhed

4

Налаштуйте локальний dotfile оболонки (наприклад, $PROMPT_COMMANDin ~/.bashrc), щоб правильно встановити назву терміналу, використовуючи той самий механізм.

Наприклад:

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

1. prompt_command не має нічого спільного з назвою вашого вікна терміналу, правда? Я встановив prompt_command, але тільки для підказки. 2. Мені все ще потрібен механізм запам'ятовування та активації моїх локальних налаштувань після виходу з журналу ssh.
nye17

Команда підказок просто випромінює необхідну послідовність запуску для вашого терміналу для перейменування його заголовка. :)
Відновіть Моніку

але я також хочу свободу перейменовувати будь-який термінал, який я хочу, а не мати кожну сесію однаковою назвою. На практиці я в основному редагую посібник з заголовком терміналу і сподіваюся, що термінал залишиться з фіксованою назвою навіть після входу / виходу з SSH. Чи є сенс?
nye17

1
Тоді поставте потрібний заголовок у змінну та виведіть це.
Ігнасіо Васкес-Абрамс

Якщо ви використовуєте цю послідовність завершення терміналу для встановлення нульового заголовка (наприклад, export PROMPT_COMMAND="printf '\e]0;\7\n'"), то ваш емулятор термінала може встановити заголовок вікна так, як він вважає за потрібне. Коли ви переходите на віддалений хост, який встановлює назву термінала, ваш емулятор термінала покаже цей заголовок, а під час виходу з системи він повернеться до використання власного заголовка. Принаймні, так працює програма macOS Terminal.
клеймація

3

Додайте ці рядки до ~ / .bashrc

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"

    ;;
*)
    ;;
esac

добре працює з Linux на базі Debian


1
ІТ не встановлює заголовка, хоча ...
Bananguin

Зазвичай це краще використовувати PROMPT_COMMANDзамість використання PS1, оскільки вам не потрібно включати \[ \]брекетинг, і це може усунути деяке котирування.
Кріс Пейдж

2

Одне рішення - змінити термінальну змінну на vt100 перед ssh'ing, наприклад, запустити

export TERM=vt100

Це працює, тому що зазвичай сценарії ініціалізації дивляться на змінну терміналу і лише змінюють його назву, це xterm. Ви втрачаєте альтернативні екрани, кольори та, можливо, деякі інші модні функції, які ви можете або не оціните.

Якщо ви хочете зберегти локальний термінал як xterm, псевдонім ssh змінить змінну термінала на льоту, як

alias ssh='TERM=vt100 /usr/bin/ssh'

це змінює спосіб відображення речей. кольори не показані
npk

0

Я вирішив цю проблему, додавши це до PS1 у моєму файлі .bashrc.

\[\e]2;\u@\H:\w\a\]

Тому вся лінія виглядає так (я налаштував свій PS !:

export PS1='\[\e]2;\u@\H:\w\a\]\n($LOGNAME@$HOSTNAME) \t\n[$PWD]: '

Я сподіваюся, що це допомагає іншим.


Якщо ви використовуєте цю послідовність завершення терміналу для встановлення нульового заголовка (наприклад, export PS1='\[\033]0;\007\]\h:\W \u\$ '), то ваш емулятор термінала може встановити заголовок вікна так, як він вважає за потрібне. Коли ви переходите до віддаленого хоста, який встановлює назву термінала, ваш емулятор термінала покаже, що і коли ви виходите з системи, він повернеться до використання власного заголовка. Принаймні, так працює програма macOS Terminal.
клеймація

0

Інші відповіді не допоможуть мені, коли я виходжу з SSH, але мене зблизили. Додавання setw автоматичного перейменування працює, коли я виходжу з віддаленого сеансу ssh, щоб воно автоматично перейменовувалось і більше не потрібно виходити з вікна для скидання. [Січ. 2018 - Debian 9]

ssh() {
tmux rename-window "$*"
command ssh "$@"
tmux setw automatic-rename
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.