No X11, fazendo algo como
xset r rate 120 240
é possível definir a taxa de repetição para todo o teclado.
Mas eu me pergunto se é possível fazer a mesma coisa para cada chave individual? (Ou seja, ter chaves diferentes com taxas de repetição diferentes.)
Talvez usando alguma configuração XKB obscura, ou a API XKB C, ou algum hack evdev/ioctl?
E, se não, como você poderia fazer isso se tiver acesso ao firmware do teclado e puder controlar o código USB HID que o teclado envia?
Eu sei que isso deve ser possível de alguma forma porque as teclas modificadoras parecem ter uma taxa de repetição zero, enquanto o restante das teclas tem uma taxa de repetição diferente de zero.
Uma ideia que vem à mente é registrar diferentes conjuntos de chaves como diferentes dispositivos USB e, em seguida, definir diferentes taxas de repetição para diferentes dispositivos, se isso puder ser feito no nível do USB.
O modelo de teclado X11 não oferece suporte a várias taxas de repetição de teclas.
Quando uma tecla é pressionada e liberada, o aplicativo recebe um evento de pressionamento e liberação de tecla. Se a tecla for pressionada e a tecla não for um modificador, obterá vários eventos de pressionamento de tecla antes da liberação da tecla.
As teclas modificadoras são tratadas de forma diferente. Embora o aplicativo obtenha um evento de pressionamento de tecla e liberação de tecla para um modificador (como você diz, sem repetição), geralmente eles são ignorados e, em vez disso, o aplicativo examina a máscara de bits do modificador anexada a todos os outros pressionamentos de tecla. Em outras palavras, os estados das teclas modificadoras são anexados a cada pressionamento de tecla para teclas não modificadoras.
As teclas modificadoras não têm uma taxa de repetição diferente -- elas não suportam repetição alguma.
Como o aplicativo obtém eventos de chave, se você quiser taxas de repetição diferentes para chaves diferentes dentro de um aplicativo, seria possível apenas fazer com que o aplicativo simule qualquer taxa desejada até obter um evento de liberação de chave.
Infelizmente, isso não parece ser possível sem algum esforço sério.
Não tenho certeza de todas as diferenças entre os protocolos de comunicação de teclado PS/2 e USB, mas imagino que eles provavelmente sejam bastante semelhantes na maneira como operam. Dada essa suposição, o que você está tentando fazer não é realmente possível no nível do hardware e seria muito difícil de fazer no nível do sistema operacional.
No nível do hardware, o problema é que a taxa de repetição automática é definida enviando um comando para o teclado e esse comando se aplica a todas as teclas repetidas. Não há nenhum comando para definir a taxa de repetição para chaves individuais.
No nível do sistema operacional, você teria que reescrever o manipulador de entrada do teclado, que é parte direta do kernel ou um driver que é carregado no kernel. O teclado envia uma interrupção para cada tecla pressionada e liberada, mas também envia uma interrupção para cada vez que a tecla se repete automaticamente quando pressionada. Portanto, o driver precisaria ignorar as interrupções de tecla repetidas e gerar artificialmente eventos de pressionamento de tecla na taxa desejada para essa tecla até que uma interrupção de liberação de tecla fosse recebida.
Como alternativa, você pode fazer alterações de código no Xorg para implementar essa funcionalidade no nível do usuário.