Je voudrais définir le titre du terminal pour user@host
que 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?
Je voudrais définir le titre du terminal pour user@host
que 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?
Réponses:
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
-> Tabs
et en définissant les paramètres Tab title format
et Remote tab title format
.
En outre, vous pouvez consulter:
\h
cette invite que si elle $SSH_CLIENT
n'est pas vide.
\[\e]2;\u@\h\a
. (A également modifié ma réponse avec cette information)
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
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.
~/bin
a 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 ssh
lorsqu'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é.
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'