Terminaltitel nach SSH-Remote-Logging auf einem anderen Rechner korrigieren

Terminaltitel nach SSH-Remote-Logging auf einem anderen Rechner korrigieren

im Moment verwende ich einen einzeiligen Perl-Code, um die Titel meiner Terminalleisten zu ändern,

print("\e]0;@ARGV\7");

aber jedes Mal, wenn ich per SSH auf einen anderen Remote-Rechner zugreife, wird der Titel vom Host geändert (was mich nicht besonders stört). Aber nachdem ich die Verbindung beende, bleibt der geänderte Titel bestehen. Gibt es eine Möglichkeit, das zu beheben? Im Wesentlichen möchte ich einen festen Titel für meine Terminals, wenn ich lokal arbeite.

Ich verwende hauptsächlich das XFCE-Terminal und den Terminator unter CentOS oder Debian. Danke.

BEARBEITEN

Eine weitere Feinheit besteht darin, dass ich, anstatt allen Terminals denselben Namen zu geben, lieber die Freiheit hätte, ihre Titel spontan zu bearbeiten, aber nur verbieten möchte, dass eine SSH-Sitzung meine Änderungen ändert.

Antwort1

Lösung: Fügen Sie einige Funktionen ~/.bashrc hinzu, um etwas zu tunnachssh- und su-Befehle

function title()
{
   # change the title of the current window or tab
   echo -ne "\033]0;$*\007"
}

function ssh()
{
   /usr/bin/ssh "$@"
   # revert the window title after the ssh command
   title $USER@$HOST
}

function su()
{
   /bin/su "$@"
   # revert the window title after the su command
   title $USER@$HOST
}

Hinweis: Starten Sie Bash nach Änderungen an ~/.bashrc neu.

Beispiel:

# title is "user1@boxA"
ssh boxB  # auto changes title while on boxB to "user1@boxB"
exit
# title returns back to "user1@boxA" because of our title call in ssh()
su - user2 # auto changes title while switched user to user2: "user2@boxA"
exit
# title returns back to "user1@boxA" because of our title call in su()

Hoffentlich hilft das.

Antwort2

Ich weiß nichts über Fenstertitel, aber ich habe versucht, mein System dazu zu bringen, beim Beenden einer SSH-Sitzung etwas zu tun – genauer gesagt, nachdem eine SSH-Sitzung beendet wurde. Kurz gesagt: So funktioniert es nicht. Im Grunde haben Sie drei Möglichkeiten:

  1. Schreiben Sie einen Wrapper um ssh, d. h. ein ausführbares Shell-Skript mit dem Namen ssh, das Vorrang /usr/bin/sshvor $PATH hat, das die Zeile exec /usr/bin/ssh $@irgendwo in der Mitte enthält. Auf diese Weise können Sie Ihre Shell vor und nach der Ausführung der effektiven ssh-Binärdatei einige Dinge tun lassen, während der Overhead auf ein Minimum beschränkt bleibt.

  2. Schreiben Sie einen Patch für die SSH-Quellen Ihrer Wahl, um einen Bereinigungs-Hook bereitzustellen, der einen über die Befehlszeile oder eine Konfigurationseinstellung übergebenen Shell-Befehl ausführt. Das ist, was wir wollen.

  3. Habe PROMPT_COMMANDdie Ausgabe von ausgewertet history. Im Grunde ein allgemeinerer und hässlicherer Ansatz als 1.

Antwort3

Konfigurieren Sie Ihre lokale Shell-Dotfile (z. B. $PROMPT_COMMANDin ~/.bashrc), um den Terminaltitel mit demselben Mechanismus entsprechend festzulegen.

Zum Beispiel:

export PROMPT_COMMAND="printf '\e]0;bash\7\n'"

Antwort4

Andere Antworten würden bei mir nicht funktionieren, wenn ich SSH beende, aber ich bin nah dran. Das Hinzufügen von setw automatic-rename funktioniert, wenn ich eine Remote-SSH-Sitzung beende, sodass sie automatisch umbenannt wird und ich das Fenster zum Zurücksetzen nicht mehr verlassen muss. [Jan. 2018 – Debian 9]

ssh() {
tmux rename-window "$*"
command ssh "$@"
tmux setw automatic-rename
}

verwandte Informationen