Pourquoi mes liaisons xmodmap impliquant AltGr ne fonctionnent que sur certaines clés?


12

Je veux remapper mon AltGR + Right_Windows mais je ne sais pas comment. Peu importe ce que j'essaie, appuyer sur la touche droite de la fenêtre émet le nom de keysym lorsque la touche droite est enfoncée ou non.

Voici le contenu du fichier xmodmap que je teste actuellement. Dans mon clavier, 38 est le code clé pour "a", 48 est le code clé pour un portrophe / doublequote et 134 est le code clé pour la touche Windows droite.

keycode  38 = 1 2 3 4 5 6 7 8
keycode  48 = 1 2 3 4 5 6 7 8
keycode 134 = 1 2 3 4 5 6 7 8

Lorsque j'appuie sur Right_Alt + apostrophe, il produit 5 mais Right_Alt + a et Right_Alt + Right_Windows donnent 1 (à la fois lorsque l'alt droite est enfoncée et quand ce n'est pas le cas), ce qui n'est pas ce que je voulais.

Ma disposition actuelle du clavier est us(alt-intl)et l'alt droit est apparemment configuré pour agir comme AltGr / Iso_Level3_Shift. La sortie de xmodmap -pmest la suivante:

xmodmap:  up to 4 keys per modifier, (keycodes in parentheses):

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x42)
control     Control_L (0x25),  Control_R (0x69)
mod1        Alt_L (0x40),  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)

Je ne sais pas exactement ce qui se passe, mais si vous ne l'avez pas déjà fait, vous voudrez peut-être exécuter xevet appuyer sur les différentes combinaisons de touches pour voir si le matériel et jusqu'au niveau Xwindows obtient des touches distinctes pour commencer.
Joe

Je rencontre le même problème. Je voulais modifier la virgule et le point pour prendre également en charge l'impression des guillemets tchèques et anglais („/“ / ”) que je dois écrire à l'aide de la touche de composition dans le cas contraire. J'utilise la us(cz_sk_de)disposition du clavier et xmodmap.
Pavel Šimerda

Et maintenant? Il n'est pas pratique de gaspiller une autre prime ni de commencer une nouvelle question lorsque celle-ci décrit assez bien le problème. Cela ressemble à un bug dans xorg mais je n'ai trouvé aucune référence. La réponse actuelle est manifestement erronée malgré son octroi automatique.
Pavel Šimerda

J'ai fini par abandonner et utiliser différents raccourcis clavier que je connais: / Je conviens que cela ressemble à un bug, mais je ne sais pas à quel système il est lié et où le signaler ...
hugomg

Réponses:


7

Utilisation de xmodmap pour configurer des mappages de clés individuels

Il est temps de noter les résultats de mes propres recherches.

J'ai pensé que j'avais dû manquer quelque chose dans xmodmap et que ce n'était pas très bien documenté et que les gens étaient confus. Mais il s'est avéré que la conception de X.Org concernant XKB et xmodmap est tout simplement stupide.

Échec épique: xmodmap

Vous pouvez utiliser xmodmap pour redéfinir les mappages existants tant que ces mappages existent réellement dans votre disposition de clavier d'origine. Dans le cas décrit dans la question, vous ne pouvez pas étendre le comportement des touches pour utiliser AltGr. Vous pouvez uniquement modifier les noms de clés AltGr pour les codes clés qui utilisent déjà AltGr.

Voir aussi: http://blog.azundris.com/archives/193-X-treme-pain-XKB-vs-XModMap.html

Solution: Mode_switch

Cette solution de contournement est décrite dans la réponse de @ Ned64. Vous pouvez remapper AltGrde ISO_Level3_Shiftà Mode_switch.

J'ai utilisé avec succès la ligne de commande suivante pour remapper AltGr.

xmodmap -e 'keycode 108 = Mode_switch'

L'inconvénient est qu'il va casser votre disposition de clavier actuelle mais vous pouvez recréer tous les mappages un par un en utilisant xmodmapcomme @ Ned64 déjà mentionné.

Solution: disposition du clavier modifiée

J'utilise us(cz_sk_de)ma disposition de clavier et j'ai essayé de la modifier en ajoutant la configuration des touches que je voulais étendre.

key <AB08>  { [ comma, less, doublelowquotemark, leftdoublequotemark ] };
key <AB09>  { [ period, greater, ellipsis, rightdoublequotemark ] };

(Dans la section xkb_symbols "cz_sk_de"de /usr/share/X11/xkb/symbols/us)

Réinitialisez simplement la disposition du clavier pour utiliser la version modifiée.

setxkbmap 'us(cz_sk_de)'

Maintenant , vous pouvez (1) de type tchèque et entre guillemets anglais et ellipses en utilisant des combinaisons de ,, ., Shiftet les AltGrclés et / ou (2) remapper les clés à l' aide xmodmapmaintenant qu'ils sont définis.

Le principal inconvénient est qu'il setxkbmapne semble pas prendre en charge des emplacements arbitraires pour les dispositions de clavier et que vous devez donc écrire dans la configuration système au lieu de votre répertoire personnel.

Conclusion

Cela semble être un exemple de conception trop ingénieuse et mauvaise de X.Org où même une chose aussi triviale que le mappage d'un code clé et une combinaison de modificateurs en un symbole s'avère être un problème. Les outils ne semblent pas fournir un moyen raisonnable de simplement modifier les mappages de touches individuelles dans la configuration utilisateur sans aucun effet secondaire.


"vous ne pouvez pas étendre le comportement des touches pour utiliser AltGr" - on dirait que c'était le problème depuis le début! Merci.
hugomg

5

Première étape: rendre AltGr utilisable

J'ai découvert que les clés modifiées par AltGr ne fonctionnent sur mon système que si je remappe également la clé AltGr Mode_switch, comme ceci:

xmodmap -e "keycode 108 = Mode_switch Mode_switch Mode_switch Mode_switch"

Si vous avez un clavier différent, vous devrez peut-être remplacer le 108par votre code, vérifiez en tapant

xmodmap -pke | grep Alt_R

puis utilisez ce numéro. (La clé est normalement appelée Alt_Rsur les systèmes que je connais.)

Alternativement, cela peut également fonctionner si Alt_R n'est pas encore affecté à autre chose:

xmodmap -e "keysym Alt_R = Mode_switch Mode_switch Mode_switch Mode_switch"

Votre modificateur AltGr servira désormais la position 3 (avec Maj: 4) dans votre liste de modificateurs.

Étape deux: attribuer des clés selon les besoins

Vous pouvez attribuer des variantes AltGr pour n'importe quelle touche de votre clavier que vous souhaitez. Si vous avez maintenant d'autres clés qui ne correspondent pas au code souhaité, vous devez les réaffecter tout comme vos autres clés (celles que vous avez testées).

Troisième étape: convertir ceci en script

Maintenant, prenez simplement vos xmodmapcommandes et écrivez toutes les modifications (mais seulement) de votre clavier par défaut dans un fichier - ce qui est plus rapide que de charger un clavier complet. Démarrez ce script une fois après chaque connexion et chaque fois que le clavier est réinitialisé par un processus.

J'ai beaucoup expérimenté cela au fil des ans, sous Solaris, IRIX et Linux, et à ma connaissance, c'est la seule solution pour faire fonctionner AltGr - et cela a bien fonctionné pour moi pendant plus de 20 ans.


1
Avec cela, la touche droite de la fenêtre a commencé à agir comme "3" au lieu de "1". Cependant, maintenant tous les modificateurs altgr existants ont cessé de fonctionner (je suppose que cela aurait dû être un "5" au lieu d'un "3" pour qu'ils fonctionnent?)
hugomg

Merci d'avoir essayé. Veuillez poster xmodmap -pmet xmodmap -pke | grep -w SOMECHANGEDKEYdans cette situation, pour une clé qui ne fonctionne plus.
Ned64

(alors nous devrons ajouter le nouveau modificateur en xmodmapfonction de votre sortie)
Ned64

xmodmap -pke | grep Alt_Rne renvoie aucun résultat sur mon système. Mon système est Lenovo ThinkPad X230 avec Gentoo stable. J'ai également essayé grep -ien vain.
Pavel Šimerda

Je l'ai essayé et le problème est que les lettres accentuées ne us(cz_sk_de)fonctionnaient plus pour moi. Par conséquent, cette réponse ne fonctionne pas pour moi et ne fonctionnera pas pour beaucoup d'autres.
Pavel Šimerda

1

Apparemment, xmodmap ne lit pas l'AltGR par défaut comme il se doit, il peut être limité à des dispositions de clavier spécifiques, peut-être que ce sont toutes des dispositions non américaines, de toute façon, le vrai problème est que vous pouvez remplacer votre disposition de clavier, certaines personnes pourraient pas vraiment envie de le faire car ils doivent utiliser des caractères spéciaux sur la disposition à laquelle ils sont habitués (comme les dispositions de clavier scandinaves qui ont des caractères comme ðþæöáúíóåů et ainsi de suite) ce serait difficile de configurer pour d'autres dispositions de clavier.

Tu peux courir

xmodmap -e "keycode 108 = Mode_switch"

Pour lier à nouveau AltGR à quelque chose que xmodmap peut fonctionner, et en effet, la 3ème affectation d'un keycoad sera sortie lorsque vous appuyez sur AltGR maintenant, mais cela rompra complètement la disposition du clavier d'origine car aucune liaison de touches AltGR ne fonctionnera plus avec la touche AltGR.

J'ai trouvé deux solutions de contournement qui ne cassent pas ma disposition de clavier existante et n'impliquent pas de changer de disposition , l'une consiste à lier Mode_switch à une autre touche.

La clé idéale pour cela est Super_R qui est juste à côté d'AltGR, le code de clé est 134. Cependant, tous les claviers ne les ont pas et dans mon cas sur un ordinateur portable, je ne les ai pas non plus, j'ai donc décidé de les lier au dernier clé restante que je n'utilise pratiquement jamais, Right Control.

xmodmap -e "keycode 105 = Mode_switch"

J'ai une disposition de clavier physique américaine, mais la configuration de disposition européenne et la touche moins / plus / bar (également connue sous le nom ISO_Backslash, bien que cela ne soit pas reconnu par xmodmap lui-même) généralement à côté de Z sur ces claviers sont manquantes. Je l'ai lié à Menu (135) mais cela pourrait servir d'alternative à R_Ctrl et Super_R

C'est une mauvaise solution, je suppose.

La deuxième solution de contournement a pris un peu plus de temps à comprendre. Utilisation de sxhkd (alternative à xbindkeys)

Si vous ajoutez ceci à ~ / .config / sxhkd / sxhkdrc :

~ISO_Level3_Shift
    xdotool key Mode_switch

Votre AltGR fonctionnera normalement, mais lorsqu'il est enfoncé, Mode_switch est basculé (un peu comme le verrouillage des majuscules, mais pour Mode_switch) et toutes les touches xmodmap qui l'utilisent seront verrouillées en mode AltGR jusqu'à ce que vous appuyiez à nouveau sur AltGR pour le désactiver. Cela devrait être simple de faire un script pour le désenclencher automatiquement lorsque la clé est relâchée, mais mes tentatives pour le faire étaient assez boguées, pour dire le moins.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.