web-dev-qa-db-ja.com

別のマシンへのSSHリモートロギング後のターミナルタイトルを修正

現在、1行のPerlコードを使用してターミナルバーのタイトルを変更しています。

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

しかし、別のリモートマシンにsshした後は常に、ホストによってタイトルが変更されます(特に気にする必要はありません)。しかし、接続を終了した後、変更されたタイトルが残ります。これを修正する方法はありますか?基本的に、ローカルで操作する場合は、端末に固定のタイトルを付けます。

私は主にCentOSまたはDebianのいずれかでxfce端末とターミネータを使用しています。ありがとう。

[〜#〜]編集[〜#〜]

別の微妙な点は、すべての端末に同じ名前を付けるのではなく、その場でタイトルを自由に編集したいが、SSHセッションで編集内容を変更できないようにすることです。

18
nye17

ウィンドウのタイトルについては知りませんが、実際にはsshセッションの終了後に、システムにsshセッションの終了で何かをさせようとしています。つまり、そのようには機能しません。基本的に、3つの選択肢があります。

  1. Ssh、つまりsshという名前の実行可能なシェルスクリプトのラッパーを記述します。これは、$ /usr/bin/ssh_が途中に含まれている$ PATHの_exec /usr/bin/ssh $@_よりも優先されます。これにより、オーバーヘッドを最小限に抑えながら、効果的なsshバイナリが実行される前後にシェルにいくつかの処理を実行させることができます。

  2. 選択したSSHソースに対するパッチを作成して、コマンドラインまたはいくつかの構成設定を介して渡されたシェルコマンドを実行するクリーンアップフックを提供します。それが私たちの望みです。

  3. _Prompt_COMMAND_にhistoryの出力を評価させます。基本的に、1に対するより一般的で醜いアプローチ。

6
Bananguin

解決策:いくつかの関数〜/ .bashrcを追加して何かを行うafter 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()

お役に立てば幸いです。

7
phyatt

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

例えば:

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

これらの行を〜/ .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

debianベースのlinuxでうまく動作します

3
hrushikesh

1つの解決策は、sshを実行する前に端末変数をvt100に変更することです。走る

export TERM=vt100

これが機能するのは、通常、初期化スクリプトが端末変数を調べ、xtermの場合はタイトルだけを変更するためです。代替画面、色、そしておそらくあなたが感謝するかもしれないし、しないかもしれない他のいくつかの派手な機能を失います。

ローカル端末をxtermとして保持したい場合は、次のようにsshをエイリアスして、端末変数をその場で変更します

alias ssh='TERM=vt100 /usr/bin/ssh'
2
Viljo Viitanen

SSHを終了すると、他の回答はうまくいきませんでしたが、近づきました。リモートsshセッションを終了すると、setw automatic-renameが追加され、自動で名前が変更され、ウィンドウを終了してリセットする必要がなくなります。 [Jan. 2018-Debian 9]

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

これを私の.bashrcファイルのPS1に追加して、この問題を修正しました。

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

したがって、行全体は次のようになります(私はPSをカスタマイズしました!:

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

それが他の人の役に立つことを願っています。

0
cwiggs

リモートサーバーがDebianの場合、~/.bashrcの最後に以下のコードを挿入します

Prompt_COMMAND='echo -ne "\033]0;${USER}: ${PWD}\007"'
0
Mahendra