AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 751457
Accepted
étale-cohomology
étale-cohomology
Asked: 2023-07-14 10:06:36 +0800 CST2023-07-14 10:06:36 +0800 CST 2023-07-14 10:06:36 +0800 CST

Defina a taxa de repetição automática individual para cada tecla

  • 772
A recompensa expira em 3 dias . As respostas a esta pergunta são elegíveis para uma recompensa de reputação de +100 . étale-cohomology quer chamar mais atenção para esta questão.

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.

linux
  • 2 2 respostas
  • 9 Views

2 respostas

  • Voted
  1. user10489
    2023-07-17T05:18:02+08:002023-07-17T05:18:02+08:00

    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.

    • 1
  2. Best Answer
    Gogeta70
    2023-07-19T01:21:27+08:002023-07-19T01:21:27+08:00

    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.

    • 1

relate perguntas

  • Existe uma maneira de fazer ls mostrar arquivos ocultos apenas para determinados diretórios?

  • Inicie/pare o serviço systemd usando o atalho de teclado [fechado]

  • Necessidade de algumas chamadas de sistema

  • astyle não altera a formatação do arquivo de origem

  • Passe o sistema de arquivos raiz por rótulo para o kernel do Linux

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve