SSH Telnet後に他のシステムに端末のタイトルを変更する

SSH Telnet後に他のシステムに端末のタイトルを変更する

これで、Perlコード行を使用して端末バーのタイトルを変更しています。

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

ただし、他のリモートシステムにSSHを接続するたびに、ホストによってヘッダーが変更されます(この点については特に心配しません)。ただし、接続を終了した後も変更されたタイトルがまだ存在します。この問題を解決する方法はありますか?デフォルトでは、ローカルで動作しているときに端末の固定タイトルを持ちたいと思います。

私は主にCentOSやDebianでxfceターミナルとターミネーターを使います。ありがとうございます。

編集する

もう1つの微妙な点は、すべての端末の名前を同じにするよりも、タイトルを即座に自由に編集できますが、編集内容を変更する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
}

注:〜/ .bashrcを編集してbashを再起動してください。

例:

# 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セッションが終了した後です。簡単に言えば、そのようには機能しません。デフォルトでは3つのオプションがあります。

  1. ssh$ PATHよりも優先され、中間のどこかに行を含む実行可能なシェルスクリプトであるsshの周りにラッパーを作成します/usr/bin/sshexec /usr/bin/ssh $@これにより、オーバーヘッドを最小限に抑えながら、有効なSSHバイナリが実行される前後にシェルにいくつかのタスクを実行させることができます。

  2. コマンドラインまたはいくつかの構成設定で渡されたシェルコマンドを実行するクリーンアップフックを提供する必要なSSHソースのパッチを作成します。これが私たちが望むものです。

  3. 評価PROMPT_COMMAND結果history。基本的に、より一般的で醜いアプローチ 1.

答え3

同じメカニズムを使用してローカルシェルドットファイル(たとえば$PROMPT_COMMAND)を設定して、端末のタイトルを適切に設定します。~/.bashrc

たとえば、

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

答え4

SSHを終了したとき、他の答えは機能しませんでしたが、近づきました。 setw自動名前変更を追加すると、リモートSSHセッションを終了するときに機能するため、自動的に名前が変更されるため、リセットするためにウィンドウを終了する必要はありません。 [1月。 2018 - Debian 9]

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

関連情報