Digitando usando combinações de teclas?

12

Eu sou um usuário do Ubuntu 10.04 que está procurando uma maneira de, por exemplo, fazer meu computador digitar um caractere "+" quando eu pressiono a Windowstecla (acho que é chamada Superno mundo Linux) e pressiono a Ktecla. Eu preciso que isso funcione em todos os aplicativos. (Eu sou uma pessoa com deficiência de digitação e preciso adaptar o Ubuntu às minhas necessidades.) Obrigado!

Kris Harper
fonte

Respostas:

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.

Etapa 0 - A abordagem

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

A abordagem seria mapear uma tecla modificadora (como tecla Alt Super ou Direita Alt) como a tecla "switch de modo" e dizer ao servidor X para gerar códigos diferentes, dependendo de uma tecla ser pressionada com a tecla Mode pressionada ou não.

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

No entanto, eu gostaria que você considerasse o uso da tecla Alt Alt como chave de modo, especialmente se você também estiver usando o compiz, já que alguns plug-ins do compiz mapeiam atalhos de super tecla (por exemplo, seletor de janelas, alternador etc.). Se você não está interessado em controlar o compiz pelo teclado, o Super está ótimo.

Para o xmodmap, as super chaves são identificadas como Super_L ou Super_R. Você precisa escolher um para usar como a tecla do interruptor de modo. Como alternativa, a tecla alt correta é Alt_R. Você pode confirmar isso executando o xev e pressionando as teclas necessárias no teclado. Veja esta postagem para as etapas.

Etapa 1 - Configurando o Mapa Modificador

  1. Abra um terminal ( Applications -> Accesories -> Terminal) e execute o seguinte comando para criar um arquivo com as combinações de teclas atuais . 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 começando com "xmodmap: até 4 ..."

  4. Edite o mapa modificador para que fique assim. Coloque a palavra "adicionar" 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 mudei Mode_switchde uma mod5linha para mod3outra desde que ela estava vazia. A tabela modificada deve se parecer com isso - o conteúdo real variará ligeiramente no seu caso daqueles abaixo (depende do layout do 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 chave 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" direita ainda atuará como uma super chave normal, enquanto a tecla esquerda terá propriedades especiais.

  7. Agora precisamos remapear as teclas para produzir códigos diferentes, pressionados enquanto pressionamos Super_L ou não. Cada linha em nosso arquivo que começa com keycodeespecifica 4 academias de teclas para cada tecla a ser gerada com base no pressionamento das teclas Mod1 (shift shift) e Mode. ( 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 tecla "+", precisamos modificá-la para ler

    keycode  45 = k K plus plus
    

    O plus final também mapeia Shift + Super_L + k para plus, mas isso pode ser mapeado para outra coisa. Para cada chave, há exatamente 1 linha para modificar. Edite mais linhas para remapear mais chaves - deixe as 2 primeiras entradas intactas para manter o comportamento normal de pressionamento de tecla.

  8. Salve o arquivo e saia do editor.

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

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

Etapa 3 - Adicionando / revisando o mapa

Uma vez instalado o mapa modificado, é fácil adicionar novas chaves.

  1. Use xev para encontrar os códigos e academias de chaves

  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) pelos valores apropriados.

  3. Faça backup do curkeys.maparquivo.

  4. Abra curkeys.mape edite a linha do código-chave correspondente.
  5. Reaplique com os comandos abaixo (o primeiro não é necessário se você executou a etapa 2)

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

Nota: 1 : modificações feitas nos atalhos de teclado (por exemplo,System -> Preferences -> Keyboard Shortcuts ) afetam o mapa do modificador e geralmente serão perdidas no próximo login. Então, por favor, evite isso.

Nota: 2 : Às vezes, recebo mensagens de erro como essa ao usar este método. Não sei o que isso significa, no entanto, geralmente são 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

Ajuda detalhada para xmodmap está disponível aqui .

koushik
fonte
alguma sorte com este? Se isso não estiver ajudando ou de alguma forma não for claro, pls comenta, revisarei e tornarei mais útil.
koushik
1
Por favor, note que no Linux Mint 17 Xfce (ou pelo menos lá), que tem que ser ~/.Xmodmap, ~/.xmodmapfica ignorado.
zbr 11/09/14
2
Não se esqueça cleardas chaves que estão sendo redefinidas conforme unix.stackexchange.com/a/4526/2512
Andy