Reatribuir as teclas Ctrl e Alt - erro 'BadValue' do xmodmap

13

Estou tentando remapear meu teclado para tornar o emacs utilizável. Meu teclado ergonômico coloca sua única tecla Control em uma ilha isolada de 4 teclas, à esquerda.

O sistema operacional é o Debian squeeze.

Aqui estão as linhas nas quais estou tentando alimentar xmodmap, coloco-as em um arquivo ~ / .Xmodmap:

Controle claro
limpar Mod1
! As teclas Alt estão ativadas como 'Option' no meu teclado,
! usando o xev mostra para eles enviarem as chaves Alt_L e Alt_R respectivamente
keysym Alt_L = Control_L
keysym Alt_R = Control_R
! As teclas Super_L e Super_R são as teclas do Windows
keysym Super_L = Alt_L
Chaves_ Super_R = Alt_R
adicionar Control = Control_L Control_R
adicione Mod1 = Alt_L Alt_R

Meu objetivo é fazer com que minhas Altchaves Option (aka ) se comportem como teclas de controle e fazer com que minhas chaves do Windows (aka Super) se comportem como Alt.

Aqui estão os códigos de chaves e osmsms produzidos pelo xev para as chaves em questão. Observe que meu teclado (um teclado ergonômico Goldtouch) possui apenas uma tecla de controle.

keycode 37 (keysym 0xffe3, Control_L)
código-chave 64 (keysym 0xffe9, Alt_L)
código de chave 133 (keysym 0xffeb, Super_L)
keycode 134 (keysym 0xffec, Super_R)
código de chave 108 (keysym 0xffea, Alt_R)

Aqui está o que o xev exibe durante a execução xmodmap .Xmodmap

Evento MappingNotify, série 34, NO sintético, janela 0x0,
    solicitação MappingKeyboard, first_keycode 204, contagem 1

Evento MappingNotify, série 34, NO sintético, janela 0x0,
    solicitação MappingKeyboard, first_keycode 64, contagem 1

Evento MappingNotify, série 34, NO sintético, janela 0x0,
    solicitação MappingKeyboard, first_keycode 108, contagem 1

Evento MappingNotify, série 34, NO sintético, janela 0x0,
    solicitação MappingKeyboard, first_keycode 206, contagem 1

Evento MappingNotify, série 34, NO sintético, janela 0x0,
    solicitação MappingKeyboard, first_keycode 133, contagem 1

Evento MappingNotify, série 34, NO sintético, janela 0x0,
    solicitação MappingKeyboard, first_keycode 134, contagem 1

E aqui está o erro retornado por xmodmap:

X Erro de solicitação com falha: BadValue (parâmetro inteiro fora do intervalo para operação)
Opcode principal da solicitação com falha: 118 (X_SetModifierMapping)
Valor na solicitação com falha: 0x17
Número de série da solicitação com falha: 17
Número de série atual no fluxo de saída: 17

alguma sugestão sobre como resolver isso?

Aliud Alius
fonte
Em qual sistema operacional e versão? Que tipo amplo de teclado (PC / Mac / Sun / ...)? Tente executar xevem um terminal e depois xmodmapem outro terminal. Você deve ver algumas MappingNotifyestrofes de xev, adicione-as à sua pergunta. Além disso, na xevjanela, pressione as várias teclas envolvidas e diga-nos a que código de chave e código de chave eles correspondem (a parte “código de chave 37 (código de chave 0xffe3, Control_L)” da saída xev).
Gilles 'SO- stop be evil'

Respostas:

7

Observando a solução alternativa vinculada por Giles, foi isso que funcionou para mim:

clear Mod1
clear Mod4

keycode 204 = NoSymbol NoSymbol NoSymbol NoSymbol
keycode 206 = NoSymbol NoSymbol NoSymbol NoSymbol

keycode 64 = Control_L Control_L Control_L Control_L
keycode 133 = Alt_L Alt_L Alt_L Alt_L
keycode 134 = Alt_R Alt_R Alt_R Alt_R
keycode 108 = Control_R Control_R Control_R Control_R

add Control = Control_L Control_R
add Mod1 = Alt_L Alt_R

As teclas Minhas opções agora funcionam como teclas de controle e as teclas Windows como teclas Alt.

Aliud Alius
fonte
3

O problema surge quando você tenta adicionar um chave de acesso a um modificador que já foi adicionado a outra chave modificadora. É vital saber que, se você adicionar um keyym a um modificador, todas as outras academias que acompanham o keyym no caso serão adicionadas também a esse modificador.

Por exemplo:

clear mod5
add mod5    = ISO_Level3_Shift Mode_switch

pode resultar em

mod5        backslash (0x33),  Caps_Lock (0x42),  ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

porque você tem algo como

keycode  66 = Caps_Lock NoSymbol ISO_Level3_Shift

no seu ~ / .Xmodmap (visualize o código-chave atual para o mapeamento de código-chave via xmodmap -pke)

que produzirá o erro BadValue em questão quando você também tentar fazer algo como

add lock    = Caps_Lock

porque Caps_Lock já foi adicionado ao mod5 mod5.

Fluxo
fonte
2

Essa é outra solução para o seu problema, embora não responda realmente à sua pergunta. Edite o xorg.conf, inserindo o seguinte na seção "InputDevice":

 Option "XkbOptions" "ctrl:swapcaps"
dotplus
fonte