Codierung des Terminals mit einem Befehl umschalten

24

Einer der Server, auf denen ich häufig sshWestern-Codierung anstelle von utf-8 verwende (und das kann ich auf keinen Fall ändern).

Ich habe angefangen, ein Bash-Skript zu schreiben, um eine Verbindung zu diesem Server herzustellen, damit ich nicht jedes Mal die gesamte Adresse eingeben muss, aber ich möchte dieses Skript verbessern, damit auch die Codierung des Terminalfensters korrekt geändert wird.

Die Änderung, die ich vornehmen muss, kann mit der Maus durchgeführt werden, indem Sie zu "Terminal" -> "Set Character Encoding ..." -> "Western (ISO-8859-1)" navigieren. Gibt es einen Terminalbefehl, der dasselbe für das aktuelle Terminalfenster / den aktuellen Terminalbildschirm ausführt?

Zur Verdeutlichung:
Ich habe kein Interesse daran, das Gebietsschema des Systems auf der Remote-Site zu ändern - das System wird von einer anderen Person verwaltet, und ich habe keine Ahnung, welche Dinge von der dortigen Latin-1-Codierung abhängen könnten. Was ich tun möchte, ist, dieses Terminalfenster auf meiner Seite die Zeichenkodierung auf die oben erwähnte Weise umschalten zu lassen , genauso wie ich es mit meiner Maus und den Menüs tun kann.

Tomas Aschan
quelle
Gute Frage! Codierungsprobleme sind oft eine PITA ... Dies ist eine Methode, die nicht funktioniert ... unix.stackexchange.com/questions/8859/…
lumbric
2
AUS wie ist es möglich, dass meine Antwort angenommen wird, aber die Prämie zu einem anderen ging? :) :(
törzsmókus
1
@ törzsmókus: Über die (neuen?) Kopfgeldregeln können Sie hier nachlesen : blog.stackoverflow.com/2010/06/improvements-to-bounty-system Wenn der Kopfgeldbesitzer das Kopfgeld nicht innerhalb der 7-tägigen Kopfgeldfrist vergibt, wird die Es gelten die gleichen Regeln für das automatische Annehmen von Prämien: Alle Antworten auf die nach dem Start der Prämie gestellten Fragen mit mindestens zwei positiven Stimmen sind für das automatische Annehmen berechtigt und verdienen die Hälfte des Prämienbetrags. Wenn es keine Antworten gibt, die diese Kriterien erfüllen, wird keine Prämie gewährt. - und wieder sind alle Kopfgelder völlig unabhängig von der Annahme einer Antwort und haben nichts damit zu tun.
Rune

Antworten:

18

Sie suchen luitwelche für diesen Zweck entwickelt wurden:

$ luit -encoding ISO-8859-1 ssh remote.host

Die Ausgabe des Befehls ssh wird in UTF-8 konvertiert, sodass Sie die Codierung des Terminals nicht ändern müssen.

törzsmókus
quelle
2
Das ist richtig. Ich bin jedoch hier gelandet und habe nach diesem Teil der Manpage von luit gesucht: "Luit wird normalerweise vom Terminal-Emulator transparent aufgerufen." Wenn Sie also hier ankommen, weil Sie eine falsche Codierung in Ihrem Terminal erhalten, können Sie diese normalerweise beheben, indem Sie die Codierung über den Terminalemulator ändern.
Joseph_Morris
@ Joseph_Morris Lassen Sie mich auf den dritten Absatz der Frage verweisen, die beantwortet wird. Das OP wusste zwar , wie man die Codierung über die Menübefehle des Terminalemulators ändert (das nennt man "normal"), aber er suchte nach einer CLI-Alternative.
Törzsmókus
1
Richtig, deshalb habe ich mit "Das ist richtig" angefangen. Diese Seite ist jetzt jedoch einer der Top-Hits für "Terminal-Codierung", und ich dachte, dass ein bisschen Luit-Dokumentation für andere hilfreich wäre, die hier ankommen und versuchen zu antworten: "Warum ist meine Terminal-Codierung durcheinander?" - und dass die Codierung normalerweise im Emulator geändert wird, nicht im CLI.
Joseph_Morris
Ah, jetzt verstehe ich deinen Standpunkt.
Törzsmókus
4

Bearbeiten Sie zuerst die aktuellen Ländereinstellungen in Ihrem bevorzugten Editor

sudo gedit /var/lib/locales/supported.d/local zu so etwas wie

en_GB.UTF-8 UTF-8
en_US.UTF-8 UTF-8
en_GB.ISO-8859-1 ISO-8859-1
en_US.ISO-8859-1 ISO-8859-1

Dann renne sudo dpkg-reconfigure locales

Dann Terminal mit einstellen LANG=en_GB.ISO-8859-1

Hoffe das klappt

Jonathan
quelle
4

Gnome Terminal verwendet gconf, um Einstellungen zu speichern. Diese können mit manipuliert werden. gconftoolSo können Sie Folgendes verwenden:

gconftool --set --type=string /apps/gnome-terminal/profiles/Default/encoding ISO-8859-1

Ich habe das am 12.04 getestet. Aus irgendeinem Grund "Terminal"->"Set Character Encoding..."scheint das Menü ( ) nicht in Echtzeit aktualisiert zu werden, aber die tatsächliche Zeichenkodierung wird korrekt aktualisiert.

undetwas
quelle
2
Dies ändert jedoch die Standardcodierung für alle Terminals, nicht nur für das Terminal, auf dem das ssh-Verbindungsskript ausgeführt wird.
Törzsmókus
3

Ich weiß nicht, wie ich es testen soll, aber mit Konsole unter Kubuntu kann ich Folgendes tun:

1) Suchen Sie die bei dbus registrierte Anwendung

$ qdbus

Ich benutze konsoleso ein einfaches qdbus | grep konsgibt mirorg.kde.konsole

2) Aktuelle Sitzungen in Konsole suchen

$ qdbus org.kde.konsole | grep Sessions
/Sessions
/Sessions/1

$ set | grep -i sessions
KONSOLE_DBUS_SESSION=/Sessions/1

3) Finden Sie nützliche Methoden

$ qdbus org.kde.konsole /Sessions/1 | grep -i codec
method QByteArray org.kde.konsole.Session.codec()
method bool org.kde.konsole.Session.setCodec(QByteArray codec)

4) Überprüfen Sie die aktuelle Kodierung

$ qdbus org.kde.konsole /Sessions/1 org.kde.konsole.Session.codec
UTF-8

5) Stellen Sie die Codierung ein

$ qdbus org.kde.konsole /Sessions/1 org.kde.konsole.Session.setCodec ISO-8859-1
true

6) Überprüfen Sie die aktuelle Kodierung

$ qdbus org.kde.konsole /Sessions/1 org.kde.konsole.Session.codec
ISO-8859-1

Ubuntu wird ein ähnliches Terminalprogramm haben, aber Sie müssen sich einige Rätsel mit dem korrekten Dienstnamen, Pfad, Methode und Argumenten machen.

jippie
quelle
2

Hier ist eine andere Lösung, mit der ich das Profil (für die Hintergrundfarbe) beim Herstellen einer Verbindung zu einem Produktionsserver geändert habe. Es geht darum xdotool.

xdotoolsimuliert die Tastenanschläge, die zum Auswählen des gewünschten Menüelements erforderlich sind. Probieren Sie es zuerst mit Ihrer Tastatur aus und notieren Sie sich dann die Reihenfolge:

$ xdotool key alt+t Down c Down Return

Es wird die erste Zeichenkodierung aktiviert. Fügen Sie Downvor dem weitere Schlüssel hinzu Return, um andere auszuwählen.

Hinweis: sshSie können auch eine ~/.ssh/configDatei verwenden, um Aliase für Ihre Server zu konfigurieren.

nniico
quelle
Entschuldigung - Ich wollte Ihnen die Kopfgeld-Vertretung geben, habe aber auf den falschen Beitrag geklickt = (
Tomas Aschan
da sich das menü von gnome-terminal garantiert nicht ändert, halte ich dies für einen höchst fragilen hack, der das richtige sein könnte, wenn es keine tatsächliche lösung gibt. aber da ist einer .
Törzsmókus
1

Auf xterm, die Codierung ändern durch Verwendung von Kontrollsequenzen . Zum Beispiel erhalten bashSie den UTF-8-Zeichensatz, indem Sie Folgendes ausführen:

echo -n $'\e%G'

Auf die ISO 8859-1-Codierung kann folgendermaßen zugegriffen werden:

echo -n $'\e%@'
vsnprintf
quelle