Reasignar teclas thinkpad

De Recursos Educativos
Ir a la navegación Ir a la búsqueda
Teclas thinkpad.jpg

Algunos modelos de Thinkpad (T510 por ejemplo) tienen un par de teclas encima de las del cursor que tienen un efecto odioso: hacen en los navegadores de "adelante" y "atras". Lo habitual es que sean PagArriba y PagAbajo, con lo que cuando estás navegando y quiere mover arriba o abajo la pagina en la que estás lo que obtienes es adelante y atras en el historial de navegación, que es un dolor.

Solucion:

xmodmap -e 'keycode 166=Prior'
xmodmap -e 'keycode 167=Next'

No tengo aun claro como hacer el cambio permanente.

Actualización 22-mayo-2018. Resulta que por diversos motivos los gestores de escritorio no acaban de hacer lo que deberian y no cargan el fichero ~/.Xmodmap que en teoría sería la manera correcta y elegante de hacer este cambio permanente. Basta buscar en Internet para darse cuenta de que no hay solución buena y completa, unas pierden la configuración al rebotar, al suspender, hasta al saltar el protector de pantalla, otras dependen de scripts, etc.

Así que cambié de aproximación a una basada en xkb.

Actualización 21-mayo-2020. Al actualizar Debian 9 a Debian 10, se perdió el cambio. Lo volví a hacer y funcionó correctamente. He comprobado si estoy usando XOrg o Wayland como se explica aquí y estoy usando XOrg. Puede que esta solución no funcione en Wayland.

Solucion con XKB

Partimos de la información de que las teclas a las que queremos cambiar tienen los keycodes 166 y 167 (esta información se obtiene con xev). Buscamos que nombre da XKB a estos keycodes en /usr/share/X11/xkb/keycodes/evdev y obtenemos que son I166 y I167.

Necesitaremos también saber el nombre de las que funcionan como PaginaArriba y Pagina Abajo (en mi caso keycodes 112 y 117). Sus nombres resultan ser PGUP y PGDN.

Con esta información nos vamos a /usr/share/X11/xkb/symbols/. Alli buscamos PGUP y PGDN y vemos que los eventos que generan son Prior y Next. Esos son los eventos que queremos generar con I166 y I167. Buscamos I166 y vemos que está definida en el fichero inet.

Hacemos el siguiente cambio:

Antes:

    key <I166>   {      [ XF86Back              ]       };
    key <I167>   {      [ XF86Forward           ]       };

Despues:

//  key <I166>   {      [ XF86Back              ]       };
//  key <I167>   {      [ XF86Forward           ]       };
    key <I166>   {      [ Prior                 ]       };
    key <I167>   {      [ Next                  ]       };

Y listo. A funcionar.