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 :ref:`systemd `, que es la preferible puesto que es universal (o al menos común a todas las distribuciones que usan :ref:`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. .. _localectl: .. index:: localectl Configuración local con :ref:`systemd ` ================================================ .. note:: 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 :command:`localectl` para configurar teclado e idioma. Es recomendable que, si quiere profundizar, lea los epígrafes posteriores. :manpage:`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\ [#]_. 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 :kbd:`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 :kbd:`set-keymap` o :kbd:`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 :kbd:`Ctrl+Alt+Retroceso`\ [#]_. Es posible averiguar la lista de teclados disponibles mediante diversos subcomandos. Éche un ojo a la página de manual de :manpage:`localectl`. .. warning:: 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 :manpage:`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. 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 :var:`LANG` y :var:`LC_ALL` y una serie de variables que afectan a aspectos particulares del idioma: ================= =========== ========================================================== Variables POSIX\ [#]_ Descripción ================= =========== ========================================================== LC_ADDRESS No Formato para direcciones postales. LC_COLLATE Sí Ordenación alfabética LC_CTYPE Sí Qué caracteres son considerados letras, etc. LC_IDENTIFICATION No ? LC_MEASUREMENT No Indica el sistema de medidas usado (métrico, etc) LC_MESSAGES Sí En qué lengua se comunicarán los programas con el usuario. LC_MONETARY Sí Formato para fomrato numérico de dinero. LC_NAME No Formato para nombres de personas? LC_NUMERIC Sí 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 Sí 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: :kbd:`es_ES.UTF-8` significa español de España en UTF-8, mientras que :kbd:`es_AR.UTF-8` es el español de Argentina. Existe, además, la variable :var:`LANGUAGE` que tiene el mismo propósito de :var:`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 :var:`LC_ALL` se encuentra definida, sobrescribe el valor de cualquiera de las variables :var:`LC_*`, tengan éstas un valor particular fijado o no, o lo tengan :var:`LANG` o :var:`LANGUAGE`. + Si :var:`LANGUAGE` se impone sobre el valor de :var:`LC:MESSAGES` y sobre el de :var:`LANG`. + Si :var:`LANG` se define, define el valor de cualquier variable :var:`LC_*` que no haya sido expresamente definida. Probemos esta precedencia usando la orden: .. _locale: .. index:: locale :command:`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 :var:`LC_MESSAGES`, se ha sobrescrito el valor determinado por :var:`LANG`. Si, además, fijamos el valor de :var:`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 :var:`LANG` global dentro de :file:`/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 :ref:`algún fichero que lea la shell al cargarse `. .. warning:: Es muy recomendable que el administrador tenga definida su variable :var:`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. 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. .. _loadkeys: .. index:: loadkeys Para modificar la configuración del teclado en las consolas virtuales es preciso usar la orden :manpage:`loadkeys`. Por ejemplo:: # loadkeys es .. _setxkbmap: .. index:: setxkbmap cargará el teclado de España, si es que está instalado\ [#]_. En las X, sin embargo, debe usarse :manpage:`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 :file:`/etc/default/keyboard` (véase :manpage:`keyboard(5)`). No obstante, lo más recomendable es hacer los cambios mediante el configurador de *Debian*:: # dpkg-reconfigure keyboard-configuration .. note:: La configuración mediante :ref:`localectl ` se limita internamente a cambiar los archivos que se han mencionado en éste y en el epígrafe anterior (:file:`/etc/default/locale` y :file:`/etc/default/keyboard`). .. rubric:: Notas al pie .. [#] En los sistemas modernos debemos ver al menos una si pulsamos :kbd:`Ctrl+Alt+F1`. .. [#] En realidad, la combinación de teclas *mata* el entorno gráfico, pero la configuración del :ref:`runlevel ` provocará muy probablemente que vuelva a ejecutarse otra vez el servidor gráfico. Para más información sobre la combinación consulte `esta entrada del foro de Archlinux `_. .. [#] El paquete *console-data* contiene los mapas de teclado y no tiene por qué estar instalado. .. [#] Indica si la variable esta definida en el estándar POSIX. Las que no están definidas en él son extensiones de la librería de C del proyecto GNU.