Cambie la codificación del terminal con un comando

24

Uno de los servidores que utilizo con bastante frecuencia sshusa codificación occidental en lugar de utf-8 (y no hay forma de que pueda cambiar eso).

Empecé a escribir un script bash para conectarme a este servidor, por lo que no tendré que escribir la dirección completa cada vez, pero me gustaría mejorar este script para que también cambie la codificación de la ventana del terminal correctamente.

El cambio que necesito hacer puede realizarse usando el mouse navegando a "Terminal" -> "Establecer codificación de caracteres ..." -> "Western (ISO-8859-1)". ¿Existe un comando de terminal que haga lo mismo para la ventana / pantalla de terminal actual?

Para aclarar:
Estoy no está interesado en formas de cambiar la configuración regional del sistema de la ubicación remota - que el sistema es administrado por otra persona, y no tengo ni idea de qué cosas podría depender del 1 latino que codifica allí. Lo que quiero hacer es dejar que esta ventana de terminal en mi lado cambie la codificación de caracteres a lo mencionado anteriormente, de la misma manera que puedo hacerlo con mi mouse y los menús.

Tomás Aschan
fuente
¡Buena pregunta! Los problemas de codificación son a menudo un PITA ... Esta es una forma que no funcionará ... unix.stackexchange.com/questions/8859/…
lumbric
2
APAGADO ¿cómo es posible que mi respuesta sea aceptada pero la recompensa fue a otra? :) :(
törzsmókus
1
@ törzsmókus: Puede leer acerca de las (¿nuevas?) reglas de recompensas aquí: blog.stackoverflow.com/2010/06/improvements-to-bounty-system Si el propietario de la recompensa no otorga la recompensa dentro del período de recompensa de 7 días, el se aplican las mismas reglas de adjudicación automática, como antes: cualquier respuesta a la pregunta publicada después del inicio de la recompensa, con al menos 2 votos a favor, es elegible para la aceptación automática y gana la mitad del monto de la recompensa. Si no hay respuestas que cumplan con ese criterio, no se otorga ninguna recompensa. - y, nuevamente, todas las recompensas son completamente independientes y no están relacionadas con la aceptación de una respuesta.
Runa

Respuestas:

18

Estás buscando luitcuál está diseñado para este propósito:

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

Convertirá la salida del comando ssh a UTF-8 para que no necesite cambiar la codificación del terminal.

törzsmókus
fuente
2
Esto es correcto. Sin embargo, llegué aquí buscando este bit de la página de manual de luit: "El emulador de terminal normalmente invoca a Luit de manera transparente". Entonces, para aquellos que llegan aquí porque están recibiendo codificación incorrecta en su terminal, la forma normal de solucionarlo es cambiar la codificación a través del emulador de terminal.
joseph_morris
@joseph_morris déjame señalarte el tercer párrafo de la pregunta que se responde. el PO no sabe cómo cambiar la codificación utilizando los comandos de menú del emulador de terminal (que se llama a la forma 'normal'), pero que estaba buscando una alternativa CLI.
törzsmókus
1
Bien, por eso comencé con "Esto es correcto". Sin embargo, esta página ahora es uno de los principales éxitos para la "codificación de terminal", y pensé que un poco de documentación de luit sería útil para otros que llegan aquí tratando de responder "¿Por qué está mal mi codificación de terminal?" - y que la codificación generalmente cambia en el emulador, no en la CLI.
joseph_morris
Ah, ahora entiendo tu punto.
törzsmókus
4

Primero edite las configuraciones regionales actuales en su editor favorito

sudo gedit /var/lib/locales/supported.d/local a algo como

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

Entonces corre sudo dpkg-reconfigure locales

Luego configure el terminal con LANG=en_GB.ISO-8859-1

Espero que funcione

Jonathan
fuente
4

Terminal Gnome usa gconf para almacenar configuraciones. Estos se pueden manipular con gconftoolSo, puede usar:

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

He probado esto en 12.04. Por alguna razón, el menú ( "Terminal"->"Set Character Encoding...") no parece actualizarse en tiempo real, pero la codificación de caracteres real se actualiza correctamente.

andrewsomething
fuente
2
pero esto cambia la codificación predeterminada para todos los terminales, no solo el que ejecuta el script de conexión ssh.
törzsmókus
3

No sé cómo probarlo, pero con Konsole en Kubuntu puedo hacer lo siguiente:

1) Encuentra la aplicación registrada en dbus

$ qdbus

Yo uso konsoletan simple qdbus | grep konsme daorg.kde.konsole

2) Encuentra las sesiones actuales en Konsole

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

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

3) Encuentra métodos útiles

$ 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) Verifique la codificación actual

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

5) Establecer codificación

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

6) Verifique la codificación actual

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

Ubuntu tendrá un programa de terminal similar, pero tendrás que hacerte un poco de confusión con el nombre del servidor, la ruta, el método y los argumentos correctos.

jippie
fuente
2

Aquí hay otra solución que usé para cambiar el perfil (para el color de fondo) al conectarme a un servidor de producción. Implica xdotool.

xdotoolsimulará las pulsaciones de teclas necesarias para seleccionar el elemento de menú deseado. Pruébelo primero con su teclado, luego escriba la secuencia:

$ xdotool key alt+t Down c Down Return

Activará la primera codificación de caracteres. Agregue más Downteclas antes Returnde seleccionar otras.

Nota: para ssh, también puede usar un ~/.ssh/configarchivo para configurar alias en sus servidores.

nniico
fuente
Lo siento, quería darte el representante de recompensas, pero
hice
Como no se garantiza que el menú de gnome-terminal no cambie, considero que es un hack muy frágil, que podría ser lo correcto cuando no hay una solución real. pero hay uno .
törzsmókus
1

Encendido xterm, cambie la codificación utilizando secuencias de control . Por ejemplo, dentro de bashusted obtiene el conjunto de caracteres UTF-8 ejecutando:

echo -n $'\e%G'

Se puede acceder a la codificación ISO 8859-1 ejecutando:

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