¿Cómo configuro el teclado IBM Model 122 "Acorazado" en Ubuntu?

¡Trabajadores!

Es sabido que un trabajador ha de contar con las mejores herramientas para hacer su trabajo. Pero muchas veces las mejores herramientas son las que el mismo trabajador crea o amolda a sus necesidades.

Es sabido que dentro del mundo de las terminales Unix, inicialmente se dio en utilizar los teclados provistos en las máquinas teletipo Tipo 33. Estos incómodos teclados fueron superados por otros mecánciamente más aptos y funcionalmente mejor pensados. Indudablemente los teclados tipo Space Cadet de las folklóricas computadoras Symbolics, o los influenciales LK201 para las postrimeras terminales DEC son espejos en los que habremos de mirarnos en los años que vendrán. Sin embargo, nadie duda que el más conocido de los teclados hayan sido los modelos de IBM.

La computadora PC original contaba con el teclado "Modelo F" de 84 teclas. De este derivaría el más influyente modelo, el M (extendido y mejorado), de 101/102 teclas, del cual se desprenden los utilizados actualmente.
Aún así no fueron los definitivos, ya que en el Justicialismo de todo existe como en botica. Tal es así, que la locura experimental no tardó en alcanzar su más estrafalario paroxismo con "el acorazado". Se trataba del teclado IBM Modelo F de 122 teclas para la terminal IBM 3270. Este tipo de terminales industriales y de data-entry requerían el uso de una gran cantidad de teclas aún no estandarizadas, y para ellos se desarrolló este fenomenal teclado capaz de requerir un "Mano" del Eternauta para su correcta operación.

Ahora bien, estos teclados son parcialmente compatibles con las IBM PC, pero difíciles de adaptar al uso de los sistemas operativos actuales. Es por ello que la empresa Unicomp ha recreado el mismo en un fiel clon con teclas de resorte basculante, su teclado número de catálogo UB40T56 provisto de interfaz USB (y en esquema negro peronista).


El uso de uno de estos teclados tan provistos puede presentar ventajas a para quien requiera enorme combinaciones de teclas y un astronómico empleo de edición de texto y programación.

Lamentablemente, el uso de este tipo de teclados no está netamente soportado en GNU. Para hacer un uso efectivo, habremos de emplear ciertos recaudos. En particular debemos tener en cuenta dque nuestro sistema debe recibir las instrucciones específicas para saber qué hacer con las las teclas no estandarizadas del Modelo F 122 de Ubicom.

Vean señores, en un teclado estándar, cada tecla del teclado envia electrónicamente un código de tecla único al sistema, el cual, y nuestra computadora debería reaccionar acordemente. Sin embargo esto no es lo procedente en el teclado Unicomp mencionado.

Afortunadamente, mi rol como Conductor del Movimiento Nacional Justicialismo me impone acercar de forma paternalista las soluciones anheladas por las Masas del Pueblo. Por lo tanto volcaré esta sapiencia para que cada argentino lleve en su mochila el bastón de Mariscal.

La primera tarea para usar el Unicomp de 122 teclas con Ubuntu será activar el modo de código de tecla único en el teclado en sí. Para lograrlo debemos abrir el teclado y remover un jumper específico de la plaqueta del mismo. Esto sencillo de hacer: damos vuelta el acorazado, y sacamos los tornillos de la carcasa, removiendo la mitad superior de la misma. La plaqueta quedará expuesta, lo que aprovechamos para buscar debajo de un pequeño microcontrolador integrado, y cerca del LED de Scroll Lock, al Jumper JP3.

Lo removemos tirando hacia arriba y quitando el jumper., y luego volvemos a cerrar el teclado y reponer los tornillos.

Acto seguido será recomendable activar en nuestro GNU con Linux el parámetro de kernel“atkbd.softraw=0”, lo cual podremos lograr a partir de Ubuntu 10.04 abriendo una Terminal con Ctrl+Alt+T e ingresando el siguiente Comando de Organización:

sudo nano /etc/default/grub

Se abrirá el archivo de configuración del arrancador Grub, con nuestros parámetros de configuración. Nos aseguramos de buscar la siguiente variante:

GRUB_CMDLINE_LINUX_DEFAULT=""

.,..y dentro del string entrecomillado, al final del mismo, le agregamos lo siguiente, de modo que quede:

GRUB_CMDLINE_LINUX_DEFAULT="atkbd.softraw=0"

Conforme finalicemos esta edición, guardamos los cambios con Ctrl+o, salimos del editor GNU Nano con Ctrl+x. No debemnos olvidar actualizar el arrancador Grub mediante el comando:

sudo grub-update

Si todo está bien y no devuelve errores, reiniciamos nuestro sistema con:

sudo reboot

(Nota: Si nos devolviese algún error, volvemos a editar el archivo para dejarlo como estaba y volvemos actualizar con sudo grub-update).

Si no hacemos esto, el comando showkey -s solamente nos mostrará los códigos de teclas que ya están preconfiguradas en el kernel, y no las que realmente son enviadas por el teclado. Es posible mostrar los códigos de teclas desconocidos activando el módulo i8042 en modo debug, pero el comando atkbd.softraw hace lo mismo de manera mas efectiva.

La parte molesta del procedimiento es tomar nota de cuáles son los códigos de tecla específicos que envía el teclado Unicomp 122. Ello se sondea con showkey -s y presionando las teclas para ver cada una.

Las teclas convencionales son más o menos parecidas a las estandarizadas por el teclado Modelo M de IBM, el de toda la vida. Sin embargo, existen discrepacias. Os listaré preliminarmente los resultados de mi sondeo específico. ¡Estén atentos que vuestros resultados pueden variar! Este teclado no es estándar y por ello requiere comprobar esto para evitar resultados indeseables con el mismo.

Grupo 	Tecla 	Presión 	Soltar 	Código de tecla
Teclas de Función

	F13 	5b 	db 	–

	F14 	5c 	dc 	95

	F15 	5d 	dd 	183

	F16 	63 	e3 	–

	F17 	64 	e4 	–

	F18 	65 	e5 	–

	F19 	66 	e6 	–

	F20 	67 	e7 	–

	F21 	68 	e8 	–

	F22 	69 	e9 	–

	F23 	6a 	ea 	–

	F24 	6b 	eb 	–
(siguiente fila) 	F1 	3b 	bb 	59

	F2 	3c 	bc 	60

	F3 	3d 	bd 	61

	F4 	3e 	be 	62

	F5 	3f 	bf 	63

	F6 	40 	c0 	64

	F7 	41 	c1 	65

	F8 	42 	c2 	66

	F9 	43 	c3 	67

	F10 	44 	c4 	68

	F11 	57 	d7 	87

	F12 	58 	d8 	88
Teclado numérico izquierdo (La tecla superior izq es “Esc”)

	Esc 	7e 	fe 	121

	Cent 	76 	f6 	85

	ImpPant 	72 	f2 	–

	Pausa 	e1 1d 45 	e1 9d c5 	119

	Imprimir 	74 	f4 	–

	Ayuda 	6d 	ed 	–

	Record 	e0 2a e0 37 	e0 b7 e0 aa 	99

	Play 	6f 	ef 	–

	GUI (Windows) 	75 	f5 	–

	Menú 	6c 	ec 	–
Teclado de edición (entre el teclado QWERTY y el teclado numérico)

	RetrocedeTab 	5a 	da 	–

	Insertar 	e0 49 	e0 c9 	104

	RePág 	e0 51 	e0 d1 	109
(siguiente fila) 	Blue Return 	e0 4f 	e0 cf 	107

	Supr 	e0 52 	e0 d2 	110

	AvPág 	e0 53 	e0 d3 	111
(siguiente fila) 	Flecha Arriba 	e0 48 	e0 c8 	103
(siguiente fila) 	Flecha Izq 	e0 4b 	e0 cb 	105

	Inicio 	e0 47 	e0 c7 	102

	Flecha Der 	e0 4d 	e0 cd 	106
(siguiente fila) 	Flecha Abajo 	e0 50 	e0 d0 	108
Teclado numérico
(fila superior) 	Fin 	01 	81 	1

	Bloq Desp 	46 	c6 	70
(BloqDesp+Mayús) 	Bloq Num 	45 	c5 	69

	/ 	37 	b7 	55

	* 	e0 c5 	e0 b5 	98
(siguiente fila) 	KP-7 	47 	c7 	71

	KP-8 	48 	c8 	72

	KP-9 	49 	c9 	73

	– 	4e 	ce 	78
(siguiente fila) 	KP-4 	41 	cb 	75

	KP-5 	4c 	cc 	76

	KP-6 	4d 	cd 	77

	+ 	4a 	ca 	74
(siguiente fila) 	KP-1 	4f 	cf 	79

	KP-2 	50 	d0 	80

	KP-3 	51 	d1 	81

	Enter 	e0 1c 	e0 9c 	96
(siguiente fila) 	KP-0 	52 	d2 	82

	KP-. 	53 	d3 	83

    Grupo. Para dividir las cosas, he agrupado las teclas en 5 secciones separadas del teclado: las teclas de función, el teclado de la izquierda, el teclado QWERTY, el teclado de edición, y el teclado numérico. Los detalles del teclado QWERTY estarán al final ya que los otros grupos son más interesantes (las teclas del QWERTY funcionan sin problemas).
    Tecla. Este es la impresión de la tecla en el teclado. Podría ser diferente en distintas variantes, de modo que en todos los casos he iniciado con el teclado desde la parte superior izquierda, y he ido bajando hacia la derecha y abajo..
    Presión. Este es el código producido cuando la tecla se aprieta.
    Soltar. Este el el código producido cuando la tecla se suelta.
    Código de tecla. Este el el código de tecla configurado producido en la consola Linux. Las celdas rojas son valores que son erróneos, pero además hay muchos que faltan pues no se producen con una presión de tecla. Son equivocados porque el código de letras dan un resultado que no se condice con la tecla en sí - en algunos casos peligrosamente erróneos, como AvPg que produce un Supr. Una de las cosas de que debemos tener en cuenta es que DEBEMOS usar el comando "showkey -k" en la consola para obtener los mismos números que tengo. El servidor X parece agregar un 8 a cada código de tecla.

Podremos encontrar ciertas particularidades. F14 y F15 han recibidos códigos de tecla estándares por defecto, de modo que sus códigos de tecla deben coincidir con teclas definidas en los teclados más populares. Y por supuesto, BloqNum y BloqDesp comparten el mismo código lo cual es extraño. Finalmente la tecla Record envía dos toques de tecla en uno.
Corregir las Teclas Erróneas
En primer lugar debemos mapear las teclas que producen un código de tecla que representa una tecla diferente que la que corresponde. Como la tecla marcada como End, que devuelve el código estandarizado de la tecla Esc. He dejado dos de las teclas erróneas de este grupo ya que serán mejor representadas en la próxima sección.

Las teclas erróneas pueden ser corregidas con los siguientes comandos:
 

setkeycodes 7e         1    # Esc
setkeycodes e049      82    # Insert
setkeycodes e051     105    # PageUp
setkeycodes e052     111    # Delete
setkeycodes e053     109    # PageDown
setkeycodes 01       107    # End
setkeycodes 37        98    # KP-/
setkeycodes e035      55    # KP-*
setkeycodes 4e        74    # KP--
setkeycodes 4a        78    # KP-+


He dejado un par de las teclas erróneas de esta sección, ya que no devuelven valores peligrosamente incorrectos, y corresponden de manera más lógica a la próxima sección (las teclas Record y Blue Return).
Configurar las Teclas Extra
Ahora concentrémonos en las teclas extras. La parte difícil fue inventar nuevos códigos de tecla para estas teclas que no entren en conflicto con códigos de teclas previamente existentes, y que además sean razonables. Esto en la práctica es imposible, ya que el comando xmodmap -pk no aparenta mostrar un rango significativo de códigos de tecla no utilizados, aunque algunos de los códigos utilizados se empleen para butones con la orden "comprar" y cosas por el estilo!

De tal manera, que escogemos un rango con el mayor número de teclas no asignadas o inútiles, y los asignamos:
 

setkeycodes 5b       222    # F13
setkeycodes 5c       223    # F14
setkeycodes 5d       224    # F15
setkeycodes 63       225    # F16
setkeycodes 64       237    # F17
setkeycodes 65       238    # F18
setkeycodes 66       228    # F19
setkeycodes 67       229    # F20
setkeycodes 68       230    # F21
setkeycodes 69       231    # F22
setkeycodes 6a       232    # F23
setkeycodes 6b       233    # F24
setkeycodes 72        99    # Record (luego de intercambiar la tecla)
setkeycodes 74       209    # Print
setkeycodes 6d       138    # Help
setkeycodes 6f       239    # Play
setkeycodes 75       234    # Windows (GUI)
setkeycodes 6c       240    # Menu
setkeycodes 5a       235    # Backtab
setkeycodes e04f     236    # BlueReturn


Una vez que hemos cambiado esto, podemos buscar corregir los mapeados bajo el servidor X, que es la causa por la cual F17 y F18 están fuera de secuencia con los de arriba. Una de las teclas tiene que ser (al menos hasta que alguien logre una solución mejor) ordenada con un recambio de teclas. Para ello intercambiamos de lugar la tecla Record y la cambiamos por la marcada PrintScreen” (esto es fácil de hacer pues en los teclados IBM podemos sacar las teclas y ponerlas en otro lugar). Además como el código de teclas de Record efectivamente son dos códigos de tecla en uno, si intentamos remapearlo esto provoca "problemas extraños difíciles de dilucidar".
Corregir el resultado bajo servidor X11
Una vez que hemos configurado los código de tecla que no hacen cosas raras bajo el servidor X (por ejemplo F17 y F18 no producen un código de teclas bajo X11, sino que disparan otro evento), podemos seguir configurando el teclado bajo X según nuestros gustos.

A continuación un intento de mapear lo más fielmente posible las acciones de las teclas sin irnos a los extremos.
 

xmodmap -e "keycode 230 = F13"
xmodmap -e "keycode 231 = F14"
xmodmap -e "keycode 232 = F15"
xmodmap -e "keycode 233 = F16"
xmodmap -e "keycode 245 = F17"
xmodmap -e "keycode 246 = F18"
xmodmap -e "keycode 236 = F19"
xmodmap -e "keycode 237 = F20"
xmodmap -e "keycode 238 = F21"
xmodmap -e "keycode 239 = F22"
xmodmap -e "keycode 240 = F23"
xmodmap -e "keycode 241 = F24"
xmodmap -e "keycode 217 = Print"
xmodmap -e "keycode 9 = Escape 3270_Attn"
xmodmap -e "keycode  93 = cent bar"
xmodmap -e "keycode 175 = 3270_Record"
xmodmap -e "keycode 175 ="
xmodmap -e "keycode 247 = 3270_Play"
xmodmap -e "keycode 242 = Super_L"
xmodmap -e "keycode 248 = Multi_key"
xmodmap -e "keycode 243 = 3270_BackTab"
xmodmap -e "keycode 118 = Insert 3270_Duplicate"
xmodmap -e "keycode 112 = Prior 3270_Jump"
xmodmap -e "keycode 117 = Next 3270_Rule"


Esto nos da como resultado una configuración de teclado que más o menos ofrece los resultados esperados al presionar las teclas correspondientes. Para lograr algunos de los símbolos azules, presionamos la tecla correspondiente en combinación con Mayúscula.

El teclado numérico podría recibir un poco más de atención en cuanto a su mapeado en X, y hay algunos símbolos azules en el teclado QWERTY principal que podrían ser mapeados con mayor utilidad, pero de momento esto es suficiente para el Justicialismo.

Configurarlo fácilmente en un archivo

Una vez comprendido el censado de los código de tecla de este particular teclado y ajustado nuestros anhelos, podremos hacerlo efectivo para nuestro sistema. Lo más práctico es juntar todo en un script que podamos ejecutar, ya sea aisladamente o cuando arranca el sistema (tal vez no recomendado esto, pues desfasaría otros teclados estándares). Si quisiéramos poner en práctica lo primero y dejar un script que deba ejecutarse para usar este teclado Unicomp, podríamos ingresar:

nano ~/teclado_122.sh

Esto abrirá el editor GNU Nano con un archivo en blanco. y le agregamos entonces el siguiente bloque de texto (que engloba los comandos anteriores):

#!/bin/bash
#
# Configuración para el teclado Unicomp de 122 teclas peronista 

# para Ubuntu 10.04 y superior.
# corrección teclas erróneas:

setkeycodes 7e         1    # Esc
setkeycodes e049      82    # Insert
setkeycodes e051     105    # PageUp
setkeycodes e052     111    # Delete
setkeycodes e053     109    # PageDown
setkeycodes 01       107    # End
setkeycodes 37        98    # KP-/
setkeycodes e035      55    # KP-*
setkeycodes 4e        74    # KP--
setkeycodes 4a        78    # KP-+

#configuración de teclas extra del teclado unicomp 122
setkeycodes 5b       222    # F13
setkeycodes 5c       223    # F14
setkeycodes 5d       224    # F15
setkeycodes 63       225    # F16
setkeycodes 64       237    # F17
setkeycodes 65       238    # F18
setkeycodes 66       228    # F19
setkeycodes 67       229    # F20
setkeycodes 68       230    # F21
setkeycodes 69       231    # F22
setkeycodes 6a       232    # F23
setkeycodes 6b       233    # F24
setkeycodes 72        99    # Record (luego de intercambiar la tecla)
setkeycodes 74       209    # Print
setkeycodes 6d       138    # Help
setkeycodes 6f       239    # Play
setkeycodes 75       234    # Windows (GUI)
setkeycodes 6c       240    # Menu
setkeycodes 5a       235    # Backtab
setkeycodes e04f     236    # BlueReturn

#mapeo de teclas en x11

xmodmap -e "keycode 230 = F13"
xmodmap -e "keycode 231 = F14"
xmodmap -e "keycode 232 = F15"
xmodmap -e "keycode 233 = F16"
xmodmap -e "keycode 245 = F17"
xmodmap -e "keycode 246 = F18"
xmodmap -e "keycode 236 = F19"
xmodmap -e "keycode 237 = F20"
xmodmap -e "keycode 238 = F21"
xmodmap -e "keycode 239 = F22"
xmodmap -e "keycode 240 = F23"
xmodmap -e "keycode 241 = F24"
xmodmap -e "keycode 217 = Print"
xmodmap -e "keycode 9 = Escape 3270_Attn"
xmodmap -e "keycode  93 = cent bar"
xmodmap -e "keycode 175 = 3270_Record"
xmodmap -e "keycode 175 ="
xmodmap -e "keycode 247 = 3270_Play"
xmodmap -e "keycode 242 = Super_L"
xmodmap -e "keycode 248 = Multi_key"
xmodmap -e "keycode 243 = 3270_BackTab"
xmodmap -e "keycode 118 = Insert 3270_Duplicate"
xmodmap -e "keycode 112 = Prior 3270_Jump"
xmodmap -e "keycode 117 = Next 3270_Rule" 


Una vez que tengamos el archivo, guardamos los cambios y salimos del editor con Ctrl+o y Ctrl+x. Finalmente lo hacemos ejecutable con el siguiente comando:

chmod +x ~/teclado_122.sh
cd ~
sudo mv teclado_122.sh /usr/local/bin/

De ahora en más, podremos hacer efectivos los cambios ejecutando el script con este comando:

teclado_122.sh