Saltar al contenido

Los caracteres ACS no funcionan en PuTTY incluso con la exportación NCURSES_NO_UTF8_ACS=1

Te sugerimos que revises esta respuesta en un entorno controlado antes de enviarlo a producción, un saludo.

Solución:

Es una combinación de cosas. El recomendado TERM porque PuTTY es “masilla”, pero debido a la inercia, la mayoría de la gente usa “xterm”. El soporte de dibujo de líneas en la descripción del terminal xterm es diferente de las suposiciones de PuTTY porque xterm admite luit, que tiene algunas limitaciones con la forma en que se administra el conjunto de caracteres alternativos (consulte el informe de error de Debian # 254316: ncurses-base: solución para el manejo de pantalla de registrarse sgr0 no es del todo correcto).

Si utiliza infocmp para comparar, puede ver estas líneas que tratan con el conjunto de caracteres alternativos:

    acsc: '``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz~~', '``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz~~'.
    enacs: NULL, 'E(BE)0'.
    rmacs: 'E(B', '^O'.
    smacs: 'E(0', '^N'.

Los VT100 pueden tener dos conjuntos de caracteres “designados”, denominados G0 y G1:

  • El dibujo de líneas “xterm” funciona cambiando la designación de G0 entre los caracteres ASCII y los de dibujo de líneas,
  • el dibujo de líneas “masilla” funciona mediante la designación de ASCII en G0 y el dibujo de líneas en G1 y cambiando entre los dos con los caracteres de control de cambio hacia adentro/cambio hacia afuera.

Aunque ambos son compatibles con VT100, el esquema xterm no funciona con PuTTY. Por el vínculo con luitla descripción de terminal normal para xterm no cambiará (a menos que sea posible modificar luit para resolver el problema para sus usuarios), por lo que se necesita una solución para los usuarios de PuTTY:

  • use una descripción de terminal diferente según lo recomendado, por ejemplo, TERM=putty. El cuadro de diálogo de configuración de PuTTY le permite establecer variables de entorno para pasar a la máquina remota.

    Esto tiene el inconveniente de que algunos sistemas no tienen instalada la base de datos de terminal ncurses completa, debido al “tamaño” (es 6.8Mb en mi máquina local). También, TERM puede no estar en la lista de variables de entorno ssh permitidas.

  • puede compilar su propia entrada terminfo con el tic de ncurses, por ejemplo,

    cat >foo <<"EOF" xterm|my terminfo entry, enacs=E(BE)0, rmacs=^O, smacs=^N, use=xterm-new, EOF tic foo

  • usar la pantalla GNU. Hace sus propias correcciones y compensa los problemas de PuTTY.

Otras lecturas

  • SCS – Seleccionar conjunto de caracteres (manual VT100)
  • 4.4 Selección de juego de caracteres (SCS) (manual VT220)
  • La base de datos terminfo es grande, ¿necesito todo eso? (preguntas frecuentes sobre ncurses)
  • Putty: inicie sesión, ejecute el comando/cambie la variable de entorno y NO cierre la sesión

Quiero hacer algunas adiciones. Enfrenté el mismo problema: muchas herramientas basadas en ncurses como dialog, menuconfig y nconfig de las fuentes de la perrera de Linux, incluso mc se rompe cuando se construye con ncurses (aunque mc está construido usando Slang en muchos sistemas operativos y no se ve afectado).

Esto es lo que pasó

usos de ncurses smacs registro de terminfo para cambiar a "juego de caracteres alternativo" y luego usa acsc para dibujar cajas. Envía a que es un carácter de dibujo de caja en un juego de caracteres alternativo (ACS). Esta es la gráfica VT100.

Algunos emuladores de terminales hoy en día no son compatibles con ACS cuando están en UTF-8 porque las aplicaciones tienen la capacidad de enviar puntos de código de dibujo de cuadro reales.

Hay capacidad no oficial U8 (¡U mayúscula!) en terminfo que le dice a ncurses: "En lugar de ACS, use puntos de código de dibujo de caja reales".

tengo esta capacidad infocmp -x xterm-utf y para masilla también, pero no para xterm.

Como puedes leer en ncurses(3) (https://isla-invisible.net/ncurses/man/ncurses.3x.html), ncurses es consciente de la consola de Linux y la pantalla de GNU (y tmux, que también usa screen como TERM) y siempre comportarse como si U8 fueron puestos.

Para otros terminales que no admiten ACS cuando están en UTF, puede configurar NCURSES_NO_UTF8_ACS.

Desafortunadamente, ncurses no es consciente de PuTTY.

También hay luit que puede convertir ACS en puntos Unicode.

Entonces, esto es lo que podemos hacer para ejecutar ncurses + putty en UTF-8:

  • Usar terminales con U8#1 capacidad. Este está configurado para masilla (por cierto, sugiero usar putty-256color en cambio). Puede crear su propia entrada con U8#1 y colors#256 y compilarlo con tic -x. Tenga cuidado de que el mouse no funcione en terminales que no comiencen con xterm (ver mouseinterval(3), sección FALLOS). Por eso no uso putty Terminal. sugiero copiar xterm-utf8agregar colors#256compile y quédese con él: funciona perfectamente con putty, mouse y utf8.

  • Puedes configurar NCURSES_NO_UTF8_ACS en tu perfil.

  • Tu puedes correr screen o tmux: se establecerá TERM para screen y arreglar ncurses

  • Tu puedes correr luit: hará todas las conversiones por ti.

  • Desde PuTTY 0.71, puede pedirle a PuTTY que admita dibujos ACS incluso en UTF-8.

    Desde PuTTY 0.71, puede pedirle a PuTTY que admita dibujos ACS incluso en UTF-8.

Te mostramos las reseñas y valoraciones de los lectores

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *