Est-il possible de définir le titre de Gnome Terminal sur «user @ host» pour l'hôte auquel je suis connecté?

22

Je voudrais définir le titre du terminal pour user@hostque je puisse facilement savoir à quelle machine je suis connecté à partir du titre de la fenêtre. Existe-t-il un moyen de le faire depuis SSH ou depuis le terminal GNOME?

Naftuli Kay
la source

Réponses:

20

Oui. Voici un exemple de bash utilisant PS1 qui devrait être distro-agnostique:

Plus précisément, la séquence d'échappement \[\e]0; __SOME_STUFF_HERE__ \a\]présente un intérêt. J'ai modifié cela pour qu'il soit défini dans une variable distincte pour plus de clarté.

# 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

Notez également qu'il peut y avoir de nombreuses façons de définir le titre d'un xterm, selon le programme de terminal que vous utilisez et le shell. Par exemple, si vous utilisez Konsole de KDE, vous pouvez remplacer le paramètre de titre en accédant à Settings-> Configure Profiles-> Edit Profile-> Tabset en définissant les paramètres Tab title formatet Remote tab title format.

Boîte de dialogue des paramètres de la barre de titre Konsole

En outre, vous pouvez consulter:

TrinitronX
la source
Dois-je donc définir cela sur tous les serveurs auxquels je me connecte ou sur ma propre machine locale?
Naftuli Kay
@TKKocheran: Vous devez le faire sur chaque machine sur laquelle vous exécutez un shell. Si vous ne souhaitez le faire que pour les connexions à distance, ne placez \hcette invite que si elle $SSH_CLIENTn'est pas vide.
Gilles 'SO- arrête d'être méchant'
@TK: Oui, vous devrez définir cela sur tous les serveurs auxquels vous vous connectez. La variable PS1 est locale à votre shell actuel (même sur un hôte distant), pas au programme terminal (ie: gnome-terminal) .
TrinitronX
Je suppose que cela s'appliquera différemment sur les serveurs qui n'exécutent pas Debian. Pouvez-vous modifier votre réponse pour fournir des serveurs exécutant, disons, des dérivés de Fedora / Red Hat?
Naftuli Kay
1
@TK: J'ai testé cela en utilisant SSH à divers hôtes d'une machine Ubuntu 11.04 ... Donc , la barre de titre a été mis là correctement ... Si cela ne fonctionne pas, essayez d' ajouter cette séquence à l'avant: \[\e]2;\u@\h\a. (A également modifié ma réponse avec cette information)
TrinitronX
3

Voici une version du script bash SSH que j'utilise qui définit le titre et l'invite de commande du serveur distant sans apporter de modifications au serveur distant.

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"

Vous pouvez l'invoquer en appelant ./my_ssh.sh username hostname

Bière Austin
la source
Je doute que cela fonctionne lors du démarrage d'une autre session bash après la connexion ssh (par exemple lors de l'utilisation de l'écran)
Laurens Rietveld
1

Ce qui suit fonctionne pour moi (probablement uniquement sur gnome-terminal):

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

Où la commande ssh_bkup est simplement «ssh» de base avec un nom modifié, qui est appelé juste après que la commande echo change le titre du terminal actuel.

Yuriy Mankovskiy
la source
une solution d'alias ne serait-elle pas meilleure que de renommer des commandes en quelque chose de non standard?
X Tian
Cela fonctionne bien pour moi, également sur gnome-terminal. ~/bina la priorité sur mon chemin, j'ai donc placé votre script dans mon ~/bin/ssh. La dernière ligne appelle explicitement à /usr/bin/ssh. De cette façon, d'autres utilisateurs utilisent toujours la norme sshlorsqu'ils sont connectés sur cette machine et (puisque nos répertoires personnels sont sur le serveur, les comptes LDAP), j'obtiens la fonctionnalité sur la machine sur laquelle je suis connecté.
Gauthier
Bon appel, @Gauthier. Semble une meilleure solution.
Yuriy Mankovskiy
0

c'est une version alias

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'
Pasquale
la source