Kann ich die Terminalfarben meines lokalen Computers so einstellen, dass sie die des Computers verwenden, in den ich ssh bin?

7

Ich habe ein Farbschema, das mir gefällt, wenn ich in einem Terminal bin, aber ich ssh in die Maschine, an der ich arbeite, aus mehreren Quellen (lokal, PuTTY, mein Netbook usw.) und ich möchte das gleiche Farbschema beibehalten . Ist das möglich?

Ich möchte es besonders in PuTTY; Es ist schwierig, die PuTTY-Farben zu ändern.

Gletscher
quelle

Antworten:

9

Die Farben in den Anschlüssen werden in zwei Schritten bestimmt:

  • Das im Terminal ausgeführte Programm weist das Terminal an, eine bestimmte Farbnummer zu verwenden.
  • Das Terminal übersetzt jede Farbnummer in einen Farbwert.

Xterm verfügt über eine Escape-Sequenz , um den einer Farbnummer zugeordneten Farbwert zu ändern. Ich kann mich nicht erinnern, ob PuTTY diese Sequenz unterstützt. Ich weiß, dass Mintty es tut.

set_color_value () {
  printf "\\e]4;$1;$2\\a"
}
set_color_value 4 '#6495ed'  # set color 4 (blue) to CornflowerBlue

Diese Einstellungen überleben einen Terminal-Reset nicht. Sie können diese Schwierigkeit überwinden, indem Sie die Änderungssequenz der Cursorkonfiguration an die Rücksetzzeichenfolge Ihres Terminals anhängen.

  • Speichern Sie auf einem terminfo-basierten System mit ncurses die terminfo-Einstellungen Ihres Terminals in einer Datei mit infocmp >>~/etc/terminfo.txt. Bearbeiten Sie die Beschreibung, um die rs1Reihenfolge (Grundreset) zu ändern , z . B. Ersetzen rs1=\Ecdurch rs1=\Ec\E]4;4;#6495ed\E\\. Bei einigen Programmen und Einstellungen müssen Sie möglicherweise auch den rs2(vollständigen Reset) ändern . Kompilieren Sie dann die terminfo-Beschreibung mit tic ~/etc/terminfo.txt(dies schreibt unter das Verzeichnis $TERMINFOoder ~/.terminfowenn nicht gesetzt).
  • Rufen Sie auf einem termcap-basierten System (normalerweise /etc/termcap) die termcap-Einstellungen aus Ihrer termcap-Datenbank ab . Ändern Sie die Sequenzen is(Basic Reset) und rs(Full Reset), um Ihre Einstellungen anzuhängen, z :is=\Ec\Ec\E]4;4;#6495ed\E\\:. Setzen Sie die TERMCAPUmgebungsvariable auf den bearbeiteten Wert (beginnend und endend mit :).

Jetzt können Sie so etwas in Ihre ~/.profile:

if [ "$(ps -p $PPID -o comm=)" = sshd ] &&
   [ "$TERM" = "xterm" ]; then
  set_color_value … # set color scheme
  TERMCAP=…  # if necessary
fi
Gilles 'SO - hör auf böse zu sein'
quelle
es sei denn, ich verstehe seine Frage falsch ... Ich denke, das hat die Dinge viel zu kompliziert gemacht.
Xenoterracide
@ Xeno: Ich denke, Sie verstehen die Frage falsch. Ich glaube, Gilles hat es richtig gemacht.
sepp2k
@ sepp2k könnte sein
Xenoterracide
Das ist ein bisschen über meinem Kopf; Ich bin noch ziemlich neu in Linux. Soll ich den Code für set_color_value () in meine .bashrc einfügen? Und woher weiß ich, ob ich terminfo oder termcap verwende?
Gletscher
1
@ skoh-fley: Beginnen Sie damit, das set_color_valueZeug in Ihre .bashrc. Wenn Sie sich bei .bashrcvs .profilevs nicht sicher sind .bash_profile, suchen Sie auf dieser Website nach Super User und Ask Ubuntu, wo das Thema ausführlich besprochen wurde. Möglicherweise verschwindet das Farbschema, wenn Sie eine Vollbildanwendung starten. Nur dann sollten Sie sich Gedanken über das Zurücksetzen des Terminals machen. Wenn Sie nicht wissen, haben Sie wahrscheinlich terminfo.
Gilles 'SO - hör auf böse zu sein'
0

Du bist sshin nur einer Kiste, oder? Warum setzen Sie nicht einfach die PS1Variable in diesem Feld, um das gewünschte Farbschema zu verwenden? Wenn Sie es auf 16 Farben halten , sollten Sie kein Problem auf jedem modernen haben TERM, die meisten 256 Farben unterstützen sollte, aber die meisten nicht gesetzt TERM=xterm-256coloraus der Box, und einige Narren ( Husten mein Arbeitgeber Husten ) sanieren TERMalphanumerisches sein nur. Leider PShängt das, was Sie in Ihre Vars einfügen, stark von der verwendeten Shell ab.

Xenoterracid
quelle
Entschuldigung, aber wenn ich richtig verstehe, ist PS1 nur für die Eingabeaufforderung, oder? Ich möchte alles ändern - Hintergrund, Text, Vim usw.
Glacials
@xenoterracide Wenn Sie diese Variable auf einer Remote-Box festlegen und dann von einer Box ohne Farben in ssh einsteigen, erhalten Sie die farbige Ausgabe?
Startec
Wenn der Terminalemulator es ja unterstützt
Xenoterracide