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):
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
Alors, que fait le modificateur de 5ème niveau?
Comment puis-je le configurer pour que je puisse obtenir 5 ou 6 caractères différents d'une clé unique (modifiée par Shift, Alt Gr et Right Ctrl par exemple)?
"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:
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 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.
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)"
};
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.
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.