comment attribuer un autre modificateur à la touche Alt pour X11?

9

Objectif:

Je voudrais attribuer Alt à CapsLock-key et Meta à Alt-key. Mais de cette manière, Alt-key ne serait plus reconnu comme Alt et CapsLock-key ne serait plus reconnu comme CapsLock.

openSUSE 11.4

Précédemment:

openSUSE 11.1 - puisque je suis le seul utilisateur de mon ordinateur, j'ai "simplement" édité le fichier / usr / share / X11 / xkb / keycodes / xfree86 et cela a fonctionné sans problème. Les clés étaient câblées à leurs symboles au niveau le plus bas.

Problèmes:

  1. xkb

    J'ai créé une variante de la mise en page polonaise (pl_ext) qui (pour test) se compose de ces entrées:

    key <CAPS> { [ Alt_L ] };
    modifier_map Mod1 { Alt_L, Alt_R };
    

    Cependant, cela ne fait tout simplement rien, la touche CapsLock dans xev est reconnue (symbole) comme Alt_L, mais lorsque j'appuie sur la touche CapsLock, elle se comporte comme CapsLock (par exemple, en supposant que vous avez Fichier dans le menu, Alt + F devrait ouvrir ce menu, il ne le fait pas ).

    Question: Comment définir un fichier de disposition pour définir CapsLock-key comme Alt et Alt-key comme Meta?

    Edit: la moitié du succès ici! Maintenant, j'ai de telles entrées:

    key <CAPS> { [ Alt_L ] };
    modifier_map Mod1 { <CAPS> }; // this is a difference
    

    et cela fonctionne comme vous le souhaitez. Cela ne signifie pas:

    key <LALT> { [ Meta_L ] } ;
    key <RALT> { [ Meta_R ] } ;
    modifier_map Mod5 { <LALT>,<RALT> };
    

    Les touches Alt sont reconnues comme Meta par xev, mais je peux toujours ouvrir les menus avec Alt + F, changer de fenêtre, et je ne devrais pas. Et d'un autre côté, je ne peux entrer dans aucun caractère national, et je le devrais.

  2. xfree86

    Mais maintenant, cela ne fonctionne pas, je suppose que l'autre table de fichiers est lue au lieu de xfree86.

    Question: Comment savoir quel fichier de table de codes clés est utilisé par le système (X / Gnome)?

    Edit: La meilleure option pour moi - l'édition des tables de codes clés - a été résolue par la réponse de macias !

  3. xmodmap

    La moitié du succès ici. Cette partie fonctionne comme vous le souhaitez:

    supprimer Lock = Caps_Lock keysym Caps_Lock = Alt_L

    Maintenant, j'ai vraiment la touche CapsLock qui est mappée sur Alt. Mais ça:

    keysym Alt_L = Meta_L

    ... fait une chose étrange. xev montre que Alt-key est mappé sur Meta, mais lorsque j'appuie sur Alt + F (cela devrait être mappé sur Meta + F -> ne rien faire), le menu Fichier est ouvert. De plus, lorsque j'appuie sur Alt + Tab, je reçois un commutateur de fenêtre (je ne devrais pas - Alt est Meta maintenant).

    Question: Comment "supprimer" l'ancien comportement de la touche Alt?

    Edit: Cette partie est résolue par la réponse de Gilles .

Sommaire:

Répondre à n'importe quelle question résoudrait (espérons-le) mon problème, mais je préfère utiliser xkb entièrement car je pourrais alors emballer tous les fichiers pour xkb et changer la disposition en un seul endroit. Merci d'avance pour toute aide!

greenoldman
la source
Si vous avez trouvé une réponse, veuillez la publier comme telle et donner suffisamment d'informations aux autres personnes susceptibles d'être intéressées. (Il est tout à fait correct de répondre à votre propre question si vous avez trouvé la réponse ailleurs ou par vous-même; vous pouvez même marquer votre réponse comme acceptée si vous le souhaitez.)
Gilles 'SO- arrêtez d'être méchant'
@ Gilles, ok, mais je garde ta réponse comme réponse, juste pour éviter une éventuelle accusation je l'ai fait pour des points. De plus, votre aide m'a été très précieuse.
greenoldman
Vous n'obtenez de toute façon pas de points pour avoir accepté votre propre réponse. (Vous obtenez des points pour les votes sur votre propre réponse, ce qui est juste puisque vous avez fait le travail.) La chose la plus importante est d'avoir les informations clairement présentées. Il y a maintenant deux réponses à cette question, une avec xmodmap et une avec xkb, et la page serait plus claire si elles étaient toutes les deux publiées comme réponses.
Gilles 'SO- arrête d'être méchant'

Réponses:

7

(Cette réponse concerne uniquement xmodmap. Je suis sûr qu'il est possible de le faire avec XKB, je ne sais pas comment.)

Les modificateurs et les keyymes sont attribués indépendamment. Mais vous obtenez des effets étranges si vous ne les définissez pas de manière cohérente. Je pense que tout ce qui vous manque, c'est la addcommande à laquelle attribuer un modificateur Meta_L, mais vous devrez peut-être également effacer et réaffecter les touches de modification. Vous pouvez remplacer Mod1et Mod2par Mod3, Mod4et Mod5: ils sont interchangeables, assurez-vous simplement de ne pas en utiliser un à deux fins différentes.

clear Mod1
clear Mod2
remove Lock = Caps_Lock
keysym Caps_Lock = Alt_L
keysym Alt_L = Meta_L
add Mod1 = Alt_L Alt_R
add Mod2 = Meta_L Meta_R
Gilles 'SO- arrête d'être méchant'
la source
Grand merci. Donc en effet, j'ai utilisé Mod5 au lieu de Mod2 pour Meta, et je peux maintenant écrire comme prévu (j'utilise la touche meta + pour de nombreux caractères nationaux). Mais bizarrement, j'ai maintenant un problème avec CapsLock-key - il est lié à ... Meta. Je suppose pourquoi, car une fois qu'il y a une liaison avec Alt, mais Alt est redéfini. Alors, comment faire la différence et insister une fois sur le code, et une deuxième fois sur le symbole? Je voudrais ne pas utiliser de codes-clés bruts car ils pourraient changer d'un clavier à l'autre. Je ne peux pas échanger l'ordre des keysymes, car dans la dernière ligne, j'obtiendrais une erreur.
greenoldman
Le problème keysym Caps_Lock = Alt_Lest que si vous l'exécutez deux fois, cela remet le système dans un état indésirable. C'est pourquoi j'utilise des codes clés ; ils varient entre les systèmes d'exploitation et les architectures (pas entre les claviers), mais pas si souvent.
Gilles 'SO- arrête d'être méchant'
Merci pour l'explication, j'ai deviné juste à ce moment :-). Si cela ne vous dérange pas, je le garderai un peu plus longtemps en tant que question sans réponse, peut-être que quelqu'un pourrait résoudre mon problème au niveau xkb, ce qui serait plus flexible (changer de disposition tue xmodmaps).
greenoldman
Un grand merci, j'ai continué à me battre avec des symboles / pc sans succès.
Cody Craven
9

Modification de l'approche des codes clés

J'ai trouvé la réponse sur le forum polonais d'Ubuntu. Maintenant, on n'édite pas le fichier "xfree86" mais le fichier "evdev". De cette façon, vous pouvez apporter des modifications permanentes qui fonctionnent pour toutes les mises en page.

Exemple (sur demande de Gilles) - connectez-vous en tant que root, allez sur

/usr/share/X11/xkb/keycodes

effectuez une sauvegarde du fichier "evdev", puis modifiez-le. Modifiez les codes à votre guise, par exemple dans mon cas:

<LALT> = 66; // when I press CapsLock (66 code) system will report pressing LeftAlt
<LMTA> = 64; // I will get LeftMeta when pressing LeftAlt (64 code)

Vous pouvez trouver ce que les codes en exécutant la commande "xev", mais vous pouvez simplement regarder le fichier "evdev" d'origine.

Déconnectez-vous, connectez-vous, profitez de votre nouveau clavier :-).

greenoldman
la source
c'est probablement la bonne façon de procéder avec XKB. j'exécute Linux Mint et rencontre des problèmes où les Keyboard Preferencesoptions pour Capslockremplacer la XKBconfiguration personnalisée que j'écris. Comme il s'agit d'une sélection de bouton radio, je ne vois aucun moyen d'empêcher l'application d'une des règles de l'interface graphique.
dcunited001
Pouvez-vous préserver le comportement de LALT? Autrement dit, ne pas le changer en LMTA? J'ai essayé mais apparemment vous ne pouvez pas avoir deux affectations du formulaire <LALT> = ...
Daniel
avec cela, il était si facile d'activer LALT et RALT sur ubuntu ... merci beaucoup. pour tous les googleurs: mapper alt à une autre clé ubuntu alt à altgr ubuntu remapper alt à ctrl
Noel Schenk
4

essaye ça:

    key <CAPS>  { [ Alt_L, Alt_L ] };
    key <LALT> { [ Meta_L, Meta_L ] };
    modifier_map Mod1 { Alt_L, Alt_R };
    modifier_map Mod5 { Meta_L, Meta_R };

notez les définitions à deux niveaux. En effet, la valeur par défaut pour LALT est [Alt_L, Meta_L]; si vous ne redéfinissez pas le second, il restera Meta_L.

Regardez cette réponse sur xkb pour savoir comment redéfinir certaines clés sans avoir besoin de modifier les principaux fichiers par défaut (donc pas besoin d'être root). Dans ce cas, vous aurez besoin dans le fichier de symboles locaux d'une petite section comme:

partial modifier_keys
xkb_symbols "capsasalt_altasmeta" {
        replace key <CAPS>  { [ Alt_L, Alt_L ] };
        replace key <LALT> { [ Meta_L, Meta_L ] };
        modifier_map Mod1 { Alt_L, Alt_R };
        modifier_map Mod5 { Meta_L, Meta_R };
};
Pablo Saratxaga
la source