Kann der Titel von Gnome Terminal für jeden Host, mit dem ich verbunden bin, auf "user @ host" gesetzt werden?


22

Ich möchte den Terminaltitel user@hostso 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:


20

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 Tabsund die Einstellungen Tab title formatund Remote tab title formatfestlegen.

Konsolen-Titelleisten-Einstellungsdialog

Darüber hinaus möchten Sie möglicherweise Folgendes überprüfen:


Muss ich dies auf allen Servern einstellen, mit denen ich eine Verbindung herstelle, oder auf meinem eigenen lokalen Computer?
Naftuli Kay

@TKKocheran: Sie müssen dies auf jedem Computer tun, auf dem Sie eine Shell ausführen. Wenn Sie dies nur für Remoteanmeldungen tun möchten, geben Sie \hdiese Eingabeaufforderung nur ein, wenn sie $SSH_CLIENTnicht leer ist.
Gilles 'SO- hör auf böse zu sein'

@TK: Ja, Sie müssen dies auf allen Servern einstellen, zu denen Sie eine Verbindung herstellen. Die PS1-Variable ist lokal für Ihre aktuelle Shell (auch auf einem Remote-Host) und nicht für das Terminal-Programm (dh: gnome-terminal) .
TrinitronX

Ich gehe davon aus, dass dies auf Servern, auf denen Debian nicht läuft, anders sein wird. Können Sie Ihre Antwort bearbeiten, um Server bereitzustellen, auf denen beispielsweise Fedora / Red Hat-Derivate ausgeführt werden?
Naftuli Kay

1
@TK: Ich habe dies mit SSH auf verschiedenen Hosts von einem Ubuntu 11.04-Computer aus getestet ... Die Titelleiste wurde dort also richtig eingestellt \[\e]2;\u@\h\a. (Hat auch meine Antwort mit dieser Information bearbeitet)
TrinitronX

3

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


Ich bezweifle, dass dies funktioniert, wenn eine weitere Bash-Sitzung nach dem SSH-Login gestartet wird (z. B. bei Verwendung des Bildschirms)
Laurens Rietveld,

1

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.


Wäre eine Alias-Lösung nicht besser, als Befehle in nicht standardisierte Befehle umzubenennen?
X Tian

Dies funktioniert gut für mich, auch Gnome-Terminal. ~/binhat 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, sshwenn 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.
Gauthier

Guter Anruf, @Gauthier. Scheint eine bessere Lösung zu sein.
Yuriy Mankovskiy

0

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'
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.