web-dev-qa-db-fra.com

Quel est le rôle de "Touche pour choisir le 5ème niveau" dans gnome-keyboard-properties?

Il y a une option pour spécifier une clé à utiliser pour accéder au 5ème niveau sur le clavier dans gnome-keyboard-properties ("Clavier" sous Matériel dans les paramètres système):

Screenshot of said dialog

Mais si je mets le 5ème niveau à AltGr et le troisième niveau à Right Ctrl et si je mets la clé 54 comme suit:

xmodmap -e "keycode 54 = 1 2 3 4 5 6 7 8"

Je reçois les résultats suivants en appuyant sur différentes variations:

keycode 54 = 1
keycode 54 + right ctrl = 5
keycode 54 + right ctrl + shift = 6
keycode 54 + shift = 2
keycode 54 + AltGr = 1
keycode 54 + AltGr + shift = 2
  1. Alors, que fait le modificateur de 5ème niveau?

  2. Comment puis-je le configurer pour que je puisse obtenir 5 ou 6 caractères différents d'une clé unique (modifiée par ShiftAlt Gr et Right Ctrl par exemple)?

17
sup

"1. Alors, que fait le modificateur de 5ème niveau?

Il choisit le cinquième niveau. Le modificateur de niveau 2 (tout changement régulier) choisit le deuxième niveau et le troisième niveau choisit le troisième niveau.

La raison pour laquelle le modificateur de 5ème niveau choisit le cinquième niveau au lieu du quatrième (juste après le modificateur de 3ème niveau) est que ces trois modificateurs peuvent être combinés de différentes manières pour choisir huit niveaux différents (cela implique de ne pas utiliser l'un des modificateurs, qui est juste en appuyant sur une touche sans aucun de ces modificateurs). Il y a huit combinaisons depuis 2 ↑ 3 = 8. Pour les deux premiers modificateurs, il y a quatre combinaisons:

  • Aucun modificateur (niveau 1)
  • Modificateur de niveau 2, décalage horaire (niveau 2)
  • Modificateur de 3ème niveau (niveau 3)
  • 2ème + 3ème modificateur (niveau 4)

L'ajout du troisième modificateur (5ème niveau) ajoute quatre niveaux supplémentaires.

“2. Comment puis-je le configurer pour que je puisse obtenir 5 ou 6 caractères différents d’une seule clé (modifiée par Shift, Alt Gr et Right Ctrl par exemple)?"

Tout d'abord, vous avez besoin d'une mise en page qui utilise cinq caractères ou plus par touche. Vous pouvez choisir une disposition existante, mais si vous souhaitez simplement ajouter plus de niveaux à la disposition que vous utilisez actuellement, cela risque de ne pas être optimal. Par exemple, il y a la disposition du clavier Neo († 1), mais celle-ci est "optimisée pour la langue allemande" et n’est donc pas très bonne pour la plupart des anglophones.

Néanmoins, il pourrait être instructif de regarder quelles touches Neo a choisies pour le modificateur de niveau 5.

Neo layout

Neo appelle apparemment le modificateur de niveau 5 pour "Mod4". Comme vous pouvez le constater, il utilise la touche à droite de la touche Maj gauche (LSGT) et la touche Alt droite/AltGr. C’est sur un clavier européen (105 touches) qui, comparé au clavier américain (104 touches), possède un décalage à gauche étroit et une touche de retour haute et fine. Pour une disposition de clavier basée sur le clavier américain, il peut être nécessaire ou préférable de choisir d'autres touches.

Choisir une touche de modification de niveau 5

Dans la réponse de sup, il choisit d’utiliser Xmodmap. De nos jours, des outils comme Setxkbmap sont recommandés par rapport à Xmodmap. Xkb propose de nombreuses options prédéfinies, telles que le choix du modificateur de niveau 5. Si vous consultez man xkeyboard-config et recherchez lv5, vous trouverez les options suivantes:

┌──────────────────────┬───────────────────────────────────────────────────┐
│ Option               │ Description                                       │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:lsgt_switch_lock │ <Less/Greater> chooses 5th level; acts as onetime │
│                      │ lock when pressed together with another 5th level │
│                      │ chooser                                           │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:ralt_switch_lock │ Right Alt chooses 5th level; acts as onetime lock │
│                      │ when pressed together with another 5th level      │
│                      │ chooser                                           │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:lwin_switch_lock │ Left Win chooses 5th level; acts as onetime lock  │
│                      │ when pressed together with another 5th level      │
│                      │ chooser                                           │
├──────────────────────┼───────────────────────────────────────────────────┤
│ lv5:rwin_switch_lock │ Right Win chooses 5th level; acts as onetime lock │
│                      │ when pressed together with another 5th level      │
│                      │ chooser                                           │
└──────────────────────┴───────────────────────────────────────────────────┘

Les options documentées sont donc la touche LSGT, la touche Alt droite, la touche Windows droite et la touche Windows gauche. Comme nous l’avons vu, Neo utilise les deux premières options.

Supposons que vous souhaitiez utiliser l'option lv5:ralt_switch_lock avec une certaine disposition. Cette commande configure la disposition us avec cette touche de modification de niveau 5:

setxkbmap -option "lv5:ralt_switch_lock" us

Donc, pour toutes les options documentées dans man xkeyboard-config, utilisez-le comme argument de -option lorsque vous utilisez Setxkbmap.

Si ces options ne suffisent pas et que vous souhaitez définir une autre clé comme modificateur de niveau 5, il est utile de consulter les déclarations de ces options. Ils semblent être dans /usr/share/X11/xkb/symbols/level5. La déclaration de lv5:ralt_switch_lock ressemble à ceci:

partial modifier_keys
xkb_symbols "ralt_switch_lock" {
  include "level5(lock)"
  key <RALT> {
    type[Group1] = "EIGHT_LEVEL",
    symbols[Group1] = [ ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift, ISO_Level5_Shift,
                        ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock, ISO_Level5_Lock ]
  };
};

Le côté droit de symbols[Group1] déclare la clé ou le caractère que chaque niveau de la clé doit produire. Ceci utilise les huit niveaux possibles car il est supposé verrouiller le modificateur de niveau 5 lorsqu'il est enfoncé avec une autre touche Maj de niveau 5. Ainsi, les niveaux 5 à 8 émettent ISO_Level5_Lock puisque tous ces niveaux sont accessibles en maintenant enfoncée la touche Maj de niveau 5 et une combinaison des autres touches de majuscule (aucune pour toutes). Si vous voulez seulement le comportement de décalage et pas aussi le comportement de verrouillage si vous appuyez deux fois, vous pouvez faire une déclaration plus simple (à partir du même fichier):

// The right Alt key (while pressed) chooses the fifth shift level.
partial modifier_keys
xkb_symbols "ralt_switch" {
  key <RALT> {
    type[Group1]="ONE_LEVEL",
    symbols[Group1] = [ ISO_Level5_Shift ]
  };
  include "level5(modifier_mapping)"
};

Ajout de niveaux supplémentaires à une mise en page

Les mises en page Xkb sont plutôt modulaires. Vous pouvez inclure des mises en page existantes et les modifier. Nous pouvons donc choisir une mise en page existante comportant moins de 5 niveaux et y ajouter des niveaux.

Vous pouvez créer de nouvelles présentations en copiant le fichier avec vos présentations dans /usr/share/X11/xkb/symbols/, ou à tout autre endroit où vos outils Xkb recherchent des présentations. Mais cela nécessite le privilège de Sudo, ce n’est donc pas la meilleure solution. Sinon, vous pouvez copier la structure de répertoire de xkb/ et placer vos présentations dans le répertoire approprié sous xkb/, à savoir symbols/. Donc disons que vous avez créé un fichier xkb-tree/symbols/my-layouts. Pour utiliser les présentations définies dans ce fichier, vous pouvez utiliser l'option -print de setxkbmap, puis diriger le résultat vers xkbcomp. Ce script de wrapper prend les mises en page en entrée:

#!/bin/sh

# `-option ""` resets all options.
setxkbmap -option "" -layout "$1" \
    -print |
    xkbcomp -I"<path-to-project>/xkb-tree" - "$DISPLAY"

En ce qui concerne le fichier avec la mise en page, disons que nous souhaitons développer la mise en page "États-Unis", qui utilise quatre niveaux. Tout d’abord, nous configurons les touches majuscules de niveau 3 et 5 de la même manière que Neo:

partial alphanumeric_keys
xkb_symbols "mine" {
    // US international
    include "us(intl)"
    // Set up level 3 modifiers.
    include "level3(modifier_mapping)"
    include "level3(bksl_switch)"
    include "level3(caps_switch)"
    // Set up level 5 modifiers.
    include "level5(modifier_mapping)"
    include "level5(lsgt_switch)"
    include "level5(ralt_switch)"
};

Maintenant, nous voulons ajouter des caractères supplémentaires. Prenons simplement comme exemple les quatre premières clés des dispositions Qwerty. Ces touches sont Q à R, qui correspondent à <AD01> à <AD04>. Nous devons d’abord rendre les clés capables d’utiliser jusqu’à huit niveaux:

key.type[Group1] = "EIGHT_LEVEL";

Pour les quatre premiers niveaux, afin de ne pas les redéfinir, nous les mappons à NoSymbol. Ensuite, nous ajoutons deux niveaux. Au niveau 5, nous ajoutons les flèches ←↓↑→ († 2). Au niveau 6, nous ajoutons les touches de direction. Notre disposition finit par ressembler à ceci:

partial alphanumeric_keys
xkb_symbols "mine" {
    // US international
    include "us(intl)"
    // Set up level 3 modifiers.
    include "level3(modifier_mapping)"
    include "level3(bksl_switch)"
    include "level3(caps_switch)"
    // Set up level 5 modifiers.
    include "level5(modifier_mapping)"
    include "level5(lsgt_switch)"
    include "level5(ralt_switch)"

    // Make the following keys capable of using eight levels.
    key.type[Group1] = "EIGHT_LEVEL";

    key <AD01> { [
        NoSymbol, NoSymbol, NoSymbol, NoSymbol,
        leftarrow, Left
    ] };
    key <AD02> { [
        NoSymbol, NoSymbol, NoSymbol, NoSymbol,
        downarrow, Down
    ] };
    key <AD03> { [
        NoSymbol, NoSymbol, NoSymbol, NoSymbol,
        uparrow, Up
    ] };
    key <AD04> { [
        NoSymbol, NoSymbol, NoSymbol, NoSymbol,
        rightarrow, Right
    ] };

};

Pour l'utiliser, nous pouvons utiliser le script de wrapper que nous avons créé:

./setxkbmap-wrapper "my-layouts(mine)"

† 1: Neo est de(neo) in Xkb; setxkbmap "de(neo)".

† 2: afin de rechercher les noms symboliques utilisés par Xkb, recherchez un fichier nommé keysymdef.h. Il devrait être dans un répertoire nommé X11/. Vous pouvez également utiliser des noms Unicode, par exemple U2192 pour U + 2192.

13
Guildenstern

Eh bien, après avoir creusé un peu:

(1) La clé pour choisir le 5ème niveau fait des choses étranges (concernant certaines dispositions françaises) qui ne correspondent pas à ce que je voulais faire. Fondamentalement, il définit quelle clé va agir comme ISO_Level5_Shift. ISO_Level5_Shift est utilisé dans certaines mises en page obscures. Cette réponse est basée sur le nombre de résultats que Google donne lors de la recherche de "ISO_Level5_Shift" et de ceux-ciliens .

(2) Il ne peut pas être utilisé pour extraire 6 symboles d'une clé physique. Une façon d'y parvenir consiste à utiliser le fichier .xmodmap placé dans le répertoire $ HOME.

D'abord, commande

xmodmap -pm

donne quels symboles de touches agissent comme divers modificateurs. Sur mon système, c'était comme suit:

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

shift       Shift_L (0x32),  Shift_R (0x3e)
lock        Caps_Lock (0x9)
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)

mod3 doit être configuré pour pouvoir utiliser 6 symboles avec une clé. Cela doit être placé dans un fichier .xmodmap:

clear mod3
clear mod5
keycode 94 = Mode_switch
add mod3 = Mode_switch
add mod5 = ISO_Level3_Shift

Puis xmodmap -pm m'a donné:

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

Où keycode 94 est la clé que j'ai choisie pour agir en tant que mod3. Les codes de touches de différentes clés physiques peuvent être trouvés avec l'outil de ligne de commande xev (il suffit de l'exécuter et d'appuyer sur différentes touches, les codes de clés s'afficheront).

Ensuite, si je place dans un fichier .xmodmap

keycode 54 = 1 2 3 4 5 6

ou courir

xmodmap -e "keycode 54 = 1 2 3 4 5 6"

J'obtiens six symboles différents sur une clé avec altgr, shift et keycode 94 (c'est une clé inutile à côté du décalage gauche de ma présentation physique).

UPDATE: si vous n'avez besoin que de cinq symboles, il est pratique de le configurer comme suit:

keycode 54 = 1 2 3 3 5 6

Il m'arrive de temps en temps que j'en ai 4 au lieu de 3 sinon.

8
sup