Verrouillage des majuscules comme touche de modification pour les mappages de touches d'application

11

Je suis développeur et j'utilise actuellement Ubuntu Linux avec PyCharm IDE pour le développement de site Web. Afin d'améliorer les performances de frappe, je considère changer CapsLock en Hyper_L et l'affecter à mod3 en utilisant xmodmap. Après cela, je veux mapper mod3 pour la touche «i» à «Up». Jusqu'à présent, ce que j'ai fait est:

xmodmap -e "keysym Caps_Lock = Hyper_L"

la sortie est comme ceci:

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Hyper_L (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

puis je supprime Hyper_L du mod4

xmodmap -e "remove Mod4 = Hyper_L"

Ensuite, j'ai essayé d'assigner Hyper_L au mod3

xmodmap -e "add Mod3 = Hyper_L"

Cependant, j'ai eu une erreur comme suit:

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

Alors, quel était le problème ici? Comment puis-je le faire fonctionner? Mon approche est-elle correcte? Ou devrais-je utiliser une approche différente afin d'utiliser le mod3 pour les clés personnalisées?

PS J'utilise le clavier Microsoft Natural Ergonomic 7000

Khamidulla
la source

Réponses:

20

Il y a un milliard de réponses sur Internet, la plupart déroutantes.

La clé est que vous devez mapper 'keycode 66' à votre hyper clé, supprimer le mappage de cette clé à partir d'autres mod {1,2,4,5} (uniquement s'il est présent), puis définir mod3.

Ouvrez ~ / .Xmodmap et mettez ce qui suit:

! Unmap capslock
clear Lock
keycode 66 = Hyper_L

! Leave mod4 as windows key _only_
remove mod4 = Hyper_L

! Set mod3 to capslock
add mod3 = Hyper_L

Lance ça

xmodmap ~/.Xmodmap

En cas de problème, vous pouvez réinitialiser votre clavier avec:

setxkbmap -layout us

Les causes probables d'une explosion sont que Hyper_L est mappé ailleurs. Corrigez cela en exécutant xmodmap sans arguments pour déterminer ce qui est lié à Hyper_L. Lorsque vous savez ce que vous devez supprimer, ajoutez un 'remove BINDING = Hyper_L' dans votre fichier .Xmodmap.

Le fichier .Xmodmap sera chargé lorsque vous ouvrirez des sessions X11, vous devriez avoir ce mappage en place la prochaine fois que vous vous connectez ou redémarrez.

Cette configuration fonctionne pour ma configuration ubuntu 14.04. Si vous avez un * nix différent et que cela ne fonctionne pas, veuillez poster ce que vous avez fait pour le contourner ici et je l'intégrerai dans la réponse.

heymatthew
la source
@antindexer a-t-il fonctionné pour vous?
heymatthew
J'ai essayé pas mal de réponses, et c'est celle qui a fonctionné pour moi. Au moins, il l'a fait sur une installation linux nue. Curieusement, il échoue dans QEMU / KVM, ne fonctionnant que sur des pressions alternatives sur la touche de verrouillage des majuscules.
Diagon
0

Je sais que cette question est assez ancienne, mais je dois partager ma solution, car (frustrant) la réponse de heymantthew n'a pas fonctionné pour moi. Ce qui a fini par fonctionner pour moi:

setxkbmap -layout us -option lv3:caps_switch -variant intl

Cela activera le verrouillage des majuscules comme clé mod3, définira la mise en page sur "us" et définira la variante sur "intl". Si vous utilisez un shell interactif comme le poisson, vous pouvez appuyer sur tab après "-layout", "-option" ou "-variant" pour obtenir une liste complète des paramètres possibles.

Contexte supplémentaire: J'ai essayé l'approche xmodmap il y a un an sur une machine Ubuntu exécutant le gestionnaire de fenêtres i3, en passant de l'environnement gnome standard. J'avais modifié la disposition du clavier "us" xkb, en particulier l'international avec des touches mortes - cela fonctionnait bien lors de l'utilisation de gnome-desktop-manager (il y a une option pour définir le verrouillage des majuscules comme clé mod3), mais je ne pouvais pas le faire fonctionner avec xmodmap. C'était mon erreur: je pensais que l'interface graphique gdm utilisait xmodmap pour mapper le verrouillage des majuscules au mod3, mais en réalité, il définissait cette option X11. Maintenant que je suis passé à Arch, j'ai été obligé de le découvrir.

Je recommande à tous ceux qui envisagent de jouer avec cela de lire les pages de manuel sur localectl, xmodmap, setxkbmap et de tester les dispositions en ajoutant une partie veille et retour:

setxkbmap ... ; sleep 10; setxkbmap <INSERT DEFAULT SETTINGS>

cela m'a fait gagner beaucoup de temps.

Cependant, je ne comprends toujours pas comment l'approche xmodmap ne fonctionne pas. J'espère que cela aide quelqu'un.

Mark IO
la source