Jump to content
From ArchWiki

État de la traduction: Cet article est la version francophone de Xmodmap. Date de la dernière traduction: 2022-10-03. Vous pouvez aider à synchroniser la traduction s'il y a eu des changements dans la version anglaise.

Related articles

- Xorg (Français)
- Xorg (Français)/Keyboard configuration (Français)
- Keyboard input
- Linux console (Français)/Keyboard configuration (Français)#Création d'une keymap personnalisé
- Xbindkeys (Français)

xmodmap est un utilitaire permettant de modifier les mappages des touches et des boutons du pointeur dans Xorg.

xmodmap n'est pas directement lié à X keyboard extension. (XKB), car il utilise des idées différentes (pré-XKB) sur la façon dont les keycodes sont traités dans X. En général, il n'est recommandé que pour les tâches les plus simples. Consultez X keyboard extension pour une configuration avancée de la disposition.

Note:

- Les paramètres xmodmap sont réinitialisés par setxkbmap, qui non seulement modifie les touches alphanumériques aux valeurs données dans la carte, mais réinitialise également toutes les autres touches aux valeurs par défaut du démarrage (consultez LQWiki:Configuring keyboards).
- En raison d'une limitation d'Xorg, les paramètres xmodmap ne sont pas appliqués automatiquement aux périphériques branchés à chaud. Si un clavier est ajouté à un système après qu'une table personnalisée ait été appliquée, la table personnalisée devra être appliquée à nouveau. [1]

## Introduction

Il existe deux types de valeurs de clavier dans Xorg : les keycodes et les keysyms.

keycode
  Le keycode est la représentation numérique reçue par le noyau lorsqu'une touche ou un bouton de souris est pressé.
keysym
  Le keysym est la valeur assignée au keycode. Par exemple, appuyer sur `a` génère le `keycode 38`, qui est mis en correspondance avec le `keysym 0×61`, qui correspond à `a` dans la table ASCII.
  Les keysyms sont gérés par Xorg dans une table de keycodes définissant les relations keycode-keysym, qui est appelée le tableau des touches de clavier (keymap table en anglais). Ceci peut être montré en exécutant `xmodmap`.

## Installation

xmodmap peut être installé par le paquet xorg-xmodmap.

En option, installez xkeycaps, qui est une interface graphique pour xmodmap.

## Tableau des touches de clavier

Imprimer le tableau des touches de clavier actuel formaté en expressions :

    $ xmodmap -pke

    [...]
    keycode 57 = n N
    [...]

Chaque keycode est suivi de la keysym à laquelle il est associé. L'exemple ci-dessus indique que le keycode `57` est associé à la minuscule `n`, tandis que la majuscule `N` est associée au keycode `57` plus `Shift`.

Chaque colonne keysym du tableau correspond à une combinaison particulière de touches de modification :

1. `Key`
2. `Shift+Key`
3. `Mode_switch+Key`
4. `Mode_switch+Shift+Key`
5. `ISO_Level3_Shift+Key`
6. `ISO_Level3_Shift+Shift+Key`

Il n'est pas nécessaire de définir tous les keysyms, mais pour n'attribuer qu'un dernier keysym, utilisez la valeur `NoSymbol`.

Pour consulter le keycode correspondant à une touche, consultez Keyboard input#Identifying keycodes in Xorg pour plus de détails sur l'utilitaire xev qui affichera les informations relatives au keycode/keysym d'une touche lorsque vous appuyez dessus.

Astuce: Il existe des keysyms descriptifs prédéfinis pour les touches multimédia, par exemple `XF86AudioMute` ou `XF86Mail`. Ces keysyms se trouvent dans `/usr/include/X11/XF86keysym.h`. De nombreux programmes multimédias sont conçus pour fonctionner avec ces keysyms prêts à l'emploi, sans qu'il soit nécessaire de configurer une application tierce.

Notez que xmodmap est influencé par les paramètres xkbd, ainsi les huit keysym sont disponibles pour la disposition xkbd US(intl) mais pas pour la disposition US par défaut (il manque le symbole ralt_switch défini dans level3). Pour avoir les 8 keysyms disponibles, vous devez configurer la variante (intl) du clavier. En utilisant la disposition US comme exemple, `$ setxkbmap -layout 'us(intl)'` avant d'appeler xmodmap pour tester vos changements dans la session X actuelle. Pour effectuer ce changement de manière permanente, modifiez la configuration xorg ou votre fichier .xprofile ou .xinitrc. Consultez Xorg (Français)/Keyboard configuration (Français)#Configurer la disposition du clavier pour une explication complète.

## Table personnalisée

Pour créer une «keymap» (i.e. `~/.Xmodmap`) :

    $ xmodmap -pke > ~/.Xmodmap

Pour tester les changements :

    $ xmodmap ~/.Xmodmap

### Activation de la table personnalisée

Avec GDM, XDM ou LightDM, il n'est pas nécessaire de créer la source `~/.Xmodmap`. Pour startx, utilisez :

    ~/.xinitrc

    [[ -f ~/.Xmodmap ]] && xmodmap ~/.Xmodmap

Alternativement, éditez le script de démarrage global `/etc/X11/xinit/xinitrc`.

### Tester les modifications

Pour effectuer des changements temporaires :

    $ xmodmap -e "keycode 46 = l L l L lstroke Lstroke lstroke"
    $ xmodmap -e "keysym a = e E"

## Touches de modification

xmodmap peut également être utilisé pour remplacer les touches de combinaison, par exemple pour permuter `Control` et `Super` (la «touche Windows»).

Imprimer la table des modificateurs actuels de manière verbeuse (exemple complet) :

    $ xmodmap -pm

    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 (0x94)
    mod3
    mod4        Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
    mod5        ISO_Level3_Shift (0x5c),  ISO_Level3_Shift (0x6c),  Mode_switch (0x85),  Mode_switch (0xcb)

### Trouver les touches de modification de la colonne keysym

ISO_Level3_Shift
  La touche AltGr sur les claviers non américains appelle le modificateur ISO_Level3_Shift. (Sur les claviers américains, l'altération de droite `Alt_R` a la même fonction que l'altération de gauche `Alt_L`, ce qui fait qu'il est préférable de définir la disposition comme internationale américaine. Consultez le #Tableau des touches de clavier.)
Mode_switch
  Le modificateur Mode_switch peut être mappé par défaut sur une touche qui n'est pas sur votre clavier.

Note: L'utilisation des noms de modificateurs `ISO_Level3_Shift` et `Mode_switch` est différente entre xmodmap et X Keyboard Extension. Consultez également [2].

### Réaffectation des modificateurs aux touches de votre clavier

Note: xmodmap est sensible à la casse. L'utilisation d'une casse incorrecte, telle que `Mode_Switch` au lieu de la bonne `Mode_switch`, entraînera des erreurs.

Avant l'affectation, les touches de modification doivent être effacées. Cela s'applique à la fois aux modificateurs que vous avez l'intention d'assigner et aux modificateurs des touches que vous avez l'intention d'utiliser. Par exemple, si vous avez l'intention d'attribuer `Caps_Lock` à votre touche A et `B` à votre touche NumLock, vous devez d'abord effacer les modificateurs pour `Caps_Lock` et `Num_Lock`, puis attribuer les keysyms et enfin ajouter à nouveau les modificateurs.

    ~/.Xmodmap

    [...]
    clear lock
    clear mod2
    keycode  38 = Caps_Lock
    keycode  77 = Num_Lock
    add lock = Caps_Lock
    add mod2 = Num_Lock

`!` est un commentaire, donc seuls les modificateurs `Control` et `Mod4` sont effacés dans l'exemple suivant. Ensuite, les keysyms `Control_L`, `Control_R`, `Super_L` et `Super_R` sont assignés au modificateur opposé. L'affectation de la gauche et de la droite au même modificateur signifie que les deux touches sont traitées de la même manière.

    ~/.Xmodmap

    [...]
    !clear Shift
    !clear Lock
    clear Control
    !clear Mod1
    !clear Mod2
    !clear Mod3
    clear Mod4
    !clear Mod5
    !add Shift   = Shift_L Shift_R
    !add Lock    = Caps_Lock
    add Control = Super_L Super_R
    !add Mod1    = Alt_L Alt_R
    !add Mod2    = Mode_switch
    !add Mod3    =
    add Mod4    = Control_L Control_R
    !add Mod5    =

Note: L'exemple suppose que les keysyms `Control_L` et `Control_R` ont été affectés au modificateur `Control`, et les keysyms `Super_L` et `Super_R` au modificateur `Mod4`. Si vous obtenez le message d'erreur suivant `X Error of failed request: BadValue (integer parameter out of range for operation)`, vous devrez vous adapter en conséquence. L'exécution de `xmodmap` produit une liste des modificateurs et des touches qui leur sont affectées.

L'exemple suivant modifie `CapsLock` en `Control`, et `Shift+CapsLock` en `CapsLock` :

    ~/.Xmodmap

    clear lock
    clear control
    add control = Caps_Lock Control_L Control_R
    keycode 66 = Control_L Caps_Lock NoSymbol NoSymbol

## Touche de composition

Une touche de composition sert à créer des caractères spéciaux et des symboles qui peuvent ne pas être directement accessibles sur le clavier. Cela est particulièrement utile pour taper des lettres accentuées provenant de langues non anglaises. Par exemple, si vous appuyez sur la touche `Compose` `e` `'` successivement pour obtenir é. Certains caractères nécessitent d'appuyer sur plus de deux touches après `Compose`. En général, une touche de modification de votre choix est affectée à `Compose`. La touche de composition peut être définie dans les paramètres de l'interface graphique de la plupart des environnements de bureau, mais ces options ne fonctionneront pas si une table de correspondance des touches personnalisée est utilisée comme décrit dans cet article. Pour définir la touche de composition à l'aide de `Xmodmap`, utilisez l'identifiant `Multi_key`. Par exemple, pour associer la touche alt droite (`AltGr`) à la touche de composition :

    ~/.Xmodmap

    [...]
    keycode 108 = Multi_key Alt_R Meta_R Alt_R Meta_R

Le numéro du keycode peut varier en fonction des modèles de clavier.

## Défilement inversé

La fonction de défilement naturel disponible dans OS X Lion (imitant le défilement des smartphones ou des tablettes) peut être reproduite avec xmodmap. Comme le pilote synaptique utilise les boutons 4/5/6/7 pour le défilement haut/bas/gauche/droite, il suffit d'intervertir l'ordre dans lequel les boutons sont déclarés dans `~/.Xmodmap` :

    ~/.Xmodmap

    pointer = 1 2 3 5 4 7 6 8 9 10 11 12

Puis mettez à jour xmodmap :

    $ xmodmap ~/.Xmodmap

## Échanger les boutons de la souris

Les boutons gauche, central et droit de la souris correspondent respectivement aux boutons 1, 2 et 3 du pilote synaptique. Pour échanger les boutons gauche et droit de la souris, il suffit d'inverser l'ordre dans lequel ils sont listés dans votre `~/.Xmodmap` :

    ~/.Xmodmap

    pointer = 3 2 1

Cela devrait suffire pour une configuration simple de la souris. Encore une fois, mettez à jour xmodmap :

    $ xmodmap ~/.Xmodmap

## Modèles

### Espagnol

    ~/.Xmodmap

    keycode  24 = a A aacute Aacute ae AE ae
    keycode  26 = e E eacute Eacute EuroSign cent EuroSign
    keycode  30 = u U uacute Uacute downarrow uparrow downarrow
    keycode  31 = i I iacute Iacute rightarrow idotless rightarrow
    keycode  32 = o O oacute Oacute oslash Oslash oslash
    keycode  57 = n N ntilde Ntilde n N n
    keycode  58 = comma question comma questiondown dead_acute dead_doubleacute dead_acute
    keycode  61 = exclam section exclamdown section dead_belowdot dead_abovedot dead_belowdot
    !Maps the Mode key to the Alt key
    keycode 64 = Mode_switch

### Esperanto

    ~/.Xmodmap

    keycode 54 = c C c C ccircumflex Ccircumflex
    keycode 42 = g G g G gcircumflex Gcircumflex
    keycode 43 = h H h H hcircumflex Hcircumflex
    keycode 44 = j J j J jcircumflex Jcircumflex
    keycode 39 = s S s S scircumflex Scircumflex
    keycode 30 = u U u U ubreve Ubreve

### Transformer CapsLock en Control

Exemple le plus simple pour transformer `CapsLock` en `Control`.

    ~/.Xmodmap

    clear lock
    clear control
    keycode 66 = Control_L
    add control = Control_L Control_R

### Transformer CapsLock en Control, et LeftControl en Hyper

Les utilisateurs d'ordinateurs portables peuvent préférer avoir `CapsLock` comme `Control`. La touche `Control` gauche peut être utilisée comme modificateur `Hyper` (un modificateur supplémentaire pour emacs, openbox ou i3).

    ~/.Xmodmap

    clear      lock
    clear   control
    clear      mod1
    clear      mod2
    clear      mod3
    clear      mod4
    clear      mod5
    keycode      37 = Hyper_L
    keycode      66 = Control_L
    add     control = Control_L Control_R
    add        mod1 = Alt_L Alt_R Meta_L
    add        mod2 = Num_Lock
    add        mod3 = Hyper_L
    add        mod4 = Super_L Super_R
    add        mod5 = Mode_switch ISO_Level3_Shift

### Transformer Super_R en Hyper_R

Les utilisateurs qui souhaitent avoir une touche `Hyper` sur un clavier complet peuvent utiliser la touche `Super` droite comme `Hyper`.

    ~/.Xmodmap

    remove  mod4 = Super_R
    keycode  134 = Hyper_R
    add     mod3 = Hyper_R

### Intervertir chaque touche numérique N avec Shift-N et vice-versa, pour la disposition croate

Cela devrait également fonctionner pour les dispositions similaires à la disposition croate.

    ~/.Xmodmap

    keycode 10 = exclam 1 1 exclam asciitilde dead_tilde asciitilde
    keycode 11 = quotedbl 2 2 quotedbl dead_caron caron dead_caron
    keycode 12 = numbersign 3 3 numbersign asciicircum dead_circumflex asciicircum
    keycode 13 = dollar 4 4 dollar dead_breve breve dead_breve
    keycode 14 = percent 5 5 percent degree dead_abovering degree
    keycode 15 = ampersand 6 6 ampersand dead_ogonek ogonek dead_ogonek
    keycode 16 = slash 7 7 slash grave dead_grave grave
    keycode 17 = parenleft 8 8 parenleft dead_abovedot abovedot dead_abovedot
    keycode 18 = parenright 9 9 parenright dead_acute apostrophe dead_acute
    keycode 19 = equal 0 0 equal dead_doubleacute doubleacute dead_doubleacute

## Voir aussi

- xmodmap(1)
- Multimediakeys with .Xmodmap HOWTO par Christian Weiske
- Mapping unsupported keys with xmodmap par Pascal Bleser
- LQWiki:List of Keysyms Recognised by Xmodmap

Categories:

- Keyboard configuration (Français)
- Xorg commands (Français)