Ich möchte den Terminaltitel user@host
so einstellen, dass ich anhand des Fenstertitels leicht erkennen kann, mit welchem Computer ich verbunden bin. Gibt es eine Möglichkeit, dies von SSH oder vom GNOME-Terminal aus zu tun?
Ich möchte den Terminaltitel user@host
so einstellen, dass ich anhand des Fenstertitels leicht erkennen kann, mit welchem Computer ich verbunden bin. Gibt es eine Möglichkeit, dies von SSH oder vom GNOME-Terminal aus zu tun?
Antworten:
Ja. Hier ist ein Beispiel für Bash mit PS1, das distro-agnostisch sein sollte:
Insbesondere ist die Escape-Sequenz \[\e]0; __SOME_STUFF_HERE__ \a\]
von Interesse. Ich habe dies bearbeitet, um es der Übersichtlichkeit halber in einer separaten Variablen festzulegen.
# 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
Beachten Sie auch, dass es verschiedene Möglichkeiten gibt, den Titel eines xterms festzulegen, je nachdem, welches Terminalprogramm Sie verwenden und welche Shell Sie verwenden. Wenn Sie beispielsweise die Konsole von KDE verwenden, können Sie die Titeleinstellung überschreiben, indem Sie zu Settings
-> Configure Profiles
-> Edit Profile
-> gehen Tabs
und die Einstellungen Tab title format
und Remote tab title format
festlegen.
Darüber hinaus möchten Sie möglicherweise Folgendes überprüfen:
\h
diese Eingabeaufforderung nur ein, wenn sie $SSH_CLIENT
nicht leer ist.
\[\e]2;\u@\h\a
. (Hat auch meine Antwort mit dieser Information bearbeitet)
Hier ist eine Version des von mir verwendeten SSH-Bash-Skripts, mit der der Titel und die Eingabeaufforderung des Remoteservers festgelegt werden, ohne dass Änderungen am Remoteserver vorgenommen werden.
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"
Sie können es aufrufen, indem Sie ./my_ssh.sh Benutzername Hostname aufrufen
Folgendes funktioniert für mich (wahrscheinlich nur auf dem Gnome-Terminal):
comp@home$ cat /usr/bin/ssh
#!/bin/bash
echo -ne "\033]0;${1}\007"
ssh_bkup "$@"
Wobei der Befehl ssh_bkup einfach 'ssh' mit einem geänderten Namen ist, der aufgerufen wird, nachdem der Befehl echo den Titel des aktuellen Terminals geändert hat.
~/bin
hat Priorität in meinem Pfad, also habe ich Ihr Skript in meinem platziert ~/bin/ssh
. Die letzte Zeile ruft explizit auf /usr/bin/ssh
. Auf diese Weise verwenden andere Benutzer nach wie vor den Standard, ssh
wenn sie auf diesem Computer angemeldet sind, und (da sich unsere Basisverzeichnisse auf Servern und LDAP-Konten befinden) erhalte ich die Funktionalität auf jedem Computer, auf dem ich angemeldet bin.
Dies ist eine Alias-Version
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'