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
-
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
-
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)
-
Exclua a linha que começa com "xmodmap: até 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 linhamod5
paramod3
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
-
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
-
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.
-
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.
-
Salve o arquivo e saia do editor.
-
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
-
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.
-
Use xev para encontrar os códigos de teclas e os keyyms
-
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. -
Faça o backup do arquivo
curkeys.map
. - Abra o
curkeys.map
e edite a linha para o código de acesso correspondente. -
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 .