Changer l'encodage du terminal avec une commande

24

L'un des serveurs que j'utilise très souvent sshutilise le codage occidental au lieu de utf-8 (et il n'y a aucun moyen que je puisse changer cela).

J'ai commencé à écrire un script bash pour me connecter à ce serveur, donc je n'aurai pas à taper l'adresse entière à chaque fois, mais je voudrais améliorer ce script pour qu'il modifie également l'encodage de la fenêtre de terminal correctement.

Le changement que je dois faire peut être effectué à l'aide de la souris en naviguant vers "Terminal" -> "Définir l'encodage des caractères ..." -> "Western (ISO-8859-1)". Existe-t-il une commande de terminal qui fait la même chose, pour la fenêtre / l'écran du terminal actuel?

Pour clarifier:
je ne suis pas intéressé par les moyens de changer les paramètres régionaux du système sur le site distant - ce système est administré par quelqu'un d'autre, et je n'ai aucune idée de ce qui pourrait dépendre de l'encodage latin-1. Ce que je veux faire, c'est laisser cette fenêtre de terminal sur mon côté changer de codage de caractères pour ce qui est mentionné ci-dessus, de la même manière que je peux le faire avec ma souris et les menus.

Tomas Aschan
la source
Bonne question! Les problèmes d'encodage sont souvent un PITA ... C'est un moyen qui ne fonctionnera pas ... unix.stackexchange.com/questions/8859/…
lumbric
2
OFF comment est-il possible que ma réponse soit acceptée mais la prime est allée à une autre? :) :(
törzsmókus
1
@ törzsmókus: Vous pouvez en savoir plus sur les (nouvelles?) règles de prime ici: blog.stackoverflow.com/2010/06/improvements-to-bounty-system Si le propriétaire de la prime n'octroie pas la prime dans le délai de 7 jours, la les mêmes règles d'attribution automatique s'appliquent, comme précédemment: toutes les réponses à la question postée après le début de la prime, avec au moins 2 votes positifs, sont éligibles pour l'acceptation automatique et gagnent la moitié du montant de la prime. S'il n'y a pas de réponses répondant à ces critères, aucune prime n'est accordée. - et, encore une fois, toutes les primes sont complètement indépendantes et sans rapport avec l'acceptation d'une réponse.
Rune

Réponses:

18

Vous recherchez luitce qui est conçu à cet effet:

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

Il convertira la sortie de la commande ssh en UTF-8 afin que vous n'ayez pas besoin de changer l'encodage du terminal.

törzsmókus
la source
2
C'est correct. Cependant, j'ai atterri ici à la recherche de ce morceau de la page de manuel de luit: "Luit est généralement invoqué de manière transparente par l'émulateur de terminal." Donc, pour ceux qui arrivent ici parce que vous obtenez un mauvais codage à travers votre terminal, la façon normale de le corriger est de changer le codage via l'émulateur de terminal.
joseph_morris
@joseph_morris permettez-moi de vous indiquer le troisième paragraphe de la question à laquelle il est répondu. l'OP ne sait comment changer l'encodage en utilisant les commandes de menu de l'émulateur de terminal (que vous appelez la voie « normale ») , mais il était à la recherche d'une alternative CLI.
törzsmókus
1
C'est pour ça que j'ai commencé avec "C'est correct". Cependant, cette page est maintenant l'un des meilleurs hits pour "l'encodage du terminal", et je pensais que ce peu de documentation luit serait utile pour ceux qui arrivent ici en essayant de répondre "Pourquoi mon encodage du terminal est-il foiré?" - et que le codage est généralement modifié dans l'émulateur, pas CLI.
joseph_morris
ah, maintenant je vois votre point.
törzsmókus
4

Modifiez d'abord les paramètres régionaux actuels dans votre éditeur préféré

sudo gedit /var/lib/locales/supported.d/local à quelque chose comme

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

Ensuite, exécutez sudo dpkg-reconfigure locales

Réglez ensuite le terminal avec LANG=en_GB.ISO-8859-1

J'espère que ça marche

Jonathan
la source
4

Gnome Terminal utilise gconf pour stocker les paramètres. Ceux-ci peuvent être manipulés avec gconftoolSo, vous pouvez utiliser:

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

J'ai testé cela le 12.04. Pour une raison quelconque, le menu ( "Terminal"->"Set Character Encoding...") ne semble pas être mis à jour en temps réel, mais l'encodage réel des caractères est correctement mis à jour.

andrewsomething
la source
2
mais cela change l'encodage par défaut pour tous les terminaux, pas seulement celui qui exécute le script de connexion ssh.
törzsmókus
3

Je ne sais pas comment le tester, mais avec Konsole sur Kubuntu, je peux faire ce qui suit:

1) Trouver une application enregistrée sur dbus

$ qdbus

J'utilise konsoledonc un simple qdbus | grep konsme donneorg.kde.konsole

2) Trouvez les sessions en cours à Konsole

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

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

3) Trouvez des méthodes utiles

$ 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) Vérifier l'encodage actuel

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

5) Définir l'encodage

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

6) Vérifiez l'encodage actuel

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

Ubuntu aura un programme de terminal similaire, mais vous devrez vous intriguer avec le nom de service, le chemin, la méthode et les arguments corrects.

jippie
la source
2

Voici une autre solution que j'ai utilisée pour changer le profil (pour la couleur d'arrière-plan) lors de la connexion à un serveur de production. Cela implique xdotool.

xdotoolsimulera les frappes nécessaires pour sélectionner l'élément de menu souhaité. Essayez-le d'abord avec votre clavier, puis notez la séquence:

$ xdotool key alt+t Down c Down Return

Il activera le premier codage de caractères. Ajoutez d'autres Downclés avant de Returnpour en sélectionner une autre.

Remarque: pour ssh, vous pouvez également utiliser un ~/.ssh/configfichier pour configurer les alias de vos serveurs.

nniico
la source
Désolé - je voulais vous donner le représentant des primes, mais j'ai cliqué sur le mauvais message = (
Tomas Aschan
comme le menu de gnome-terminal n'est pas garanti de ne pas changer, je considère que c'est un hack très fragile, ce qui pourrait être la bonne chose quand il n'y a pas de solution réelle. mais il y en a un .
törzsmókus
1

Activé xterm, modifiez l'encodage à l'aide de séquences de contrôle . Par exemple, en bashvous obtenez le jeu de caractères UTF-8 en exécutant:

echo -n $'\e%G'

Le codage ISO 8859-1 est accessible en exécutant:

echo -n $'\e%@'
vsnprintf
la source