¿Cómo hacer que el shell de inicio de sesión xterm use utf-8?

¿Cómo hacer que el shell de inicio de sesión xterm use utf-8?

yo sueloxterm(X-Win32 2012 Build 30 de StarNet Communications Corp) para iniciar sesión desde una PC con Windows 7 en una Red Enterprise Linux 6 (RHEL6).

Mi problema es que todos los caracteres utf-8 de varios bytes aparecen confusos en el shell de inicio de sesión de xterm. Por ejemplo, así es como se representa la cadena "Wilhelm Röntgen" en las dos instancias del shell (la fuente utilizada es una fuente Unicode y es la misma fuente en ambas instancias del shell):

 Login shell: Wilhelm Röntgen
 Second shell: Wilhelm Röntgen

Si he entendido bien, el software de rom StarNet Communications Corp implementa (o emula) un terminal X (un cliente ligero que ejecuta un servidor X). Es decir, ambas instancias de shell se ejecutan en una ventana de terminal X en la PC y se comunican con RHEL6 mediante el protocolo X11. A continuación se muestra cómo aparecen ambos shells en mi escritorio, encadenando un archivo con caracteres Unicode multibye al terminal.

ingrese la descripción de la imagen aquí

Este es el comando que configuré X-Win32 para iniciar el shell de inicio de sesión:

xterm -u8 -ls

Sin embargo,despuésAl iniciar sesión, puedo hacerlo xtermen el shell de inicio de sesión y ese comando bifurcará una nueva instancia de xterm donde la configuración regional funciona como se esperaba (es decir, los caracteres utf-8 se representan correctamente).

Aquí están las configuraciones relevantes tal como aparecen en el shell de inicio de sesión:

$ locale
LANG=en_US.UTF-8
LC_CTYPE=en_US.UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE=C
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

$ printenv XTERM_LOCALE
en_US.UTF-8

También tengo las siguientes dos líneas en .Xresources:

xterm*locale: true
xterm*utf8: 1

Parece que el shell de inicio de sesión xterm no reconoce la configuración regional que configuré, pero no entiendo por qué no. Mi xterm es claramente capaz de hacer esto, ya que todos los shells sin inicio de sesión lo hacen de forma predeterminada.

Respuesta1

En el momento en que el proceso sshd en la computadora remota se bifurca para ejecutar /usr/bin/xterm, hay muy pocas variables de entorno configuradas. De hecho, la variable LANG no está configurada. Por lo tanto, el proceso xterm no sabe que debe mostrar caracteres en UTF-8. Vuelve a los valores predeterminados de xterms. Cualquiera que sea eso.

Sin embargo, el subshell que se ejecuta dentro de xterm ejecuta todos los scripts de configuración y similares. Incluyendo la configuración de la variable de entorno LANG.

Es necesario comprender la diferencia entre el proceso xterm remoto y el proceso de shell que se ejecuta dentro de xterm.

La solución es ejecutar el proceso xterm remoto de esta manera:

/usr/bin/env LANG=en_US.UTF-8 /usr/bin/xterm

env(1) es una utilidad para ejecutar un programa en un entorno modificado.

Configurar LANG hará que el xterm remoto muestre caracteres UTF-8 correctamente.

Eskil... :-)

Ps: al leer la página del manual de xterm también encontré una manera más fácil de lograr esto:

xterm -en en_US.UTF-8

PP: No creo que la configuración de recursos en ~/.Xresources surta efecto a menos que los combine con xrdb. El proceso xterm en la computadora con Linux consultará el servidor X que se ejecuta en su computadora con Windows. En el momento en que se inicia xterm, es muy poco probable que su servidor X-Win32 tenga configurados los recursos xterm*. Pero es posible que pueda configurar recursos en X-Win32 si lo admite.

Respuesta2

Creo que no estás diciendo xtermque uses una fuente Unicode. Veo que estás usando algún xterm compilado para Windows o algo así, pero en Arch (y otras distribuciones) cuando ejecutas unrealxterm, lo comienzo así:

xterm -u8 -fn '-misc-fixed-bold-r-normal--15-140-75-75-c-90-iso10646-1'

Otro emulador de terminal de Windows,Masilla, parece bastante bueno para mostrar UTF-8. Si tiene permiso, debe poner PuTTY, configurarlo para que utilice un juego de caracteres UTF-8 y conectarse al servidor de Red Hat. Si PuTTY representa correctamente caracteres UTF-8 multibyte, sabrá que el problema no está en el lado del servidor, sino en el emulador de terminal.

Respuesta3

La pregunta y los comentarios posteriores indican cierta confusión. Según el artículo de la base de conocimientos de StarNet¿Dónde está mi emulador de terminal?

X-Win32 es un servidor X cuyo objetivo principal es mostrar aplicaciones gráficas remotas. La mayoría de los sistemas Unix/Linux modernos tienen un emulador de terminal basado en X incluido en las bibliotecas X. Como tal, X-Win32 no incluye uno por defecto.

Un comentario agregado a la pregunta por @ bruce-ediger afirma que

No creo que ningún proceso xterm se esté ejecutando en el servidor RHEL.When I type in xterm in the shell on RHEL, all it does is to send a message to the X windows server on the PC, requesting that it creates another xterm process/window.El X-Win32 de StarNet Comm. Corp. convierte mi PC en una terminal X y ambas instancias de xterm se ejecutan en la PC, utilizando el protocolo X.11 para comunicarse con las instancias ssh en RHEL6. Al menos así es como creo que funciona X11.

Pero no es así como funciona. El proceso xterm iniciado en el servidor RHEL se ejecutaenese servidor. Se comunica con el servidor StarNet X (X-Win32), pero el proceso xterm permanece donde se inició.

La forma más sencilla de iniciar xterm usando UTF-8 es a través deluxtermscript (que es parte del mismo paquete que incluyextermy sus archivos de recursos). De acuerdo con laPreguntas frecuentes sobre xtermdescribiendouxterm:

XTérminono establece automáticamente su ubicación. Se le puede indicar que utilice su configuración local. Este es un script de shell que configura los recursos de xterm para usar codificación UTF-8 y fuentes UTF-8. Hay uno parecidolxtermscript, pero se basa en aplicaciones no portátiles, a diferenciauxterm.

Como se señaló en otros comentarios, es posible que las variables de entorno al iniciar sesión no tengan suficiente información para comenzarxtermautomáticamente con codificación UTF-8 (y fuentes). Eso lo hace eluxtermguion.

información relacionada