Reatribuir teclas Ctrl e Alt - erro xmodmap 'BadValue'

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 que estou tentando alimentar para xmodmap , eu as coloco em um arquivo ~ / .Xmodmap:

clear Control
clear Mod1
! The Alt keys are labled 'Option' on my keyboard, 
! using xev shows them to send Alt_L and Alt_R keysym's respectively 
keysym Alt_L = Control_L
keysym Alt_R = Control_R
! The Super_L and Super_R keys are the Windows keys
keysym Super_L = Alt_L
keysym Super_R = Alt_R
add Control = Control_L Control_R
add Mod1 = Alt_L Alt_R

Meu objetivo é fazer com que minhas teclas Option (também conhecidas como Alt ) se comportem como teclas Control, e fazer com que minhas chaves do Windows (Super) se comportem como Alt . / p>

Aqui estão os keycodes e keysms produzidos por xev para as chaves em questão. Observe que meu teclado (um teclado ergonômico Goldtouch) tem apenas uma tecla de controle.

keycode 37 (keysym 0xffe3, Control_L)
keycode 64 (keysym 0xffe9, Alt_L)
keycode 133 (keysym 0xffeb, Super_L)
keycode 134 (keysym 0xffec, Super_R)
keycode 108 (keysym 0xffea, Alt_R)

Aqui está o que o xev exibe ao executar xmodmap .Xmodmap

MappingNotify event, serial 34, synthetic NO, window 0x0,
    request MappingKeyboard, first_keycode 204, count 1

MappingNotify event, serial 34, synthetic NO, window 0x0,
    request MappingKeyboard, first_keycode 64, count 1

MappingNotify event, serial 34, synthetic NO, window 0x0,
    request MappingKeyboard, first_keycode 108, count 1

MappingNotify event, serial 34, synthetic NO, window 0x0,
    request MappingKeyboard, first_keycode 206, count 1

MappingNotify event, serial 34, synthetic NO, window 0x0,
    request MappingKeyboard, first_keycode 133, count 1

MappingNotify event, serial 34, synthetic NO, window 0x0,
    request MappingKeyboard, first_keycode 134, count 1

E aqui está o erro retornado por xmodmap :

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:  17
Current serial number in output stream:  17

alguma sugestão sobre como posso resolver isso?

    
por Aliud Alius 02.12.2010 / 05:34

4 respostas

5

Isso já foi reportado como erro no Debian # 564327 , Debian bug # 565279 , bug do Ubuntu # 524774 e erro do FreeDesktop 20145 . Há um patch de origem anexado à discussão de bug do FreeDesktop. Existem várias propostas alternativas na discussão de bugs do Ubuntu, em particular a .Xmodmap de solução alternativa .

    
por 03.12.2010 / 22:58
7

Olhando para a solução alternativa vinculada ao Giles, isso é o 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 minhas teclas Option funcionam agora como as teclas Control e as minhas teclas do Windows, como as teclas Alt.

    
por 03.12.2010 / 23:53
3

O problema surge quando você tenta adicionar um keysym a um modificador que já está adicionado a outra tecla modificadora. É vital saber que, se você adicionar um keysym a um modificador, todos os outros keyyms que acompanham o keysym no caso são adicionados 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 parecido

keycode  66 = Caps_Lock NoSymbol ISO_Level3_Shift

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

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

add lock    = Caps_Lock

porque o Caps_Lock já está adicionado ao modificador mod5.

    
por 20.05.2011 / 18:10
1

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

 Option "XkbOptions" "ctrl:swapcaps"
    
por 02.12.2010 / 15:18