Substitui alguns códigos de teclas por XKB

8

Eu quero embaralhar algumas chaves com o XKB. (Por quê? Em um laptop onde algumas teclas estão inconvenientemente localizadas.) Atualmente eu uso o xmodmap:

keycode 110 = Prior
keycode 115 = Delete
keycode 112 = Next
keycode 117 = Insert
keycode 119 = End
keycode 118 = Home

Em vez disso, quero usar o XKB e atribuir nomes simbólicos diferentes para determinadas chaves físicas, em vez de atribuir diferentes keyyms a determinados códigos de teclas. ( Isto é por quê.) Eu quero que o keycode 110 envie PGUP em vez de HOME , keycode 115 para enviar DELE em vez de END , etc. O restante da configuração não deve ser afetado (portanto PGUP é continuar enviando o keysym Prior , etc., e todas as outras chaves permanecem como estão).

Como posso alterar a atribuição desses códigos de teclas específicos? Vou carregar um arquivo com xkbcomp somefile.xkb $DISPLAY , o que eu preciso colocar em somefile.xkb ?

    
por Gilles 04.03.2015 / 17:12

2 respostas

11

Crie um arquivo contendo suas alterações de código de tecla e salve-o como (por exemplo) ~/.xkb/keycodes/local . (O diretório keycodes é codificado; o diretório base pode ser outra coisa, e o nome do arquivo também.) Isso conterá no seu caso

xkb_keycodes {
  <PGUP> = 110;
  <PGDN> = 112;
  <DELE> = 115;
  <INS> = 117;
  <HOME> = 118;
  <END> = 119;
};

Para carregar isso, execute

setxkbmap -print | sed -e '/xkb_keycodes/s/"[[:space:]]/+local&/' | xkbcomp -I${HOME}/.xkb - $DISPLAY

Isso gera as configurações atuais, adiciona +local à instrução xkb_keycodes include e a carrega no compilador XKB, adicionando ~/.xkb ao caminho de inclusão. (Se você nomeou seu arquivo como algo diferente de ~/.xkb/keycodes/local , obviamente precisará alterar +local e -I${HOME}/.xkb} .) Dessa forma, todas as outras configurações serão preservadas.

    
por 04.03.2015 / 23:39
4

Você pode começar por setxkbmap -print > somefile.xkb para obter o mapa de teclado que você está usando como base e, em seguida, redefinir os nomes de chave que você deseja na seção xkb_keycodes desta forma:

xkb_keymap {
 xkb_keycodes {
  include "evdev+aliases(azerty)"
  // Custom <key name> = keycode
  <INS> = 117;
  <HOME> = 118;
  <PGUP> = 110;
  <DELE> = 115;
  <END> = 119;
  <PGDN> = 112;
 };
 xkb_types { include "complete"};
 xkb_compatibility { include "complete"};
 xkb_symbols { include "pc+fr+inet(evdev)"};
 xkb_geometry { include "pc(pc104)"};
};

Isso gera avisos de que alguns nomes de chaves são atribuídos várias vezes, mas funciona porque somente a última contagem é importante (por isso, é importante colocar as configurações personalizadas após a inclusão). E o arquivo tem a vantagem de ser legível.

Outra maneira é descarregar o mapa de teclado que você usa em um arquivo: xkbcomp $DISPLAY somefile.xkb e modificar as mesmas linhas (é o mesmo mapa de chaves com as inclusões avaliadas). Desta forma, não há avisos para várias definições, mas é menos legível.

    
por 04.03.2015 / 18:27