Gnomeターミナルのタイトルを「user @ host」に設定することは可能ですか?


22

ターミナルのタイトルを設定して、user@hostどのマシンに接続しているかをウィンドウのタイトルから簡単に確認できるようにします。SSHまたはGNOMEターミナルからこれを行う方法はありますか?

回答:


20

はい。以下は、PS1を使用したbashの例であり、ディストリビューションに依存しないはずです。

具体的には、エスケープシーケンス\[\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のタイトルを設定する方法が多数あることに注意してください。あなたがKDEのkonsoleのを使用している場合たとえば、あなたはに行くことによって、表題の設定を上書きすることができますSettings- > Configure Profiles- > Edit Profile- > Tabsと設定Tab title formatし、Remote tab title format設定を。

Konsoleのタイトルバー設定ダイアログ

さらに、チェックアウトすることもできます。


接続しているすべてのサーバーまたは自分のローカルマシンでこれを設定する必要がありますか?
ナフトゥリケイ

@TKKocheran:シェルを実行しているすべてのマシンでこれを行う必要があります。リモートログインに対して\hのみ行う場合$SSH_CLIENTは、空でない場合にのみそのプロンプトを入力します。
ジル 'SO-悪であるのをやめる'

@TK:はい、接続するすべてのサーバーでこれを設定する必要があります。PS1変数は、ターミナルプログラム(つまり:gnome-terminal)ではなく、現在のシェル(リモートホスト上でも)に対してローカルです。
TrinitronX

Debianを実行していないサーバーでは、これが異なる方法で適用されると思います。あなたの答えを編集して、実行中のサーバー、たとえばFedora / Red Hatの派生物を提供できますか?
ナフトゥリケイ

1
@TK:Ubuntu 11.04マシンからさまざまなホストへのSSHを使用してこれをテストしました...そこでタイトルバーが正しく設定されました...うまくいかない場合は、このシーケンスを先頭に追加してみてください:\[\e]2;\u@\h\a。(また、その情報と私の応答、編集)
TrinitronX

3

これは、リモートサーバーに変更を加えずにリモートサーバーのタイトルとコマンドプロンプトを設定する、使用するSSH bashスクリプトのバージョンです。

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 username hostnameを呼び出すことで呼び出すことができます


SSHログイン後に別のbashのセッションを開始するとき、私はこの作品を疑うけれども(例えばスクリーン使用時)
ローレンスリートフェルト

1

以下は私のために動作します(おそらくgnome-terminalでのみ):

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

ssh_bkupコマンドは、名前が変更された基本的な「ssh」であり、echoコマンドが現在の端末のタイトルを変更した直後に呼び出されます。


エイリアスソリューションは、コマンドの名前を非標準のものに変更するよりも優れていませんか?
Xティエン

これは私にとっても正常に機能します。~/binが私のパスで優先されるため、スクリプトをに配置しました~/bin/ssh。最後の行は、明示的にを呼び出します/usr/bin/ssh。この方法では、他のユーザーsshはそのマシンにログインしたときにまだ標準を使用し、(ホームディレクトリがサーバー、LDAPアカウントにあるため)ログオンしているマシンで機能を取得します。
ゴーティエ

いいですね、@ Gauthier。より良い解決策のようです。
ユーリーマンコフスキー

0

これは別名バージョンです

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'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.