Versión 0.2: 23 May 2001
Versión 0.3 (de txt a md): 5 marzo 2023

Este documento tiene su origen en los hilos iniciados por Ángel Parra en abril de 2001 (Como poner el Euro???), el mensaje de José Carlos García Sogo de 9 de mayo y la respuesta de Roberto Suárez Soto así como algunos otros que de vez en cuando aparecen sobre el tema en la Lista de Usuarios de Debian en Español debian-user-spanish at lists.debian.org.

Mi idea es movilizar, continuar el hilo hasta dar una respuesta aceptable ante la inminencia del tema (y supongo que los grupos franceses, alemanes, etc. estarán en un trabajo similar).

Notas

N.1. Uso testing. Para Potato algunos nombres de ficheros de configuración cambian (y ahí kbd es un paquete inferior a console-tools, creo). Creo que usar framebuffer es indiferente a igualdad de resolución. No analizaré el uso de fonty ni de fuentes UTF-8

N.2. Tengo un teclado de 105 teclas para un clónico i386, de esos con las teclas con las ventanitas de güindous y otra para el menú. YMMV

N.3. Por antiguos problemas con los locales y por mi trabajo como traductor (y mi experimentos con UTF-8, pero esta es otra guerra) no soy partidario de definir globalmente (system-wide) un locale sino permitir a cada usuario elegir el suyo. YMMV

A. Consola

A.1. El teclado

Resulta que tenemos dos paquetes alternativos para configurar el mapa de teclado:

console-tools y kbd; la diferencia entre ambos en las versiones actuales es que Yann Dirson es uno de los nuestros, un hombre de Debian, y Andries E. Brouwer es más un hombre BSD (esto son elucubraciones mías…) - yo, por llevar la contraria (si no fuera cabezota todavía estaría en güindous) uso kbd.

console-common instala /etc/init.d/keymap.sh, que lanza el loadkeys de console-tools o de kbd sobre /etc/console/boottime.kmap.gz, generado a su vez por install-keymap con los datos de console-data. ¿Sencillo, no? Al arrancar el sistema se ejecuta /etc/rcS.d/@S05keymap.sh y nos pone el mapa de teclado elegido.

¿Cómo añadir una tecla para el euro (y de paso las teclas güindous)?

Opción a) Puedes editar boottime.kmap.gz, añadiendo el contenido de /usr/share/keymaps/i386/include/euro.inc.gz y /usr/share/keymaps/i386/include/windowkeys.inc.gz

Opción b) Yo añado en /etc/init.d/keymap.sh, tras la línea de loadkeys ${CONFDIR}/${CONFFILEROOT}.${EXT}.gz, lo siguiente:

loadkeys euro.inc
loadkeys windowkeys.inc

y no tengo que tocar /etc/console/boottime.kmap.gz. La opción b) me parece más rápida y más fácil. Tiene un problema grave si montas tu sistema vía red (lo que no es mi caso): al lanzarse el teclado muy pronto en el arranque (/etc/rcS.d/@S05keymap.sh) es posible que los sistemas de ficheros de red aún no estén montados.

Hemos puesto el mapa de teclado pero para ver el símbolo del euro nos falta una fuente que pueda mostrarlo.

A.2. Las fuentes para consola

/etc/init.d/console-screen.kbd.sh o /etc/init.d/console-screen.sh ponen la fuente de pantalla que hayas elegido en /etc/kbd/config o /etc/console-tools/config. La codificación que incluye el euro es la latin0 (dejando aparte ISO-10646-1, superconjunto de todas las ISO).

latin-9 o Latin-0 o ISO-8859-15 (codepage 924 para IBM) difiere del estándar Latin-1 (ISO 8859-1) en ocho posiciones, A4, A6, A8, B4, B8, BC, BD, BE donde tiene Euro, Scaron, scaron, Zcaron, zcaron, OEligature, oeligature e Ydiaeresis, respectivamente.

En /usr/share/consolefonts tenemos varias fuentes lat0-*, en distintos tamaños. Podemos poner en 16 puntos la lat0-sun16.psf.gz, tal como aconsejaba Roberto Suarez Soto, o la lat0-16.psfu.gz (cuestión de gustos):

en /etc/console-tools/config

SCREEN_FONT=lat0-sun16
APP_CHARSET_MAP=iso15

en /etc/kbd/config

CONSOLE_FONT=lat0-16.psfu.gz
CONSOLE_MAP=8859-15_to_uni

¿Quieres ver si funciona? /usr/bin/shfont para escribir el € (el signo anterior debe ser un euro) Alt-Gr + E, para ¢ pulsa Alt-Gr + c

A.3. locales

Ejecuta locale charmap y anota la salida - no terminaremos hasta ver ‘ISO-8859-15’.

El locale adecuado para el español es es_ES.ISO-8859-15 (catalán ca_ES, vasco eu_ES, gallego gl_ES). Las versiones actuales de glibc no traen los locales sino que hay que generarlos editando /etc/locale.gen y ejecutando después como root /usr/sbin/locale-gen.

Para hacerlo en /etc/locale.gen descomenta la línea

es_ES@euro ISO-8859-15

ahora también puedes/debes descomentar la línea anterior por precaución

es_ES ISO-8859-1 

(en las primeras versiones descomentar una pisaba a la otra). /usr/sbin/locale-gen deja el nuevo locale en /usr/lib/locale/es_ES@euro si todo ha ido bien. Prueba el nuevo locale con por ejemplo

LANG=es_ES.ISO-8859-15 date

Si todo funciona instálalo (uso bash. YMMV)

export LANG=es_ES.ISO-8859-15
export LC_ALL=es_ES@euro

a) para todo el sistema en /etc/environment o /etc/profile

b) como usuario en ~/.bash_profile o en el fichero de configuración de tu shell

En /etc/locale.alias tenemos ‘spanish’ como un alias de es_ES.ISO-8859-1 y por lo tanto no nos vale. Tampoco ‘catalan’, ‘galego’ y ‘galician’. No sé qué hace el paquete user-es. ¿Hay que modificarlo?

La parte de consola ha terminado, pero prepárate para tener problemas con las X (exactamente con Xlib).

es_ES es un locale que funciona porque en /etc/locale.alias remite a es_ES ISO-8859-1, mientras que en /usr/X11R6/lib/X11/locale/locale.alias es otro nombre para es_ES.ISO8859-1 (sic).

¿Cómo escribimos el locale para que lo acepten a la vez glibc y Xlib?

B. X Windows

B.1. Teclado

En /etc/X11/XF86Config-4

    Section "InputDevice"
        Identifier  "Keyboard0"
        Driver      "keyboard"
        # Option    "CoreKeyboard"
        Option      "AutoRepeat" "500 5"
        Option      "XkbRules"    "xfree86"
        Option      "XkbModel"    "pc105"
        Option      "XkbLayout"   "es"
    EndSection

B.2. Fuente

Necesitamos una fuente iso8859-15. Para ver si tienes alguna instalada haz

xlsfonts | grep iso8859-15

Para mi sorpresa resulta que xfonts-jmk y los distintos paquetes arphic (xfonts-arphic-bsmi00lp, xfonts-arphic-gbsn00lp, xfonts-arphic-bkai00mp y xfonts-arphic-gkai00mp), que había instalado por otro asunto, traen fuentes iso8859-15.

Si no, no pasa nada. La solución está en las fuentes ISO10646-1, que como sabemos son un superconjunto de los distintos ISO8859-X y de las que sí disponemos de unas cuantas. Usando un script en perl de Markus Kuhn <mkuhn@acm.org> que se llama ucs2any.pl

This Perl script allows you to generate from an ISO10646-1 encoded BDF font other BDF fonts in any possible encoding. This way, you can derive from a single ISO10646-1 master font a whole set of 8-bit fonts in all ISO 8859 and various other encodings.

Si leéis inglés no tiene desperdicio http://www.cl.cam.ac.uk/~mgk25/ucs-fonts.html y las otras páginas de Markus Kuhn.

Entre ucs-fonts.tar.gz (28) y ucs-fonts-75dpi100dpi.tar.gz (176) tenemos suficientes, incluidas times, helvética, lucida, utopia, new century schoolbook, courier…

No sé si para un posible user-euro tendría sentido empaquetarlas o hacer un script que las generara a partir de las ISO10646-1.

B.3. locales

En las X los locales de las aplicaciones que utilizan Xlib son independientes de los de glibc y están en /usr/X11R6/lib/X11/locale.

Vemos que el nombre incluso cambia: ahora será es_ES.ISO8859-15 y no es_ES.ISO-8859-15. Esta pequeña diferencia dará problemas: cuando no protesta la librería C (buscando sin encontrar en /etc/locale.alias) protestará Xlib.

Después de varios días de pruebas y experimentos creo que he dado con una solución sencilla: añadir a /usr/X11R6/lib/X11/locale/locale.alias la línea

es_ES@euro:                   es_ES.ISO8859-15

Ya está. No hace falta tocar .xsession, ni ningún otro fichero de configuración (recordemos que en .bash_profile habíamos puesto export LANG=es_ES.ISO-8859-15 y export LC_ALL=es_ES@euro y que yo uso startx).

Un pequeño detalle (otro más): revisa .Xdefaults por si has puesto por defecto alguna fuente ISO8859-1.

C. Los programas

Qué hay que cambiar en Emacs, mutt, netscape… (ToDo) Una advertencia: casi todos los programas dan por supuesto que quieres usar latin1. Mira en los .rc. Algunos no contemplan la posibilidad de usar latin0. Para evitar los mensajes molestos basta hacer

LC_ALL=es_ES programa &amp;

para ejecutarlos.

D. ToDo

Escribir sobre fonty, language-env, user-es


Juan Rafael Fernández GnuPG (www.gnupg.org) key available at your nearest wwwkeys server