HowTo:gentoo:utf8

De Luispa

Configuración en Español o Inglés y UTF-8

Introducción

Idioma

Uno de mis objetivos principales, desde hace años, ha sido poder utilizar el sistema perfectamente parametrizado de modo que: 1) me funcionen el teclado en Español y se puedan usar los caracteres especiales (áéíóúñÑçÇ), 2) que dichos especiales se guarden y se reconozcan siempre en formato UTF-8 de doble byte a lo largo de todo el sistema operativo, programas y sistema de ficheros, 3) poder utilizar los programas bien en Español (los traducidos) o bien en Inglés, 4) poder intercambiar mis directorios, ficheros y contenidos con otros Sistemas Operativos sin ningún problema (si soportan UTF-8) y 5) que todo esto funcione tanto en la consola de texto como en el entorno Xorg, gestores de ventanas, programas de texto, programas gráficos, en definitiva, en cualquier entorno.


Tengo que reconocer que no ha sido fácil, desde luego no tan fácil como seleccionar un idioma, teclado, región en otros sistemas operativos como Windows o MacOSX, de hecho, la sencillez de MaxOSX y su soporte nativo de UTF-8 siempre me ha parecido muy bueno.

Con la instalación de este equipo lo he vuelto a intentar y por fín veo que se puede hacer, ahora ya no es complicado, GNU/Linux en general ha evolucionado, y digo en general porque todavía queda alguna aplicación "no" compatible con utf-8. Hoy en día mucha gente usa UTF-8 diariamente en:

* ficheros de texto (código fuente, html, mensajes de correo, etc.)
* nombres de directorios y ficheros
* standard input, standard output, pipes
* variables de entorno
* buffers de copiar/pegar
* cientos de programas como telnet, ssh, emacs, ...


Describo las modificaciones que he realizado y en mi entorno que uso la consola, Gnome, gnome-terminal como shell y emacs como editor, me funciona perfectamente. Si se usan otros programas entonces hay que verificar si son compatibles con UTF-8. Al final documento una prueba de concepto a realizar.


Sistema Operativo

  • Configuración del Kernel
Configuración del kernel de Linux: File Systems
File Systems
 Native language support
   (utf8) Default NLS Option        
   :
   -*-   NLS UTF-8  


  • Fichero locale.gen y generación de los locales
Fichero: /etc/locale.gen
 en_US ISO-8859-1
 en_US.UTF-8 UTF-8
 es_ES ISO-8859-1
 es_ES@euro ISO-8859-15
 es_ES.UTF-8 UTF-8

 # Soporte de Inglés y Español
 en_US.UTF-8@euro UTF-8
 es_ES.UTF-8@euro UTF-8

Genero los locales:

# locale-gen 
* Generating 7 locales (this might take a while) with 1 jobs
*  (1/7) Generating en_US.ISO-8859-1 ...                                 [ ok ]
*  (2/7) Generating en_US.UTF-8 ...                                      [ ok ]
*  (3/7) Generating es_ES.ISO-8859-1 ...                                 [ ok ]
*  (4/7) Generating es_ES.ISO-8859-15@euro ...                           [ ok ]
*  (5/7) Generating es_ES.UTF-8 ...                                      [ ok ]
*  (6/7) Generating en_US.UTF-8.UTF-8@euro ...                           [ ok ]
*  (7/7) Generating es_ES.UTF-8.UTF-8@euro ...                           [ ok ]
* Generation complete
  • Zona horaria, en mi caso en la península
cp /usr/share/zoneinfo/Europe/Madrid /etc/localtime


  • Fichero rc.conf
Fichero: /etc/rc.conf
 UNICODE="yes"
 CONSOLEFONT="lat9w-16"


  • Fichero 02locale
Fichero: /etc/env.d/02locale para que el lenguaje de las aplicaciones sea ESPAÑOL
 LC_ALL="es_ES.UTF-8"
 LC_COLLATE="es_ES.UTF-8"
 LC_CTYPE="es_ES.UTF-8"
 LC_MESSAGES="es_ES.UTF-8"
 LC_MONETARY="es_ES.UTF-8"
 LC_NUMERIC="es_ES.UTF-8"
 LC_PAPER="es_ES.UTF-8"
 LANG="es_ES.UTF-8"
Fichero: /etc/env.d/02locale para que el lenguaje de las aplicaciones sea INGLÉS
 LC_ALL="es_ES.UTF-8"
 LC_COLLATE="C"
 LC_CTYPE="es_ES.UTF-8"
 LC_MESSAGES="en_US.UTF-8@euro"
 LC_MONETARY="es_ES.UTF-8"
 LC_NUMERIC="es_ES.UTF-8"
 LC_PAPER="es_ES.UTF-8"
 LANG="es_ES.UTF-8"


  • Fichero consolefont
Fichero: /etc/conf.d/consolefont
 CONSOLEFONT="lat9w-16"


  • Fichero keymaps
Fichero: /etc/conf.d/keymaps
 KEYMAP="-u es"
 SET_WINDOWKEYS="yes"
 EXTENDED_KEYMAPS="backspace euro2"
 DUMPKEYS_CHARSET=""


  • La zona horaria y el reloj
Fichero: /etc/conf.d/clock
 CLOCK="local"
 TIMEZONE="Europe/Madrid"
 CLOCK_OPTS=""
 CLOCK_SYSTOHC="yes"


  • El editor emacs. Para conseguir completar esta situación necesitaba un editor con soporte completo de UTF-8, para poder entender bien los caracteres especiales en el contenido de los ficheros e incluso cuando es invocado desde la shell, por ejemplo "emacs -nw Fichero\ con\ Eñe.txt".


  • El servidor rsync
Fichero: /etc/rsyncd.conf
# Soporte utf-8, en la parte global del fichero
:
charset = utf-8
:
NOTA: Si sincronizas desde un cliente MacOSX con rsync contra un servidor Linux, debes usar la opción --iconv=UTF8-MAC,UTF8

Firefox

  • Al recibir páginas que indican cómo están codificadas las mostrará correctamente. Ahora bien, cuando reciba una página que NO indica cómo está codificada y ésta se encuentra en formato UTF-8 la mostrará incorrectamnete, dado que Firefox usará por defecto ISO-8859-1. Para cambiarlo:
Preferencias->Contenido->Tipo de letra->Avanzadas-> Cofif. caracteres predet.  UTF-8

Prueba de Concepto

Una vez que tienes todo configurado en modo UTF-8 entonces nos encontramos ante una situación donde los caracteres especiales como la áéíóúñÑçÇ funcionan perfectamente, en todos sitios, en la shell, en el explorador de gnome y kde, en los nombres de los directorios y los ficheros, incluso en sus contenidos.

Esta es una buena forma de comprobar que todo va bien:

1) Desde Gnome abro gnome-terminal, edito un fichero nuevo, le añado contenido y lo salvo.

$ emacs -nw Prueba-áéíóúñÑçÇ.txt
Esto es una prueba:
ésta línea empieza por é
la siguiente empieza por á
áéíóúñÑçÇ
2) Verifico que se ve bien desde la shell, el autocompletar funciona y muestra bien el contenido
$ cat Prueba-áéíóúñÑçÇ.txt 
Esto es una prueba:
ésta línea empieza por é
la siguiente empieza por á
áéíóúñÑçÇ
3) Verifico que el comando "ls" también lo muestra correctamente
$ ls -al Prueba-áéíóúñÑçÇ.txt 
-rw-r--r-- 1 luis luis 39 abr  9 21:28 Prueba-áéíóúñÑçÇ.txt
4) Compruebo que otros comandos "ven" y "actúan" bien sobre el contenido
$ sort Prueba-áéíóúñÑçÇ.txt 
áéíóúñÑçÇ
ésta línea empieza por é
Esto es una prueba:
la siguiente empieza por á
5) Ahora me cambio a la "consola" de texto (CTRL-ALT-F1), modifico el fichero, le añado 
más contenido, verifico que se ve bien.
6) Vuelvo al entorno gráfico (ALT-F7) y compruebo que es compatible y lo veo todo bien
$ cat Prueba-áéíóúñÑçÇ.txt 
Esto es una prueba:
ésta línea empieza por é
la siguiente empieza por á
áéíóúñÑçÇ

Línea añadida desde la consola: áéíóúñÑçÇÁÉÍÓÚàèìòùÀÈÌÒÙ

fín!
7) Envío, copio, transfiero por diversos métodos este fichero y otros creados en otros 
Sistemas Operativos hacia ellos o desde ellos usando: rsync, nfs, samba, afp, ... y 
verifico que todo funciona: 
 - Directorios con nombres caracteres especiales
 - Ficheros con nombres con caracteres especiales
 - Contenidos con caracteres especiales


Red Local

Gnome utf8
  • En el equipo Linux creo una serie de Directorios y Ficheros
bolica ~ $ mkdir prueba
bolica ~ $ mkdir prueba/áéíóúñÑçÇÁÉÍÓÚàèìòùÀÈÌÒÙ
bolica ~ $ mkdir prueba/Transmisión
bolica ~ $ cp Prueba-áéíóúñÑçÇ.txt prueba/áéíóúñÑçÇÁÉÍÓÚàèìòùÀÈÌÒÙ/
bolica ~ $ cp Prueba-áéíóúñÑçÇ.txt prueba/Transmisión/segundo\ fichero.txt
  • Desde un MacOSX pruebo con rsync
mac:~ luis$ rsync -T /tmp/ -uan --iconv=UTF8-MAC,UTF8 --progress --password-file=/Users/luis/.rsync.secret luis@bolica.parchis.org::luis/priv /Users/luis
:
priv/prueba/
priv/prueba/Transmisión/
priv/prueba/Transmisión/segundo fichero.txt
         187 100%    0.16kB/s    0:00:01 (xfer#42, to-check=1026/34878)
priv/prueba/áéíóúñÑçÇÁÉÍÓÚàèìòùÀÈÌÒÙ/
priv/prueba/áéíóúñÑçÇÁÉÍÓÚàèìòùÀÈÌÒÙ/Prueba-áéíóúñÑçÇ.txt
         187 100%    0.16kB/s    0:00:01 (xfer#43, to-check=1025/34878)
  • Verifico que lo he recibido correctamente en el mac
MacOSX utf8
(mac) $ ls -al $HOME/priv/prueba

mac:~ luis$ ls -alR priv/prueba/
total 0
drwxr-xr-x   4 luis  staff  136  9 abr 21:41 .
drwx------  16 luis  staff  544 10 abr 08:40 ..
drwxr-xr-x   3 luis  staff  102 10 abr 08:35 Transmisión
drwxr-xr-x   3 luis  staff  102  9 abr 21:41 áéíóúñÑçÇÁÉÍÓÚàèìòùÀÈÌÒÙ

priv/prueba//Transmisión:
total 8
drwxr-xr-x  3 luis  staff  102 10 abr 08:35 .
drwxr-xr-x  4 luis  staff  136  9 abr 21:41 ..
-rw-r--r--  1 luis  wheel  187 10 abr 08:35 segundo fichero.txt

priv/prueba//áéíóúñÑçÇÁÉÍÓÚàèìòùÀÈÌÒÙ:
total 8
drwxr-xr-x  3 luis  staff  102  9 abr 21:41 .
drwxr-xr-x  4 luis  staff  136  9 abr 21:41 ..
-rw-r--r--  1 luis  wheel  187  9 abr 21:41 Prueba-áéíóúñÑçÇ.txt


Renombrar ficheros/directorios

  • Un comando muy útil es convmv. Se instala con "emerge -v convmv"
  • Ejemplo:
$ convmv --notest -r -f iso-8859-1 -t utf8 <directorio>


¿Qué no me va?

  • Repito las pruebas accediendo por SAMBA y AFP con resultaos satisfactorios. Las pruebas realizadas con SCP (ssh) y NFS no son satisfactorias, el envío desde el Mac hacia el linux crea los nombres incorrectos, mientras que la recepción lanzada desde el mac de lo mismo trayendolo desde Linux funciona correctamente.




Volver a HowTo Servidor Gentoo Linux

--Luis 20:58 9 abr 2009 (CEST)