Réaffecter les touches Ctrl et Alt - erreur xmodmap 'BadValue'

13

J'essaie de remapper mon clavier afin de rendre emacs utilisable. Mon clavier ergonomique place sa seule touche de commande dans un îlot isolé à 4 touches vers la gauche.

L'OS est Debian squeeze.

Voici les lignes que j'essaye d'alimenter xmodmap, je les place dans un fichier ~ / .Xmodmap:

contrôle clair
effacer Mod1
! Les touches Alt sont étiquetées «Option» sur mon clavier,
! l'utilisation de xev leur montre d'envoyer respectivement Alt_L et Alt_R keysym
keysym Alt_L = Control_L
keysym Alt_R = Control_R
! Les clés Super_L et Super_R sont les clés Windows
keysym Super_L = Alt_L
keysym Super_R = Alt_R
ajouter Control = Control_L Control_R
ajouter Mod1 = Alt_L Alt_R

Mon objectif est de faire en sorte que mes Alttouches Option (aka ) se comportent comme des touches de contrôle et d'obtenir que mes touches Windows (aka Super) se comportent comme Alt.

Voici les keycodes et keysms édités par xev pour les clés en question. Remarque, mon clavier (un clavier ergonomique Goldtouch) n'a qu'une seule touche de contrôle.

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)

Voici ce que xev affiche lors de l'exécution xmodmap .Xmodmap

Événement MappingNotify, série 34, NO synthétique, fenêtre 0x0,
    demande MappingKeyboard, first_keycode 204, compte 1

Événement MappingNotify, série 34, NO synthétique, fenêtre 0x0,
    demande MappingKeyboard, first_keycode 64, compte 1

Événement MappingNotify, série 34, NO synthétique, fenêtre 0x0,
    demande MappingKeyboard, first_keycode 108, compte 1

Événement MappingNotify, série 34, NO synthétique, fenêtre 0x0,
    demande MappingKeyboard, first_keycode 206, compte 1

Événement MappingNotify, série 34, NO synthétique, fenêtre 0x0,
    demande MappingKeyboard, first_keycode 133, compte 1

Événement MappingNotify, série 34, NO synthétique, fenêtre 0x0,
    demande MappingKeyboard, first_keycode 134, compte 1

Et voici l'erreur renvoyée par xmodmap:

X Erreur d'échec de la demande: BadValue (paramètre entier hors plage pour le fonctionnement)
Opcode principal de la demande ayant échoué: 118 (X_SetModifierMapping)
Valeur dans la demande ayant échoué: 0x17
Numéro de série de la demande ayant échoué: 17
Numéro de série actuel dans le flux de sortie: 17

des suggestions sur la façon de résoudre ce problème?

Aliud Alius
la source
Sur quel système d'exploitation et quelle version? Quel large type de clavier (PC / Mac / Sun / ...)? Essayez de lancer xevdans un terminal, puis xmodmapdans un autre terminal. Vous devriez voir quelques MappingNotifystrophes de xev, ajoutez-les à votre question. Aussi, dans la xevfenêtre, appuyez sur les différentes touches impliquées et dites-nous à quel keycode et keysym ils correspondent (la partie «keycode 37 (keysym 0xffe3, Control_L)» de la sortie xev).
Gilles 'SO- arrête d'être méchant'

Réponses:

7

En regardant la solution de contournement liée par Giles, voici ce qui a fonctionné pour moi:

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

Mes touches Option fonctionnent désormais comme les touches Contrôle et mes touches Windows comme les touches Alt.

Aliud Alius
la source
3

Le problème survient lorsque vous essayez d'ajouter un symbole de clé à un modificateur qui est déjà ajouté à une autre touche de modification. Il est essentiel de savoir que si vous ajoutez un keysym à un modificateur, tous les autres keysymes qui accompagnent le keysym au cas où sont ajoutés également à ce modificateur.

Par exemple:

clear mod5
add mod5    = ISO_Level3_Shift Mode_switch

peut entraîner

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

parce que vous avez quelque chose comme

keycode  66 = Caps_Lock NoSymbol ISO_Level3_Shift

dans votre ~ / .Xmodmap (Affichez le code clé actuel pour le mappage de keysym via xmodmap -pke )

qui produira l'erreur BadValue en question lorsque vous essayez également de faire quelque chose comme

add lock    = Caps_Lock

car Caps_Lock est déjà ajouté au modificateur mod5.

Couler
la source
2

Ceci est une autre solution à votre problème bien qu'elle ne réponde pas vraiment à votre question. Modifiez xorg.conf, en insérant ce qui suit dans la section "InputDevice":

 Option "XkbOptions" "ctrl:swapcaps"
dotplus
la source