Digitando usando combinações de teclas?

12

Sou um usuário do Ubuntu 10.04 que está procurando uma maneira de, por exemplo, fazer com que meu computador digite um caractere "+" quando eu mantenho a Chave do Windows (acho que é chamada < kbd> Super no mundo Linux) e pressione a tecla K . Eu preciso disso para funcionar em todas as aplicações. (Sou uma pessoa com deficiência de digitação e preciso adaptar o Ubuntu às minhas necessidades.) Obrigado!

    
por Kris Harper 03.10.2010 / 02:59

1 resposta

15

Como você deseja remapear as chaves para todos os aplicativos, a melhor opção é usar o xmodmap. É flexível e muito poderoso, mas envolve digitar alguns comandos em um terminal.

Passo 0 - A abordagem

O servidor X gerencia o teclado e todos os eventos principais e traduz isso em códigos de tecla para todos os aplicativos.

A abordagem seria mapear uma tecla modificadora (como tecla Super ou Direita Alt) como a tecla "mode switch" e dizer ao X-server para gerar códigos diferentes dependendo se uma tecla é pressionada com a tecla Mode pressionada ou não.

Por padrão, não há uma chave de mudança de modo definida e todas as teclas são configuradas para gerar o mesmo código quando pressionadas com ou sem a troca de modo. Isso é bom, pois isso significa que, exceto pelas chaves que você sobrescreve explicitamente, nenhuma outra chave se comportará de maneira diferente ou precisará de configuração adicional.

No entanto, eu gostaria que você considerasse usar a tecla Alt como interruptor de modo, especialmente se você também estiver usando compiz, já que alguns plug-ins compelam atalhos de teclas super (por exemplo, selecionador de janela, alternador de mudança, etc.). Se você não está interessado em controlar o compiz através do teclado, então o Super está bem.

Para o xmodmap, as super-chaves são identificadas como Super_L ou Super_R. Você precisa escolher uma para usar como chave de troca de modo. Alternativamente, a tecla alternativa direita é Alt_R. Você pode confirmar isso executando xev e pressionando as teclas necessárias no teclado. Consulte esta postagem para conhecer as etapas.

Passo 1 - Configurando o mapa modificador

  1. Abra um terminal ( Applications -> Accesories -> Terminal ) e execute o seguinte comando para criar um arquivo com as atalhos current . Nós vamos usar isso como ponto de partida.

    xmodmap -pke > curkeys.map
    xmodmap -pm >> curkeys.map
    
  2. Abra isso no seu editor de texto favorito. gedit curkeys.map & abre no gedit. No final do arquivo, você verá algumas linhas como esta:

    keycode 253 =
    keycode 254 =
    keycode 255 =
    xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):
    
    shift       Shift_L (0x32),  Shift_R (0x3e)
    lock        Caps_Lock (0x42)
    control     Control_L (0x25),  Control_R (0x69)
    mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
    mod2        Num_Lock (0x4d)
    mod3      
    mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
    mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)
    
  3. Exclua a linha que começa com "xmodmap: até 4 ..."

  4. Edite o mapa modificador para que fique assim. Coloque a palavra "add" no início de cada linha e insira "=" após o nome do modificador. Em seguida, remova os códigos entre parênteses e vírgulas. Observe também que movi Mode_switch da linha mod5 para mod3 desde que estava vazia. A tabela modificada deve ter esta aparência - o conteúdo real irá variar levemente no seu caso daqueles abaixo (depende do layout do seu teclado).

    add shift =      Shift_L  Shift_R
    add lock  =      Caps_Lock
    add control =    Control_L  Control_R
    add mod1    =    Alt_L Meta_L Alt_R 
    add mod2    =    Num_Lock
    add mod3    =    Mode_switch
    add mod4    =    Super_L Super_R Super_L Hyper_L 
    add mod5    =    ISO_Level3_Shift
    
  5. Remapear a chave de troca de modo físico. Adicione uma linha como esta no final (Substitua Super_L por Super_R ou Alt_R, se necessário).

    keysym Super_L = Mode_switch
    
  6. Remova o nome da chave (Super_L) de qualquer definição de modificador. Para Super_L isso significa removê-lo da linha mod4.

    add mod4    =    Super_R Hyper_L 
    

    Agora, a tecla "Super" correta ainda funcionará como uma super-chave normal, enquanto a tecla esquerda terá propriedades especiais.

  7. Agora precisamos remapear as chaves para produzir códigos diferentes, independentemente de serem pressionados enquanto pressiona Super_L ou não. Cada linha em nosso arquivo que começa com keycode especifica quatro keyyms para cada chave a ser gerada com base nas teclas Mod1 (shift keys) e Mode são pressionadas. ( link )

    !...........................................................................
    !        Key            Base              Shift           Mode    Mode+Shift
    !---------------------------------------------------------------------------
    keycode  13             = 4               dollar          4       quotedbl
    keycode  14             = 5               percent         5       colon
    keycode  15             = 6               asciicircum     6       comma
    keycode  16             = 7               ampersand       7       period
    ...
    keycode  45             = k               K               k       K
    

    Se queremos que a tecla Super_L + k gere uma chave "+", precisamos modificá-la para que seja lida

    keycode  45 = k K plus plus
    

    A soma final também mapeia Shift + Super_L + k para mais, mas isso pode ser mapeado para outra coisa. Para cada chave existe exatamente 1 linha para modificar. Edite mais linhas para remapear mais chaves - deixe as duas primeiras entradas intactas para manter o comportamento normal das teclas pressionadas.

  8. Salve o arquivo e saia do editor.

  9. Instale o mapa de teclado executando os seguintes comandos em um terminal. O primeiro configura para esta sessão, o segundo torna permanente para futuras sessões.

    xmodmap curkeys.map
    cp curkeys.map ~/.Xmodmap
    
  10. Você pode testar imediatamente isso pressionando as teclas modificadas (Super_L + k por exemplo).

Etapa 3 - Adicionando / revisando o mapa

Quando o mapa modificado for instalado, será fácil adicionar novas chaves.

  1. Use xev para encontrar os códigos de teclas e os keyyms

  2. teste-o executando este comando para mapear a chave:

    xmodmap -e "keycode <code> = <base> <shift> <new-mapping> <new-shift-mapping>"
    

    Substitua os itens entre colchetes angulares (como <code> <base> etc) por valores apropriados.

  3. Faça o backup do arquivo curkeys.map .

  4. Abra o curkeys.map e edite a linha para o código de acesso correspondente.
  5. Reaplicar com os comandos abaixo (primeiro não é necessário se você fez o passo 2)

    xmodmap curkeys.map
    cp curkeys.map ~/.Xmodmap
    

Observação: 1 : as modificações feitas em atalhos de teclado (por exemplo, System -> Preferences -> Keyboard Shortcuts ) afetam o mapa de modificadores e geralmente são perdidas no próximo login. Então, por favor, evite isso.

Nota: 2 : às vezes recebo mensagens de erro como essa ao usar esse método. Eu não sei o que isso significa, no entanto, estes são geralmente inofensivos.

X Error of failed request:  BadValue (integer parameter out of range for operation)
Major opcode of failed request:  118 (X_SetModifierMapping)
Value in failed request:  0x17
Serial number of failed request:  263
Current serial number in output stream:  263

A ajuda detalhada do xmodmap está disponível aqui .

    
por koushik 03.10.2010 / 08:24