Diagnostic des erreurs xmodmap

xmodmap cette erreur en essayant d'utiliser xmodmap pour se débarrasser du locking des majuscules:

 $ xmodmap -e 'clear Lock' 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: 8 Current serial number in output stream: 8 

Je cours xfce. Ce problème ne s'est pas produit avant d'append l'applet Keyboard Layouts à un panneau; avant de faire cela, j'ai pu exécuter mon script xmodmap pour échanger Esc et CapsLock:

 !Remap Caps_Lock as Escape remove Lock = Caps_Lock keysym Caps_Lock = Escape 

Il est peut-être pertinent de choisir alt-capslock comme combinaison de touches du keyboard dans les preferences Keyboard Layouts.

J'ai eu un problème similaire avant, sur une machine différente, en cours d'exécution openbox. Sur cette machine, ce problème a commencé lorsque j'ai mis à jour vers Lucid. J'ai signalé un bug dans xorg. Cependant, on ne sait toujours pas si c'est vraiment un problème avec xorg, ou si je fais juste quelque chose de mal avec ma configuration.

Est-ce que d'autres personnes ont connu ce problème? Quelqu'un peut-il faire la lumière sur ce qui se passe ici? Il semble qu'il y ait un certain nombre de couches impliquées, et je ne les comprends pas particulièrement bien, donc toute information serait utile.

mettre à jour

J'ai découvert que le problème est spécifiquement déclenché par l'ajout de la variante de layout Canada «Multilingue» (ca-multix). Si j'ajoute plutôt la variante "Multilingue (première partie)" (ca-multi), le problème ne se produit pas. Je pense que cela finira probablement par être une solution de rechange utilisable, mais je ne sais pas encore quelle est la différence entre ces variantes.

J'ai déposé un problème freedesktop , et je commente sur un problème Ubuntu connexe.

Xorg moderne utilise l'extension XKB pour la prise en charge des dispositions de keyboard. Xmodmap est émulé à travers une couche de compatibilité, mais il a des bizarreries. Vous pouvez désactiver entièrement XKB et Xorg va revenir à l'utilisation des anciens mappages de keyboard Xmodmap. Je pense que c'est en définissant l'option XkbDisable sur true dans xorg.conf, mais vous voulez probablement faire la méthode XKB. Il existe de nombreuses options configurables dans /usr/share/X11/xkb/rules/xorg.xml et je pense que vous voulez des majuscules: swapescape qui permute les majuscules et les écluses. Essayez setxkbmap -option caps: swapescape

Le problème se pose lorsque vous essayez d'append un keysym à un modificateur qui est déjà ajouté à une autre key de modification. Il est essentiel de savoir que si vous ajoutez un keysym à un modificateur, tous les autres keysyms qui accompagnent le keysym au cas où sont ajoutés aussi à 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 (ou .xmodmap, … Vous pouvez voir le keycode en cours pour le mappage 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 mod5 mod5.

 setxkbmap -option caps:escape # use caps as esc 

ou

 setxkbmap -option caps:swapescape # to swap caps with esc