Configurar tiempo de repetición de tecla del teclado en Linux

Última actualización: 23/04/2026
Autor: Isaac
  • Ajustar el tiempo y velocidad de repetición de teclas en Linux puede hacerse tanto desde el entorno gráfico como con herramientas de consola.
  • El sistema traduce scancodes en keycodes y luego en caracteres usando mapas de teclado, modificadores y diferentes modos de consola.
  • Utilidades como kbdrate, setkeycodes, loadkeys y dumpkeys permiten personalizar a fondo el comportamiento del teclado y teclas especiales.
  • La configuración permanente se apoya en scripts de arranque, mapas en /usr/share/kbd y la base de datos terminfo para el modelo de terminal.

configurar repeticion de teclas en linux

Cuando trabajas a diario con Linux, la forma en que responde el teclado marca la diferencia entre escribir con fluidez o acabar desesperado. El tiempo de repetición de tecla, el retardo inicial y el comportamiento de cada tecla pueden ajustarse con una precisión enorme, tanto desde el entorno gráfico como desde la consola de texto y el propio kernel.

Además, en Linux no solo puedes cambiar cuánto tarda una tecla en empezar a repetirse o cuántos caracteres por segundo genera cuando la mantienes pulsada, sino que también puedes modificar el mapa de teclado, redefinir teclas especiales, cambiar la distribución e incluso asignar acciones avanzadas como lanzar programas o apagar el sistema.

Configuración gráfica del tiempo de repetición de tecla en Linux

En la mayoría de escritorios modernos de Linux (por ejemplo GNOME, KDE Plasma, Cinnamon, etc.), el primer lugar donde ajustar el comportamiento de las teclas es el panel de configuración del sistema. Estos entornos ofrecen un apartado específico de Teclado donde se ajustan el retardo y la velocidad de repetición sin pelearse con la consola.

En un entorno tipo GNOME, lo habitual es ir a “Configuración del sistema → Teclado → Repetición de teclas”. Ahí aparecen dos controles principales: el retraso antes de que empiece a repetirse una tecla al mantenerla pulsada, y la velocidad de repetición (cuántos caracteres por segundo se generan).

El “retraso de repetición” controla el tiempo que pasa desde que dejas la tecla apretada hasta que empieza a disparar caracteres sin parar. Si te cuesta levantar el dedo con rapidez o si usas el teclado para mover cursores con precisión, puede interesarte aumentar ese retardo, o directamente desactivar la repetición automática.

La “velocidad de repetición” indica cuántos caracteres se producen una vez que la repetición ha empezado. Una velocidad alta puede venir muy bien para desplazarte rápido en texto o juegos, pero también puede provocar que se te escapen demasiados caracteres si te pasas con el valor.

En el caso concreto de teclas especiales, como una rueda o perilla de volumen integrada en el teclado, puedes querer un comportamiento distinto. Por ejemplo, quizá te interesa que al girar la rueda el volumen suba o baje al instante, sin el retardo de 600 ms típico de las demás teclas. En entornos gráficos estándar no suele haber opción de fijar un retardo diferente por tecla, así que ahí es donde entra en juego la capa más baja del sistema y las utilidades de consola.

ajustar retraso y velocidad de repeticion de teclas

Control del teclado desde el sistema: scancodes, keycodes y BIOS

Bajo la capa gráfica, Linux trata el teclado con mucho más detalle de lo que parece. Cuando pulsas una tecla, el dispositivo no envía directamente una letra, sino un código de exploración o scancode. Ese scancode llega al kernel, que lo transforma en un keycode, y a partir de ahí se aplica un mapa de teclado que finalmente produce un carácter o una acción.

Tradicionalmente, la interrupción 9 de la BIOS se ocupaba de manejar el teclado (lo típico en sistemas tipo MS-DOS), pero en Linux el kernel instala su propia rutina de servicio para la interrupción del teclado. Esa rutina sigue un esquema parecido al clásico, aunque con diferencias en la interpretación de scancodes y en cómo se rellenan los buffers internos.

La mayoría de teclas generan dos códigos: uno cuando las pulsas (make code) y otro cuando las sueltas (break code). En la práctica, el kernel suele ignorar los break codes para simplificar el tratamiento, salvo en casos concretos como teclas de conmutación (Shift, Ctrl, Alt, etc.). Además, algunas teclas especiales generan secuencias dobles: primero un byte de prefijo (por ejemplo 0xE0) y luego el código de la tecla.

Para los scancodes en el rango 0x01-0x58 (1 a 88 en decimal), Linux aplica por defecto una regla muy directa: keycode = scancode. En otros rangos (por ejemplo 0x59-0x7F o las secuencias que empiezan por 0xE0), la relación no es tan trivial y se utiliza una tabla interna del kernel que define a qué keycode corresponde cada combinación de scancodes.

Con herramientas como showkey y getkeycodes puedes ver de forma exacta qué códigos está produciendo tu teclado. Por ejemplo, ejecutando showkey -k en una consola virtual (no en una terminal gráfica) verás los keycodes que genera cada pulsación, y con showkey -s puedes ver los scancodes crudos que envía el hardware, y ayuda a resolver problemas como cuando no funciona el teclado del portátil.

  Cómo actualizar de Windows 10 a Windows 11: guía detallada con todos los métodos, requisitos y trucos

Modificar la asignación de teclas: comando setkeycodes

En situaciones donde una tecla especial (como una rueda de volumen, teclas multimedia o teclas extra del teclado) no se interpreta correctamente, se puede usar setkeycodes para ajustar la asociación entre scancode y keycode. Este comando te permite decirle al kernel “cuando veas este scancode, trátalo como si fuera este keycode”.

La sintaxis básica es:

setkeycodes scancode keycode

El scancode se expresa en hexadecimal (por ejemplo e049) y el keycode en decimal (por ejemplo 112). De esta forma puedes reasignar teclas poco convencionales para que el sistema las vea como teclas estándar u otras que te interesen.

Imagina que tu teclado genera la secuencia 0xE0 0x49 al pulsar una tecla física de “Página Arriba”. Según la tabla por defecto del kernel, eso puede corresponder al keycode 104. Si prefieres que esa tecla se comporte como otra, podrías ejecutar algo como:

setkeycodes e049 112

Tras ese cambio, la pulsación de esa tecla generará el keycode 112 en lugar del 104. Lo importante aquí es que esta reasignación se hace a nivel de kernel, antes de que el mapa de teclado convierta el keycode en una acción concreta. A partir de ahí, en tu mapa podrás decidir qué hace el keycode 112.

Para inspeccionar qué keycodes reconoce el sistema y qué rangos admite, puedes usar getkeycodes, que mostrará las tablas internas. Estas utilidades suelen requerir permisos de administrador porque modifican el comportamiento global del teclado en todas las consolas virtuales.

mapa de teclado y configuracion avanzada en linux

Modos de operación de la consola Linux

En las consolas de texto (las típicas TTY a las que accedes con Ctrl+Alt+F1…F6), el controlador de teclado y de consola de Linux puede funcionar en varios modos, que determinan qué recibe exactamente la aplicación. Estos modos influyen en cómo se interpretan los scancodes, keycodes y caracteres.

Los modos principales son:

Modo RAW (Scan mode): el controlador no traduce nada, envía los scancodes tal cual a la aplicación. Es el modo más bajo nivel y se suele usar cuando un sistema gráfico o una aplicación especializada quiere controlar completamente el teclado.

Modo MEDIUMRAW (Keycode mode): el kernel convierte scancodes en keycodes, pero no va más allá. La aplicación recibe keycodes y decide qué hacer. Este enfoque es útil para programas que implementan su propio sistema de atajos y traducción.

Modo XLATE (ASCII mode): es el modo tradicional por defecto en consolas de texto. En él, los scancodes se convierten a keycodes y luego a caracteres según un mapa de teclado de 8 bits (normalmente basado en ISO-8859-1). Es el modo más habitual cuando trabajas directamente en TTY con shell.

Modo UNICODE (UTF-8): similar al anterior, pero usando un juego de caracteres Unicode, enviando al kernel secuencias UTF-8 para representar caracteres de más de un byte. Este modo es clave en sistemas modernos que quieren soportar alfabetos distintos o símbolos extendidos.

El modo efectivo de la consola está relacionado con la variable de entorno TERM. Si haces printenv TERM, lo normal en una consola virtual es ver “linux”, mientras que en una terminal gráfica en X o Wayland se ve “xterm”, “xterm-256color” u otro similar. Cuando se ejecuta un servidor X, el propio X gestiona el teclado y el kernel suele dejar la consola en modo RAW, delegando la interpretación en el servidor gráfico.

La tecla Alt se conoce en este contexto como tecla Meta, y la combinación Alt+X se suele escribir como MetaX. El comportamiento de estas pulsaciones Meta se puede ajustar con la utilidad setmetamode, que permite elegir si al pulsar Alt+X se envía una secuencia ESC X (escape seguido del carácter) o bien un carácter cuyo valor es el de X más 128, es decir, con el bit 7 activado.

Modelo de terminal y base de datos terminfo

Linux hereda de UNIX un concepto clásico: el sistema ve cada sesión como un tipo de terminal, que tiene unas características conocidas (teclas especiales, capacidad de color, control de cursor, etc.). Aunque solo tengas un monitor y un teclado, para el kernel estás conectado a través de un modelo concreto de terminal.

Las capacidades de cada modelo de terminal se describen en la base de datos terminfo, ubicada normalmente en /usr/share/terminfo/. Esta base contiene ficheros organizados en subdirectorios por letra inicial (por ejemplo, el fichero de vt100 se encuentra en un subdirectorio cuyo nombre empieza por la primera letra del terminal).

  Desactivar la vista previa de los mensajes de WhatsApp en un teléfono Android

Cada fichero terminfo describe el nombre del terminal, alias y un listado enorme de capacidades: qué secuencias de escape corresponden a las teclas de función, cómo se mueve el cursor, cómo se limpian líneas, etc. Un ejemplo típico de cabecera de un terminal clásico es algo como “vt100|vt100-am|dec vt100 (w/advanced video) …”.

Para interactuar con las características del terminal desde la línea de comandos, tienes varias herramientas:

stty: sirve para ver y ajustar parámetros de la terminal (eco, control de flujo, caracteres de borrado, etc.).

setterm: permite modificar atributos de la consola, como comportamiento de vídeo, parpadeo, colores y otros. Si se ejecuta sin argumentos, suele listar todas las características que se pueden ajustar en el terminal actual.

tput: se apoya en terminfo para enviar secuencias de control estándar al terminal, como limpiar la pantalla, mover el cursor o cambiar atributos, sin tener que escribir manualmente las secuencias ANSI.

Configuración del teclado en el arranque del sistema

Según la especificación Linux Standard Base (LSB), los scripts de inicio del sistema residen en /etc/init.d/ y son lanzados directa o indirectamente por /sbin/init, el proceso padre de todos los demás. Dentro de esta estructura se definen los pasos para inicializar el hardware, redes, consolas y, cómo no, el teclado.

Normalmente, durante la secuencia de arranque se ejecutan scripts situados en /etc/init.d/boot.d/ o rutas equivalentes según la distribución. Estos scripts se encargan de elementos como puertos serie, tarjetas de red, reloj CMOS, volúmenes lógicos y otras piezas básicas. Al final, suele ejecutarse un script tipo /etc/init.d/boot.local para órdenes personalizadas del administrador.

En lo que afecta al teclado de consola de texto, muchas distribuciones usan un fichero de configuración como /etc/sysconfig/keyboard. En él se especifican parámetros clave, entre ellos el mapa de teclado que se va a cargar en el arranque y los ajustes de repetición.

En ese archivo aparecen directivas como:

KEYTABLE: indica el fichero de mapa de teclado, generalmente ubicado en /usr/share/kbd/keymaps/. Un valor típico podría ser “es.map.gz”, que señala un mapa para teclado español.

KBD_RATE y KBD_DELAY: definen la frecuencia de repetición (por ejemplo de 2.0 a 30.0 caracteres por segundo) y el retardo inicial en milisegundos (250, 500, 750, 1000, etc.). Si quieres que el sistema ejecute el comando kbdrate en el arranque, debes establecer ambos valores.

Además, hay ajustes de estado inicial de teclas como NumLock, ScrollLock y CapsLock, que pueden fijarse a “yes”, “no” o “bios” (respetar la configuración del BIOS). Incluso existe una opción para desactivar la funcionalidad de bloqueo de mayúsculas y convertir la tecla Caps Lock en otra tecla Shift normal.

La línea más importante para el comportamiento general del teclado es la que define el mapa, algo del tipo:

KEYTABLE=»es.map.gz»

Ese mapa determina qué hace cada keycode, es decir, qué carácter o acción se generará al pulsar cada tecla en combinación con los modificadores (Shift, AltGr, Control, etc.). A partir de ahí, puedes ajustar en caliente el comportamiento con herramientas como loadkeys, dumpkeys, showkey y kbdrate.

Utilidades clave: showkey, loadkeys, dumpkeys y kbdrate

Una vez arrancado el sistema, tienes a mano varias herramientas potentes para manipular el teclado en tiempo real. Son utilidades de consola que, usadas con cabeza, permiten adaptar el teclado a casi cualquier necesidad.

showkey: sirve para comprobar qué códigos genera realmente el teclado. Con showkey -s ves los scancodes tal y como llegan del hardware; con showkey -k se muestran los keycodes que produce la rutina del kernel tras la primera conversión.

loadkeys: carga un nuevo mapa de teclado en las consolas virtuales. Requiere privilegios de root y hay que usarlo con cautela, ya que afecta a todas las TTY, incluida la de login. Un mapa mal configurado puede hacer muy complicado escribir la contraseña o incluso iniciar sesión.

dumpkeys: permite inspeccionar el mapa de teclado actual y otros detalles relacionados, como definiciones de funciones, composiciones de caracteres y equivalencias simbólicas. Con opciones como dumpkeys –long-info, dumpkeys –funcs-only o dumpkeys –compose-only puedes obtener listados muy detallados de cómo está armado tu mapa.

kbdrate: es la herramienta directa para cambiar la velocidad de repetición y el retardo inicial del teclado. En muchos sistemas, los valores por defecto imitan el estándar de teclados IBM: unos 10 caracteres por segundo y unos 250 ms de retraso. Con kbdrate puedes alterarlos sin reiniciar, y resulta útil para entender opciones de accesibilidad como teclas filtro en Windows.

Por ejemplo, para un retardo muy corto y una repetición rápida, podrías usar algo como:

kbdrate -d 200 -r 30

donde -d marca el delay (en milisegundos) y -r la tasa de repetición (caracteres por segundo). Si quieres un comportamiento globalmente más pausado, aumentas el delay o bajas la tasa, y si quieres algo casi inmediato, reduces el delay a 200 ms o incluso menos, según lo permita tu hardware.

  Cómo crear un PDF a partir de varios PDFs: guía paso a paso

El mapa de teclado: definición interna y modificadores

El “keymap” o mapa de teclado es el corazón de la configuración avanzada. Estos mapas pueden estar compilados en el kernel o almacenados como ficheros de texto en /usr/share/kbd/keymaps/, con una configuración por defecto en archivos como /etc/defkeymap.map. Cada distribución suele traer colecciones de mapas para distintos idiomas y disposiciones.

Los mapas de teclado definen, con una sintaxis específica, qué hace cada keycode en combinación con diversos modificadores. En términos generales, se pueden definir hasta 256 acciones distintas para una misma tecla, asociadas a las posibles combinaciones de modificadores (Shift, Alt, Control, AltGr, etc.).

En el fichero de mapa se usan líneas de la forma:

keycode número = símbolo símbolo símbolo …

El número es el identificador interno de la tecla (keycode), que se puede expresar en decimal, octal o hexadecimal. El símbolo (keysym) representa la acción asociada, que puede ser un carácter, una secuencia de caracteres o una función especial como Remove, Boot, Console_15 y muchas otras. Normalmente no se usan códigos numéricos directos, sino constantes simbólicas que se mantienen estables entre versiones del kernel.

Los modificadores se tratan como bits de un octeto, cada uno con un “peso” específico. Por ejemplo, Shift puede tener peso 1, AltGr peso 2, Control peso 4, Alt peso 8, y así sucesivamente con Shift izquierdo, Shift derecho, Control izquierdo y Control derecho. Cuando pulsas una tecla, la acción efectiva se decide sumando los pesos de los modificadores activos y consultando la columna correspondiente en la definición de esa tecla.

Por ejemplo, si presionas una tecla con Shift y Alt, la suma puede dar 9, y la definición en la columna 9 dicta qué se generará. Sin ningún modificador, el índice es 0 y se toma el primer símbolo definido en la línea keycode.

Existe además una marca especial, el signo + delante de algunos símbolos, que indica que deben tratarse como letras, es decir, que responden a Caps Lock y Shift. Un ejemplo típico:

keycode 30 = +a

con lo que se indica que esa tecla genera una ‘a’ minúscula sin modificadores, ‘A’ si actúan mayúsculas, etc. Si se quiere un comportamiento más particular, se puede definir explícitamente la columna de mayúsculas, por ejemplo:

keycode 30 = +a A

Si en alguna combinación concretamente no quieres que la tecla haga nada, se utiliza la palabra clave VoidSymbol. Por ejemplo, para que una tecla solo produzca ‘a’ sin modificadores y nada cuando actúan ciertas combinaciones, se podrían usar definiciones donde esos casos se marquen con VoidSymbol. Además, la sintaxis admite simplificaciones: si se define un solo símbolo y no es una letra ASCII, se asume que se replica en todas las columnas especificadas.

Otras partes del mapa: includes, keymaps, charset, funciones y composición

Los ficheros de mapa de teclado no solo contienen definiciones de keycodes, también incluyen otros elementos importantes para el comportamiento general. Esto permite modularidad, soporte de distintos juegos de caracteres y definición de teclas de función y combinaciones de acentos.

La directiva include permite incluir otros ficheros, de forma similar a un “import”. Esto sirve para reutilizar partes comunes en varios mapas, por ejemplo, una tabla de acentos o un conjunto de funciones estándar.

La línea keymaps define qué columnas (índices de modificadores) se especifican en el mapa. En lugar de listar las 256 posibles, se suelen indicar rangos como keymaps 0-2,4-5,8,12, lo que significa que se usan las columnas 0,1,2,4,5,8 y 12 (normal, Shift, AltGr, Control, Control+Shift, Alt y Control+Alt). Si esta línea falta, se asume que hay definiciones desde 0 hasta M, siendo M el máximo índice encontrado en las líneas keycode.

Las definiciones de juegos de caracteres se hacen con líneas del tipo:

charset «iso-8859-2»

y determinan a qué página de códigos corresponden los valores numéricos de los caracteres. Por defecto suele usarse ISO-8859-1 (Latin-1), pero también se pueden utilizar otras, como ISO-8859-2 o ISO-8859-7. Esto es relevante para símbolos como la letra griega mu o caracteres especiales propios de determinados idiomas.

Las definiciones de cadena utilizan la sintaxis:

string keysym = «texto»

y sirven para asociar teclas de función o teclas especiales a secuencias concretas de caracteres. Por ejemplo, se puede indicar que F1 envíe “ESC