2.4.2. Configuración local

En la configuración local del sistema podemos distinguir dos aspectos independientes:

  • La configuración del idioma, esto es, la lengua con la que preferimos que el sistema y las aplicaciones se comuniquen con nosotros. De este modo, si una aplicación tiene disponible la traducción para la lengua preferida, usará esta traducción y la lengua por defecto (habitualmente el inglés).

  • La disposición de las teclas del teclado. Obviando lenguas exóticas y ciñéndonos a teclatos QWERTY, fuera de las teclas que usa el alfabeto inglés, la disposición del resto de teclas depende mucho de la lengua en la que habitualmente quiera escribir el usuario. Por ejemplo, una persona que escriba en castellano necesitará una tecla para poder escribir una tecla «Ñ», mientras que en Portugal este carácter es irrelevante. En cambio, un portugués requerirá acentuar vocales con la virgulilla («pǎo»), mientras que en castellano esto es absolutamente irrelevante. Por lo general, dado que el teclado es un elemento físico, es más común que la disposición haga referencia al país que a la propia lengua. Así, más que teclado español lo que hay es teclado de España, ya que, puesto que se comercializa en España, se busca que también sirva para escribir en otras lenguas españolas como el catalán.

    Además de lo anterior, puede haber también diferencia en el número de teclas que tenga el teclado. Lo habitual en los teclados de escritorio es que tengan 105 teclas.

Hay, pues, relación entre teclado e idioma preferido (el usuario que utilice un idioma, habitualmente tendrá una determinada disposición de teclado), pero esta no tiene por qué ser obligatoria, razón por la cual ambas configuración se llevan a cabo por separado. Trataremos bajo este epígrafe la herramienta que se usa tras la adopción de systemd, que es la preferible puesto que es universal (o al menos común a todas las distribuciones que usan systemd), y después explicaremos cuál es el modo en el que Debian ha permitido hacer esta configuración y que, a día de hoy (Buster), sigue siendo válido.

2.4.2.1. Configuración local con systemd

Nota

Este epígrafe no entra en detalles de lo que subyace bajo la configuración y se limita a exponer la abstracción que nos presenta localectl para configurar teclado e idioma. Es recomendable que, si quiere profundizar, lea los epígrafes posteriores.

localectl integra la configuración del idioma y del teclado:

$ localectl status
   System Locale: LANG=es_ES.UTF-8
       VC Keymap: n/a
      X11 Layout: es
       X11 Model: pc105
     X11 Options: terminate:ctrl_alt_bksp

De donde se extrae:

  • La primera línea indica cuál es el idioma predetermina: español de España codificado en UTF-8.

  • La segunda línea refiere la configuración del teclado para las consolas virtuales, esto es, para las terminales intependientes del entorno gráfico[1]. Al no estar definido, utilizará la misma que para las X.

  • El resto de líneas definen el teclado para el entorno gráfico: teclado para España de 105 teclas y con la posibilidad de terminar las X con la combinación Ctrl+Alt+Backspace.

Si utilizamos la orden para modificar alguno de estos aspectos, se alterará la configuración predeterminada para todos los usuarios, lo cual significa que:

  • La configuración activa no cambiará, por lo que deberemos o cambiarla manialmente en la sesión actual (consulte los posteriores epigrafes) o reinicar el sistema.

  • Los usuarios pueden tener una configturación particular que sobrescriba esta configuración predeterminada.

Para cambiar el idioma debemos utilizar:

$ localectl set-locale IDIOMA

o incluso podemos dar una lista de idiomas por orden de preferencia:

$ localectl set-locale IDIOMA1,IDIOMA2

Para saber los idiomas disponibles en el sistema, basta con listarlos:

$ localectl list-locales
C.UTF-8
es_ES.UTF-8

Pueden generarse otros idiomas, pero no a través de esta herramienta.

Por su parte, para configurar el teclado podemos usar el subcomando set-keymap o set-x11-keymap. La diferencia entre ambos es que el primero también afecta a la configuración de teclado de la terminal de texto. Por ejemplo:

$ localectl set-x11-keymap es 105 "" "terminate:ctrl_alt_bksp"

escoge el teclado de España de 105 teclas, la variante predeterminada (qwerty) y habilita poder reiniciar el entorno gráfico con la combinación Ctrl+Alt+Retroceso[2]. Es posible averiguar la lista de teclados disponibles mediante diversos subcomandos. Éche un ojo a la página de manual de localectl.

Advertencia

Tenga presente que, si dentro de un entorno de escritorio usa la aplicación gráfica que éste tenga para configurar el teclado, no tendrá efecto alguna localectl, ya que la aplicación gráfica hará una configuración particular para el usuario que prevalece sobre la predeterminada que aquí pudiera hacerse.

2.4.2.2. Configuración de la lengua

La lengua con la que nos comunicamos con el sistema viene determinada por un conjunto de variables de ambiente, de modo que hacer que éste cambie de idioma consiste básicamente en saber cuáles son estas variables y qué valores debemos asignarles.

Además, hemos de tener en cuenta que usar una lengua u otra, no implica solamente la comunicación mediante mensajes, sino también aspectos como la ordenación alfabética, el formato de las fechas o el separador de decimales.

En linux, hay dos variables generales LANG y LC_ALL y una serie de variables que afectan a aspectos particulares del idioma:

Variables

POSIX[3]

Descripción

LC_ADDRESS

No

Formato para direcciones postales.

LC_COLLATE

Ordenación alfabética

LC_CTYPE

Qué caracteres son considerados letras, etc.

LC_IDENTIFICATION

No

?

LC_MEASUREMENT

No

Indica el sistema de medidas usado (métrico, etc)

LC_MESSAGES

En qué lengua se comunicarán los programas con el usuario.

LC_MONETARY

Formato para fomrato numérico de dinero.

LC_NAME

No

Formato para nombres de personas?

LC_NUMERIC

Formato numérico (separador de miles, decimales, etc.)

LC_PAPER

No

Tamaño del papel.

LC_TELEPHONE

No

Formato de los números telefónicos.

LC_TIME

Formato de hora y fecha.

El valor de estas variables se define como ll_DD.COD, donde «ll» es el código de dos caracteres de la lengua, «DD» el código de dos caracteres del dialecto y «COD» la codificación. Por ejemplo: es_ES.UTF-8 significa español de España en UTF-8, mientras que es_AR.UTF-8 es el español de Argentina.

Existe, además, la variable LANGUAGE que tiene el mismo propósito de LC_MESSAGES, aunque permite indicar en una lista de valores separados por dos puntos la preferencia idiomática del usuario. Por ejemplo:

LANGUAGE="es_ES:es_AR:pt_PT:pt_BR:en_US:en_GB"

En esta lista no se especifican las codificaciones y, además, se puede indicar como valor una lengua sin dialecto, en cuyo caso se tomará el dialecto predeterminado (p.e. «es» equivale a «es_ES»):

LANGUAGE="es:es_AR:pt:pt_BR:en:en_GB"

La precedencia de estas variables es la siguiente:

  • Si LC_ALL se encuentra definida, sobrescribe el valor de cualquiera de las variables LC_*, tengan éstas un valor particular fijado o no, o lo tengan LANG o LANGUAGE.

  • Si LANGUAGE se impone sobre el valor de LC:MESSAGES y sobre el de LANG.

  • Si LANG se define, define el valor de cualquier variable LC_* que no haya sido expresamente definida.

Probemos esta precedencia usando la orden:

locale

Devuelve información sobre el sistema de localización. Su uso más simple es preguntar cuál es el lenguaje que hay definido en la shell:

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

O sea, español de España (es_ES) codificado en UTF-8. La razón de que esto sea así es que hay definida solamente la variable LANG:

$ echo $LANG
es_ES.UTF-8

y ninguna de las otras, por lo que todas las variables que controlan aspectos particulares adoptan su valor.

Para saber qué otros valores podemos asignar, basta con:

$ locale -a
C
C.UTF-8
es_ES.utf8
POSIX

Los valores C y POSIX indican que la aplicación use el idioma que tiene definido por defecto (usualmente inglés de Estados Unidos). Comprobemos ahora qué las variables determinan su valor (y por tanto, el idioma) según las reglas que dimos antes:

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

Como se ve, al definir en particular la variable LC_MESSAGES, se ha sobrescrito el valor determinado por LANG. Si, además, fijamos el valor de LC_ALL, veremos que todas las variables particulares adoptan su valor:

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

En Debian se configura sólo una variable LANG global dentro de /etc/default/locale, de modo que si se quiere cambiar su valor, basta comn editar del fichero. No obstante, el mejor modo de retocar la configuración de las [variables] locales es ejecutar:

# dpkg-reconfigure locales

Que de forma sencilla nos pedirá cuáles son las lenguas para las que deseamos tener soporte y cuál es la que queremos definir como predeterminada.

Obviamente, si algún usuario desea una configuración distinta a la predeterminada, no tiene más que definir las variables locales que desee oportunas en algún fichero que lea la shell al cargarse.

Advertencia

Es muy recomendable que el administrador tenga definida su variable LC_MESSAGES a C, para que los futuros mensajes de error que devuelvan las aplicaciones estén escritos en inglés, ya que es más fácil encontrar una referencia a ese error en internet en este idioma.

2.4.2.3. Configuración del teclado

Al configurar el teclado debemos distinguir entre la configuración del teclado para las consolas virtuales y la del teclado para el entorno gráfico.

Para modificar la configuración del teclado en las consolas virtuales es preciso usar la orden loadkeys. Por ejemplo:

# loadkeys es

cargará el teclado de España, si es que está instalado[4]. En las X, sin embargo, debe usarse setxkbmap:

$ setxkbmap es

Estas dos órdenes, sin embargo, sólo cambian la configuración temporalmente. La configuración permanente que se carga al inicio, se almacena en Debian en /etc/default/keyboard (véase keyboard(5)). No obstante, lo más recomendable es hacer los cambios mediante el configurador de Debian:

# dpkg-reconfigure keyboard-configuration

Nota

La configuración mediante localectl se limita internamente a cambiar los archivos que se han mencionado en éste y en el epígrafe anterior (/etc/default/locale y /etc/default/keyboard).

Notas al pie