Para encontrar algo que me guste, hay que rebuscar mucho

User login

Usar un teclado UK en Linux mejor aún que uno español

Las premisas

1. Funcionalidad

Si programas, escribes código (por ejemplo HTML), o usas la consola en un teclado español, estás malgastando mucho tiempo y esfuerzo en teclear símbolos habituales como #, ;, \, /, [, ], ~

alternate
alternate

Como se puede ver, el punto y coma al final de cada línea que se usa en algunos lenguajes de programación es inmediato de escribirse con la distribución "inglesa" mientras que en el español es un suplicio y tenemos que mover la mano derecha para presionar shift a la vez que otra tecla.

2. Estética/Calidad

Es difícil, a veces imposible, encontrar teclados de buena calidad con distribución española. Y cuando existen, los precios son más altos que los de los homólogos con distribución inglesa.

alternate

La decisión

Por ambas razones, decidí dar el salto a un teclado "inglés". Aquí aparecen dos opciones, la distribución norteamericana (ANSI) o la europea (ISO):

alternate
alternate

Por cuestiones de variedad y estéticas, el formato ANSI sería la opción más lógica, pero llevo toda la vida la vida usando teclado español y al querer darle a ENTER, el dedo meñique me va inconscientemente a la diagonal superior derecha. No me planteo pasar por el trauma de tener que cambiar ese acto casi-reflejo, más cuando en el trabajo seguiría usando un layout ISO. Así que decisión tomada, me cambio a un teclado ISO-UK.

El problema: Escribir en Linux en español usando un teclado ISO-UK

Una vez elegido el hardware, llega el problema de software, ¿Cómo escribir en español usando un teclado ISO-UK sin volvernos locos? Si configuramos en Linux el teclado UK, escribir la Ñ puede ser un coñazo y nos obligará a usar combinación de teclas (de hecho no sé ni cómo se hace). Y si configuramos el teclado como Español, los símbolos que aparecen dibujados sobre las teclas no se corresponderán con lo que aparecerá en pantalla.

La solución pasa por crearse una configuración personalizada que será un teclado UK, CON EL MENOR NÚMERO DE CAMBIOS POSIBLE para poder escribir la letra eñe (ñ), vocales con tilde/diéresis (áäéëíïóöúü) y apertura de interrogación/exclamación (¡¿).

La solución, parte I: Crear una nueva distribución de teclado

En sistemas derivados de Ubuntu (yo uso Linux Mint), las diferentes configuraciones de distribución de teclado se encuentran dentro de /usr/share/X11/xkb/symbols. Como no vamos a crear una desde cero, sino realizar el menor número de modificaciones sobre una distribución estándar UK, copiamos el archivo gb (Great Britain) a xx (Por no calentarme mucho la cabeza con el nombre y evitar sobre-escribir alguna configuracíón ya existente):

sudo cp /usr/share/X11/xkb/symbols/gb /usr/share/X11/xkb/symbols/xx

Editamos el nuevo archivo xx y al final de su primera sección (xkb_symbols "basic") añadimos:

key <AC10>  { [     ntilde,         Ntilde,      semicolon,            colon ] };
key <AC11>  { [ dead_acute, dead_diaeresis,     apostrophe,               at ] };
key <AE01>  { [          1,         exclam,     exclamdown,       exclamdown ] };
key <AB10>  { [      slash,       question,   questiondown,     questiondown ] };

Aquí podemos ver un esquema con la denominación de cada tecla:

alternate

La primera línea añade la ñ a la derecha de la L mientras que pulsándola junto a Alt-Gr y Shift + Alt-Gr obtenemos lo que la tecla físicamente indica:

  • tecla => ñ
  • shift + tecla => Ñ
  • alt-gr + tecla => ;
  • shit + alt-gr + tecla => :

La segunda línea sigue la misma filosofía, al presionarla de un modo normal o junto a las mayúsculas reproduce el comportamiento de un teclado español (las tildes y las diéresis), mientras que al pulsarla junto a Alt-Gr y Shift + Alt-Gr obtenemos lo que aparece físicamente impreso sobre la tecla.

Las líneas 3 y 4 modifican las teclas de finalizar interrogante y exclamación para que al pulsarlas junto a Shift + Alt-Gr produzcan los símbolos de apertura.

Con eso consigo:

  1. Número bajo de modificaciones (4).
  2. Teclas más habituales (ñ y tildes/diéresis) en el mismo lugar que en un teclado español.
  3. Teclas más habituales (ñ y tildes/diéresis) "vuelven" a su estado normal presionando Alt-Gr.
  4. Teclas extra (¿ y ¡) que se obtienen al pulsar Alt-Gr junto a sus homólogas de cierre (? y !) por sencillez o junto a Shift + Alt-Gr por ser un poco más rigurosos ya que dichos caracteres se obtienen junto a las mayúsculas en el teclado inglés.

Si se os ocurre un sistema mejor o más sencillo, los comentarios están abiertos a vuestras ideas ;).

La solución, parte II: Decirle a Linux que nuestra distribución existe

En la primera parte de la solución creamos una nueva distribución de teclado llamada xx, ahora toca el turno de añadirla al listado de distribuciones disponibles para así poder usarla. Para ello no tendremos más que editar el archivo /usr/share/X11/xkb/rules/evdev.xml y añadir al final de la sección <layoutList> (buscar "</layoutList>" al editar el archivo) nuestra recién creada distribución:

<layout>
    <configItem>
        <name>xx</name>
        <shortDescription>UK + ñ</shortDescription>
        <description>UK-ISO layout + some spanish symbols</description>
        <languageList>
            <iso639Id>eng</iso639Id>
        </languageList>
    </configItem>
    <variantList/>
</layout>

La parte más importante es el <name>xx</name>, donde indicamos que archivo de configuración vamos a usar. Una vez grabado el archivo, sólo queda reiniciar el sistema (o simplemente reiniciar nuestra sesión deslogeándonos y volviéndonos a logear). Tras hacerlo, sólo queda ir a la configuración de teclado de Linux para activar nuestra distribución recién creada. En Linux Mint Cinnamon 18.0 se hace yendo a Menú > Preferencias > Teclado > Disposiciones.

alternate

Allí clicamos sobre el símbolo + en la esquina inferior izquierda y en la lista aparecerá "UK-ISO layout + ñ symbol" que es la descripción que le he puesto a la nueva configuración (ver la opción <description> en el bloque de código superior). Lo seleccionamos, lo añadimos y ya está disponible para su uso.

Haciendo el cambio de idioma con Shift + Shift

El proceso normal para cambiar la distribución de teclado en Linux Mint (y supongo que en otros Linux) es más o menos el descrito en el apartado anterior. Vamos a Menú > Preferencias > Teclado y allí escogemos en cada momento que layout queremos utilizar. Una pesadez, MUY incómodo.

Para facilitar el cambio, nada mejor que definir un atajo de teclado que rote entre las configuraciones de teclado activadas. En el caso de Mint, ésto se hace yendo a Menú > Preferencias > Teclado > Disposiciones > Opciones… (abajo a la derecha):

alternate

Basta con elegir "Ambas teclas Mayús juntas" (si, así de juvenil se lee la descripción en Mint 18) para que podamos realizar el cambio de idioma.

Y ya casi está todo…

Indicador en la barra de menú de qué distribución se está usando

Todo muy bien, tenemos nuestras dos distribuciones de teclado funcionando (gb => UK y xx => UK + ñ) y podemos cambiar entre ellas en cualquier momento con tan solo pulsar las dos mayúsculas. Pero falta algo… no sabemos cuál estamos usando en cada momento hasta que empecemos a escribir y veamos si es lo que esperábamos o no.

Para solucionarlo, nada más sencillo que poner un indicador de layout en la barra inferior de menús, junto al reloj. En Mint Cinnamon ésto se hace pulsando el botón derecho del ratón sobre el menú y eligiendo Añadir applets al panel donde podremos instalar/activar uno llamado Teclado:

alternate

Tras activarlo, veremos en la barra de tareas el indicador del layout en activo. En mi sistema ahora mismo tengo tres layouts: el español (para hacer pruebas hasta que no esté seguro de que el UK+ñ es 100% correcto), el inglés de UK, y el que hemos creado en esta entrada UK+ñ.

alternate

Como se puede ver, la distribución que he creado no tiene bandera asignada y además los colorines me hacen daño a los ojos (cada loco con su tema). No hace falta más que ir a /usr/share/cinnamon/applets/[email protected]/flags y cambiar las imágenes png que queramos. Como la distribución española la voy a mantener temporalmente, no me molesto en cambiarla, pero pongo en blanco y negro la gb.png y añado una nueva que llamaré xx.png (como la descripción corta de la distribución de teclado que creamos). Tendremos, eso sí, cuidado de que las imágenes que creemos tengan el mismo tamaño de las que ya existen, 80x60 pixels. Tras eso, la barra queda así:

ACTUALIZACIÓN: En Min 20, la localización de las banderas cambia y ahora es /usr/share/iso-flag-png

alternate

…y el "tutorial" ha terminado. En realidad me ha llevado mucho más tiempo escribirlo que hacerlo, que es realmente sencillo.

PD. Sí, tengo pendiente de editar el icono del Bluetooth y ponerlo en blanco y negro también.

EXTRA: Aplicar los cambios sin necesidad de reiniciar

Una vez tengamos todo el sistema funcionando, es más que probable que deseemos realizar cambios y experimentar con ellos. Para no tener que reiniciar la sesión cada vez que cambiemos el mapeo de teclado, bastará con ejecutar el comando.

sudo udevadm trigger --subsystem-match=input --action=change

Referencias

Éstas son las referencias que he utilizado a la hora de realizar las modificaciones y escribir esta entrada de blog: