fuente_ISO-COMO <author>Urko Lusa Oiza, <tt><htmlurl url="mailto:ulusa@frodo.com" name="ulusa@frodo.com"></tt> <date>v0.2, rev 2. 15 Oct 1996 <abstract> Este documento explica cómo usar una fuente <tt>iso-8859-1</tt> en el modo texto de Linux, en vez de la que éste trae por defecto en todas las distribuciones que yo he visto, y que no deja de ser una especie de apaño que arrastra el lastre de la página de códigos de IBM. </abstract> <!-- Índice --> <toc> <sect>Introducción <label id="intro"> <p> Las distribuciones de Linux que conozco traen por defecto la misma fuente que el DOS (página de códigos 437). Para hacer que el sistema funcione como si la fuente fuera <it/ISO/, se emplea un extraño <it/``remapeo''/ para hacer que al representarse determinado carácter, no salga por pantalla el que en la fuente ocupa dicha posición. Para saber si este es el caso de tu sistema, mira el siguiente carácter: &nl; <bf>Á</bf> &nl; Si estás viendo una A mayúscula con acento agudo, este documento no te hace falta. Si ves un cuadrado, te puede interesar. Por supuesto lo anterior se aplica si estás mirando este documento en su versión texto desde la consola, o bien la versión <tt/html/ desde el <tt/lynx/. Si lo estás viendo desde X o leyendo una versión impresa, deberías ver la A en cualquier caso. También puedes probar <tt/man iso_8859_1/ desde la consola (según tu distribución y de si instalaste el manual o no, es posible que no tengas esta página) y comprobar si los caracteres mostrados se corresponden con su descripción y si ves correctamente <bf/todos/ ellos. Es muy posible que gran parte aparezcan como cuadrados en vez de corresponderse con la descripción que traen a la derecha. Si quieres disponer de todos los caracteres necesarios para una correcta escritura de la lengua castellana (y varias otras), puedes seguir los pasos que se describen en este documento. Para los recelosos, comentar que esto no implica la pérdida de símbolos gráficos, y que si se hace bien, seguiremos viendo los cuadraditos en nuestras aplicaciones favoritas (<tt/mc/, <tt/slrn/, etc.).La única pega es que las líneas horizontales no salen unidas, cosa que creo que se debe a que la VGA sólo hace esto para ciertas posiciones de la tabla de caracteres. No obstante puedo asegurar que se puede sobrevivir sin ello. A lo largo del documento aparecen varios ejemplos de comandos. Cuando éstos empiezan por <tt/#/ significa que quien debe ejecutarlos es el superusuario (<tt/root/). Cuando aparecen precedidos por <tt/$/ significa que pueden ser ejecutados por cualquier usuario. <sect>Preparando las VT <p> Lo primero que se debe hacer es lograr que cuando pulsemos ALT+<tt/n/, salga por pantalla el carácter que ocupa el lugar <tt/n/ en la fuente y no otro. Esto se consigue con el siguiente comando: <tscreen><verb> $ echo -ne '\033(K' </verb></tscreen> pero por supuesto no vamos a estar tecleando eso en cada terminal virtual cada vez que tengamos que usarla, así que lo más cómodo es añadir lo siguiente en <tt>/etc/rc.d/rc.local</tt>: <tscreen><verb> # el BloqNum y los 8 bits for tty in /dev/tty[1-6]*; do setleds -D +num > $tty echo -n -e '\033(K' > $tty done </verb></tscreen> La línea que contiene <tt/setleds/ no es necesaria para el propósito de este documento, pero sería una pena no aprovechar el bucle ;-) Lo siguiente que debemos hacer es instalar la fuente: <tscreen><verb> # setfont /usr/lib/kbd/consolefonts/lat1-16.psf </verb></tscreen> Para hacer que ésto ocurra automáticamente al arrancar, pon la orden en <tt>/etc/rc.d/rc.font</tt>. Puedes probar a cambiar a dicha fuente, teclear <tt/echo -ne '\033(K'/ y volver a la sección <ref id="intro" name="introducción">. Ahora deberías ver correctamente el carácter. Recuerda que el <tt/echo/ sólo tiene efecto sobre la terminal en la que se teclea, por lo que tendrás que teclearlo en la misma en la que estás leyendo esto. <sect>Adaptando <tt/terminfo/ <p> La definición para la terminal de Linux que trae <tt/ncurses/ está pensada para usar los códigos de la <tt/cp437/. Esto provocará que al cambiar de fuente veamos letras en vez de los símbolos gráficos. Afortunadamente esto no es difícil de solucionar cambiando la definición de terminal en <tt>/usr/lib/terminfo/l/linux</tt>. <bf/NOTA/: si tu distribución de Linux es antigua, es posible que la definición de terminal esté en <tt>/usr/lib/terminfo/c/console</tt>. Teclea <tscreen><verb> $ echo $TERM </verb></tscreen> para saber cuál te corresponde. Primeramente deberemos extraer el fichero binario en forma de texto editable: <tscreen><verb> # infocmp > linux.original.tic # cp linux.original.tic linux.tic </verb></tscreen> <bf/NOTA/: si tu distribución de Linux es antigua, es posible que el equivalente a <tt/infocmp/ se llame <tt/untic/. <bf/NOTA2/: asegúrate de estar en la consola normal (modo texto). Si estás en un xterm, será ésta la información que se vuelque al fichero. Guarda el fichero <tt/linux.original.tic/ por si es necesario volver a restaurar la definición original, y edita los cambios sobre <tt/linux.tic/. Éstos son los siguientes: <itemize> <item>Busca las siguientes entradas y bórralas: <itemize> <item><tt/smacs/ <item><tt/rmacs/ <item><tt/acsc/ </itemize> <bf/IMPORTANTE/: Las entradas están delimitadas por comas y puede haber varias en una misma línea. Ten cuidado en borrar <bf/sólo/ las entradas que se mencionan arriba. <item>Añade las siguientes líneas: <tscreen><verb> smacs=\E(K, acsc=l\206m\203k\214j\211u\215t\207v\213w\216q\212x\205, rmacs=\E)K, </verb></tscreen> <item>Graba los cambios y sal del editor. </itemize> Ya puedes proceder a compilar: <tscreen><verb> # tic linux.tic </verb></tscreen> Tras lo cual ya debería estar listo el sistema. <sect1>Probando si funciona <p> Seguramente tendrás el Midnight Commander. Ejecútalo para ver si los cambios han tenido efecto. <it/¡Pero si sale hecho un cristo!/ Calma, calma. Pulsa <tt/F9/ y entra en el menú <it/Options/. Selecciona <it/Display bits/ y elige la opción <it/Full 8 bits/. Asegúrate de pasar por el <it/Ok/ o darle con el ratón. ¿Mejor ahora? Vuelve a entrar en el menú y graba los cambios con <it/Save setup/. En caso de que estés leyendo esto con <tt/lynx/, debes saber que en las fuentes de este navegador viene una página que te será muy útil para ver los cambios que has realizado. Dicha página se llama <tt/iso8859-1.html/, y si estás leyendo esto conectado puedes verla en <tt><htmlurl url="http://www.uni-passau.de/˜ramsch/iso8859-1.html" name="http://www.uni-passau.de/˜ramsch/iso8859-1.html"></tt> <sect1>Nota sobre <tt/slang/ <p> Las versiones de <tt/slang/ anteriores a la <tt/0.99-32/ no determinan cuáles son los caracteres gráficos leyendo <tt/terminfo/, sino que usan unos predeterminados (si la terminal es linux). Si tu versión de esta librería es anterior, puedes actualizarte cogiendo la última versión de <tt><htmlurl url="ftp://space.mit.edu/pub/davis/slang" name="ftp://space.mit.edu/pub/davis/slang"></tt>. Algunos programas que usan <tt/slang/ son <tt/slrn/, <tt/jed/ y <tt/lynx/ (si se compila con esta opción). <sect1>Nota sobre <tt/reset/ <p> Algo que no sé cómo evitar es que al ejecutar <tt/reset/ los carateres vuelvan a ser ``remapeados'' como si la fuente fuese la <tt/cp437/. El único apaño que se me ocurre es incluir esta línea en <tt>/etc/profile</tt> o en el <tt/.profile/ del usuario: <tscreen><verb> alias reset='reset ; echo -ne "\033(K"' </verb></tscreen> <sect>Más gaitas <p> Mientras esperamos el día en que las distribuciones de Linux traigan las diferentes definiciones de <tt/locale/ para su internacionalización, hay algunas cosillas que podemos afinar. <sect1>Variables de entorno <p> Puedes ponerlas en <tt>/etc/profile</tt> o en tu <tt/.profile/ particular. He seguido la sintaxis de <tt/bash/. Si usas otro shell posiblemente tengas que cambiar <tt/export/ por la orden equivalente. <sect2><tt/less/ <p> Para visualizar con <tt/less/ ficheros que contengan caracteres de 8 bits: <tscreen><verb> export LESSCHARDEF=8bcccbcc18b. </verb></tscreen> Esto hará que se consideren como imprimibles <bf/todos/ los caracteres desde el 32 hasta el 255, lo que puede acarrear problemas si se usa en una terminal <tt/vt200/, por ejemplo, pero permite ver caracteres gráficos desde el PC. Si tienes una terminal en <tt/ttySn/ puedes poner esto: <tscreen><verb> export LESSCHARDEF=8bcccbcc18b. if [ "`tty`" = "/dev/ttySn" ] then TERM=vt220d unset LESSCHARDEF export LESSCHARSET=latin1 else TERM=linux fi export TERM </verb></tscreen> lo que hará que si se entra por <tt/ttySn/, <tt/less/ no considere como imprimibles los caracteres del 128 al 160 (los caracteres gráficos en la fuente <tt/lat1-16.psf/, pero que son interpretados como caracteres de control por el <tt/vt200/). <sect2><tt>LANG, LC_CTYPE</tt>, etc... <p> Estas variables son las que se usan para presentar el formato de la fecha, orden alfabético, etc. Desgraciadamente que yo sepa aún no están implementadas en las distribuciones habituales de Linux. De todas formas puedes añadir esto: <tscreen><verb> export LANG=es_ES </verb></tscreen> <sect1><tt/isprint/ <p> Esta es la función del sistema que decide si un carácter es imprimible o no. Si la distribución soportase <tt/locale/, debería funcionar bien, pero tal como está ahora la cuestión, sólo devuelve como imprimibles los caracteres <tt/ASCII/. Esto provoca que muchos programas compilados con <tt/#include <ctype.h>/ no muestren correctamente los caracteres no ASCII. Como esto puede cambiar en un futuro, es importante que antes de aplicar el cambio que se propondrá a continuación compruebes tu sistema con el siguiente programa: <tscreen><verb> #include <locale.h> #include <ctype.h> void main(void) { unsigned char c; setlocale(LC_CTYPE,""); for (c=191;c<211;c++) { printf("%d - %c ",c,c); if (isprint(c)) puts("es imprimible"); else puts("no es imprimible"); } } </verb></tscreen> Graba el texto anterior con el original nombre de <tt/prueba.c/ y compílalo con <tscreen><verb> $ gcc -s -o prueba prueba.c </verb></tscreen> y pruébalo así: <tscreen><verb> $ export LC_CTYPE=ISO-8859-1 $ ./prueba </verb></tscreen> Seguramente saldrán todos los caracteres como no imprimibles. Por si acaso asegúrate antes probando con otros valores de <tt/LC_CTYPE/, tales como <tt/es_ES/, <tt/fr_FR/, <tt/pt_PT/, etc. Para saber más posibles valores de <tt/LC_CTYPE/, consulta el fichero <tt/locale.alias/, que tendrás (si instalaste X) por <tt>/var/X11R6/lib/locale</tt> o algún otro directorio similar. Si, y <bf/sólo si/, el programa <tt/prueba/ clasifica como no imprimibles los caracteres que saca, puedes hacer el siguiente cambio en <tt>/usr/include/ctype.h</tt>. Primero haz copia de seguridad del fichero: <tscreen><verb> # cd /usr/include # cp -a ctype.h ctype.h.orig </verb></tscreen> En la línea 150 aprox. cambia <tscreen><verb> #define isprint(c) __isctype((c), _ISprint) </verb></tscreen> por <tscreen><verb> #define isprint(c) (((c & 0xff) == 0x1b) || ((c & 0xff) > 0x1f)) </verb></tscreen> Este cambio de <tt/ctype.h/ fue publicado por Pablo Saratxaga <tt><htmlurl url="mailto:srtxg@f2219.n293.z2.fidonet.org" name="<srtxg@f2219.n293.z2.fidonet.org>"></tt> en el difunto grupo <tt>es.foro.unix.</tt> Yo he recompilado con él algunos programas como <tt/ncftp/ y <tt/tin/, y ha funcionado muy bien. <sect1>Configuración de algunos programas <p> <sect2><tt/dosemu/ <p> Si arrancamos dosemu en modo texto, los caracteres que ocupen una posición mayor que el 127 ya no se verán bien. Para remediarlo se puede habilitar el acceso a la VGA, con lo que <tt/dosemu/ usará el juego de caracteres de nuestra tarjeta gráfica, que es del tipo IBM, por lo menos si usamos Linux en un ix86. Esto se consigue poniendo lo siguiente en el fichero de configuración (generalmente <tt>/etc/dosemu.conf</tt>): <tscreen><verb> video { vga console graphics } </verb></tscreen> También es conveniente que tengamos las siguiente opción: <tscreen><verb> keyboard { layout es-latin1 keybint on rawkeyboard on } </verb></tscreen> Con esto y el programa <tt/keybes.com/ de Pedro Maicas, no debería haber ningún problema para ver y teclear los caracteres mayores de 127. <sect2><tt/pine/ <p> Se puede cambiar la configuración desde el propio programa, o bien editar el siguiente cambio en el fichero <tt>˜/.pinerc</tt>: <tscreen><verb> character-set=ISO-8859-1 </verb></tscreen> Desde la versión 3.92, Pine ya permite poner artículos con 8 bits en los grupos de noticias (en el correo dependerá de la versión de sendmail y de cómo esté configurado). Para habilitar esta opción, añadir <tt/enable-8bit-nntp-posting/ a la lista <tt/feature-list/ del fichero mencionado. Existe también un fichero que efectúa cambios globales (para todos los usuarios del sistema). El fichero se llama <tt/pine.conf/, y su ubicación depende de la distribución que usemos. <sect2><tt/ELM/ <p> Añadir lo siguiente a <tt>˜/.elm/elmrc</tt>: <tscreen><verb> charset=ISO-8859-1 displaycharset=ISO-8859-1 textencoding = 8bit </verb></tscreen> También se pueden hacer estos cambios para todos los usuarios. Basta añadir lo mismo al fichero general de configuración, que en la Slackware está en <tt>/var/lib/elm/elm.rc</tt>. <sect2><tt/TIN/ <p> Añadir lo siguiente a <tt>˜/.tin/headers</tt>: <tscreen><verb> Mime-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Transfer-Encoding: 8bit </verb></tscreen> Algunas versiones modernas, como la 1.3 unoff, ya incorporan este tipo de cabeceras, por lo que la edición de este fichero es innecesaria. <sect>Problemas <p> A ver qué <bf/has/ hecho mal ahora... <tt/};-)/ <sect1>La fuente no se carga al arrancar <p> Asegúrate de que el script <tt>/etc/rc.d/rc.font</tt> es invocado desde <tt>/etc/rc.d/rc.M</tt>. Si <tt/rc.font/ no aparece mencionado en <tt/rc.M/, añade a este último lo siguiente: <tscreen><verb> if [ -r /etc/rc.d/rc.font ]; then . /etc/rc.d/rc.font fi </verb></tscreen> <tt/rc.font/ debería tener permiso de ejecución (<tt/chmod +x rc.font/). <sect1>El teclado funciona mal en VT(no.) <p> Asegúrate de que el bucle de <tt>/etc/rc.d/local</tt> incluye todas las terminales virtuales que vayas a usar. Es decir, si tienes 8, sustituye <tscreen><verb> for tty in /dev/tty[1-6]*; </verb></tscreen> por <tscreen><verb> for tty in /dev/tty[1-8]*; </verb></tscreen> <sect1>Los caracteres gráficos no aparecen correctamente <p> El cambio propuesto para <tt/terminfo/ está pensado para la fuente lat1-<it/xx/.psf (donde <it/xx/ representa la resolución: 8, 10...). Otras fuentes, como <tt/iso01.f16/, no tienen caracteres gráficos (compruébalo ejecutando <tt/showfont/). Y otras pueden tenerlos en diferentes posiciones (como las iso01a).Si estás en el segundo caso, puedes cambiar la entrada <tt/acsc/ de <tt/terminfo/ incluyendo los valores en octal para los diferentes símbolos gráficos. Consulta <tt/man terminfo/ para conocer la sintaxis. <sect1>¿Cómo se quita esto? <p> No puedo creer que me hagas esto. Pero en fin, si has seguido los pasos correctamente, no deberías tener problemas en dar marcha atrás. Haz lo siguiente desde el directorio donde tengas <tt/linux.original.tic/. <tscreen><verb> # tic linux.original.tic # rm /usr/include/ctype.h # mv /usr/include/ctype.h.orig /usr/include/ctype.h # rm /etc/rc.d/rc.font </verb></tscreen> <sect>Sobre este documento <p> Este documento ha sido elaborado utilizando <tt><htmlurl url="http://www.informatik.tu-muenchen.de/˜schwarz/linuxdoc-sgml/" name="Linuxdoc-SGML"></tt> <tt/v1.5./ Si lo has seguido fielmente habrás conseguido una de estas dos cosas: <enum> <item>Adaptar la fuente de tu sistema al estándar ISO (más o menos) en vez de usar un sistema propietario, recuperando unos cuantos símbolos muy convenientes o... <item>Descuajeringar totalmente tu configuración. </enum> Si estás en el primer caso y tienes alguna idea más a este respecto que te gustaría compartir, no dudes en escribirme a <tt><htmlurl url="mailto:ulusa@frodo.com" name="ulusa@frodo.com"></tt> (Fidonet: 2:343/143.30) Si estás en el segundo, no te molestes en escribirme. Mi ego no lo soportaría. En caso de que estés leyendo este documento localmente y quieras ver la última versión, es posible que esté en <tt>http://www.arrakis.es/˜ulusa/linux/fuente_ISO-COMO.</tt> <it/extensión/ donde <it/extensión/ puede ser: <itemize> <item><tt><htmlurl url="http://www.arrakis.es/˜ulusa/linux/fuente_ISO-COMO.html" name="html"></tt>: versión html. <item><tt><htmlurl url="http://www.arrakis.es/˜ulusa/linux/fuente_ISO-COMO.sgml.gz" name="sgml.gz"></tt>: fuente sgml comprimida. <item><tt><htmlurl url="http://www.arrakis.es/˜ulusa/linux/fuente_ISO-COMO.dvi.gz" name="dvi.gz"></tt>: fichero dvi comprimido. <item><tt><htmlurl url="http://www.arrakis.es/˜ulusa/linux/fuente_ISO-COMO.ps.gz" name="ps.gz"></tt>: fichero PostScript comprimido. </itemize> También puedes obtener la fuente que uso en <tt><htmlurl url="http://www.arrakis.es/˜ulusa/linux/swiss-3-lat1.fnt.gz" name="http://www.arrakis.es/˜ulusa/linux/swiss-3-lat1.fnt.gz"></tt> Es muy posible que lo que se trata aquí ya esté explicado en algún <it/HOWTO/ de los que trae el Linux. No lo sé con seguridad porque nunca los leo ;-) <sect1>Agradecimientos <p> A Francisco José Montilla, <tt><htmlurl url="mailto:pacopepe@insflug.org" name="pacopepe@insflug.org"></tt>. A Pablo Saratxaga, <tt><htmlurl url="mailto:srtxg@f2219.n293.z2.fidonet.org" name="srtxg@f2219.n293.z2.fidonet.org"></tt> por su <it/hack/ de <tt/isprint/. A todos aquellos que me han enviado comentarios. <sect>Anexo: El INSFLUG <label id="Grupos"> <p> El <em/INSFLUG/ forma parte del grupo internacional <it/Linux Documentation Project/, encargándose de las traducciones al castellano de los Howtos (Comos), así como la producción de documentos originales en aquellos casos en los que no existe análogo en inglés. En el <bf/INSFLUG/ se orienta preferentemente a la traducción de documentos breves, como los <em/COMOs/ y <em/PUFs/ (<bf/P/reguntas de <bf/U/so <bf/F/recuente, las <it/FAQs/. <tt/:)/ ), etc. Diríjase a la sede del INSFLUG para más información al respecto. En la sede del INSFLUG encontrará siempre las <bf/últimas/ versiones de las traducciones: <tt><htmlurl url="http://www.insflug.org" name="www.insflug.org"></tt>. Asegúrese de comprobar cuál es la última versión disponible en el Insflug antes de bajar un documento de un servidor réplica. Se proporciona también una lista de los servidores réplica (<it/mirror/) del Insflug más cercanos a Vd., e información relativa a otros recursos en castellano. Francisco José Montilla, <tt><htmlurl url="mailto:pacopepe@insflug.org" name="pacopepe@insflug.org"></tt>. </article>