Selon les tags présents sur cette page, les informations qu'elle contient n'ont pas été vérifiées pour les dernières versions LTS depuis Ubuntu 14.04 LTS.
Cette page est en cours de rédaction.
Apportez votre aide…

Ceci est une ancienne révision du document !



Page en élaboration

Exemple de création d'un agencement de clavier personnalisé

Cette page illustre par un exemple concret et complet, la mise en place d'un agencement personnalisé disponible ensuite dans l'interface graphique au même titre que ceux fournis avec la distribution.

Il s'agit avant tout de la description détaillée des raisonnements suivis et de l'utilisation des outils disponibles pour faciliter ce travail. Néanmoins, pour faciliter la vision d'ensemble, les grande ligne de la méthodes sont présentées sur la page Créer et utiliser un agencement de clavier personnalisé.

La lecture de cette page suppose compris les concepts généraux présentés sur la page Comprendre la configuration du clavier.

L'objectif est de :

  1. disposer d'un agencement personnalisé basé sur le clavier bépo français de marque Typematrix,
  2. compléter, voire ré-organiser, la distribution des symboles sur les touches.
  3. en particulier, créer des niveaux supplémentaires pour ajouter à certaines touches les symboles monétaires de certaines devises et quelques symboles mathématiques.
  4. utiliser la touche Alt de gauche pour accéder aux niveaux au delà de quatre.

Manipulation préliminaires

Pour éviter toute interférence nuisible à la perception de la situation de base, on ne conserve qu'un seul agencement, en l'occurrence, celui qui nous sert de base. Pour cela, nous utilisons le dialogue des préférences du clavier accessible par Système → Préférence → Clavier.

Ensuite, par le bouton des options présent dans ce dialogue, nous supprimons toutes les options, en les notant si besoin, qui s'écartent de la configuration par défaut.

Connaître avec le clavier

Ouvrez un terminal et entrez la commande suivante :

xkbprint -label name $DISPLAY - | gv -orientation=seascape -

Une image du clavier portant les noms symboliques des touches et le code de ces touches., apparaît. Nous devrons nous y référer chaque fois qu'il nous sera nécessaire d'identifier précisément une touche.

Attention cependant, la description de ce clavier fait intervenir des fichiers descriptifs indépendants du fonctionnement du clavier. Il arrive que ces fichiers soient erronés sans que cela ait le moindre retentissement sur le fonctionnement, ce qui ne facilite pas la mise en évidence des erreurs. Pour garantir les informations sur la touche, il faut faire appel à l'utilitaire xev

Ouvrez un terminal et entrez la commande suivante :

xev

Une fenêtre de terminal s'ouvre ainsi qu'une fenêtre plus petite intitulée Event tester. Frappez sur une touche (k par exemple). Dans la fenêtre du terminal, un grand nombre d'informations sur les différents évènements générés s'affichent. Nous y trouvons en particulier les lignes suivantes :

KeyRelease event, serial 37, synthetic NO, window 0x4c00001,
root 0x15a, subw 0x0, time 50238474, (229,1101), root:(230,1128),
state 0x10, keycode 56 (keysym 0x6b, k), same_screen YES,
XLookupString gives 1 bytes: (6b) "k"
XFilterEvent returns: False

La partie qui nous intéresse ici est en gras. Elle devrait confirmer les informations de l'image précédente, à savoir que le code de la touche marquée «k» est 56 et que le symbole de touche associé est k ((à condition de ne pas appuyer sur ⇧en même temps.

Connaître les fichiers de configuration actifs

Dans un terminal, entrez la commande suivante :

setxkbmap -print

LE résultat affiché est le suivant :

jaaf@jaaf-P55A-UD4:~$ setxkbmap -print
xkb_keymap {
xkb_keycodes { include "evdev+aliases(azerty)" };
xkb_types { include "complete" };
xkb_compat { include "complete" };
xkb_symbols { include "pc+fr(bepo)+inet(evdev)+terminate(ctrl_alt_bksp)" };
xkb_geometry { include "typematrix(tm2030USB)" };
};
jaaf@jaaf-P55A-UD4:~$

Les options

Avant de nous intéresser aux autres fichiers de configuration, arrêtons nous un instant sur la fin de la ligne qui commence par xkb_symbols, c'est à dire : +terminate(ctrl_alt_bksp).

Cet expression représente la traduction en terme de configuration de l'option (que nous n'avons pas supprimée) définissant le choix de la commande à utiliser pour arrêter le serveur X.

Si nous explorons le dossier /usr/share/X11/xkb/symbols où sont censés se trouver les fichiers de définitions des symboles associés aux touches, nous y trouvons let fichier terminate dont le contenu est le suivant :

partial default modifier_keys
xkb_symbols "ctrl_alt_bksp" {
key <BKSP> {
type="CTRL+ALT",
symbols[Group1] = [ NoSymbol, Terminate_Server ]
};
};

Nous voyons que le symbole de terminaison du serveur, Terminate_Server, en gras ici, est associé à la touche <BKSP> qui possède deux niveaux et dont l'accès au deuxième niveau est donné par la combinaison de touches Ctrl + Alt comme le décrit l'extrait suivant du fichier /usr/share/X11/xkb/types/pc  :

type "CTRL+ALT" {
modifiers = Control+Alt;
map[Control+Alt] = Level2;
level_name[Level1] = "Base";
level_name[Level2] = "Ctrl+Alt";
};

Nous notons au passage que l'option, introduite par un signe +, s'ajoute, selon les règles de fusion citées à la section Comprendre la configuration du clavier#Mise en œuvre des modes de fusion, en mode override, c'est à dire, qu'elle prend l'avantage sur toute déclaration antérieure.

Notons également qu'il en va de même pour toutes les options qui ont pour ainsi dire le dernier mot.

Les fichiers de symboles

Reprenons la ligne qui parle des symboles dans la sortie de la commande setxkbmap -print :

xkb_symbols { include "pc+fr(bepo)+inet(evdev)+terminate(ctrl_alt_bksp)" };

Mis à part les options qui viennent se surajouter, nous lisons que l'affectation des symboles de touche aux touches, se fait par les définitions du fichier pc auxquelles viennent se surajouter, en mode override (signe +), celles de la section bépo du fichier fr, puis celles de la section evdev du fichier inet. Tous ces fichiers étant bien-sûr ceux du dossier usr/share/X11/xkb/symbols.

En regardant les instructions d'inclusion à l'intérieur des fichiers, nous pouvons établir le schéma structurel suivant :

Seul dans ces fichiers, nous intéressent le contenu de la section fr (bépo), a priori, nous n'avons pas besoin de changer les fichiers inclus.

Il nous faudra néanmoins rajouter quelque part une section pour permuter les rôles des touches Alt de gauche et Logo de gauche et faire de la touche Alt une touche de sélection des niveaux supérieurs à quatre.

Récupération d'une base de départ

Dans un terminal, entrons, la commande suivante :

gksudo gedit /usr/share/X11/xkb/symbols/fr

Après avoir saisi notre mot de passe, enregistrons le fichier ouvert sous le nom : mon_fr_bépo.

Ajoutons en tête des commentaires de début, la ligne suivante :

//créé le «« août 2011 par jaaf64 sur la base de fr

Ne conservons que la section «bépo». C'est à dire supprimons les lignes depuis :

partial default alphanumeric_keys
xkb_symbols "basic" {

incluse, jusqu'aux lignes

partial alphanumeric_keys
xkb_symbols "bepo" {

non comprises.

Puis les lignes depuis :

partial alphanumeric_keys
xkb_symbols "bepo_latin9" {

incluse, jusqu'à la fin.

Comme nous allons devoir modifier certaines lignes de latin, supprimons la ligne include latin et, par copier/coller depuis latin, recopions la liste des touches et leur définition, juste derrière la ligne : name[Group1]= "France - Bepo, ergonomic, Dvorak way";. Transformons également cette ligne en : name[Group1]= "France - Bepo,personnalisé"; C'est ce nom qui apparaîtra dans l'interface graphique.

Supprimons de la partie importée, toutes les définitions déjà reprises plus bas dans le fichier. En fait, il n'en reste aucune, mais, il s'agissait d'illustrer une démarche générale.

Nous remarquons que certaines lignes porte une information de type — type[group1] = "FOUR_LEVEL_SEMIALPHABETIC",— qui annihile le choix du type par défaut. Si nous nous référons aux indications données dans le fichier /usr/share/X11/xkb/types/extra, nous observons que ce type se différencie très légèrement du type "FOUR_LEVEL_ALPHABETIC" (qui est le type par défaut) dans l'interprétation de la touche Verr num pour les niveaux 3 et 4. Nous n'allons pas toucher ces lignes ici. mais si nous le faisions il nous faudrait faire un choix quant à ce fonctionnement.

Introduction des niveaux supérieurs à quatre

Nous allons maintenant avoir besoin d'un type de touche à plus de quatre niveaux. Nous devons explorer les fichiers du dossier /usr/share/X11/xkb/types pour savoir si un tel type n'existe pas déjà. Le fichier level5 ((nveau5) devrait logiquement faire l'affaire. Bingo ! Il existe bien dans ce fichier le type suivant :

type "EIGHT_LEVEL_ALPHABETIC" {
modifiers = Shift+Lock+LevelThree+LevelFive;
map[None] = Level1;
map[Shift] = Level2;
map[Lock] = Level2;
map[LevelThree] = Level3;
map[Shift+LevelThree] = Level4;
map[Lock+LevelThree] = Level4;
map[Lock+Shift+LevelThree] = Level3;
map[LevelFive] = Level5;
map[Shift+LevelFive] = Level6;
map[Lock+LevelFive] = Level6;
map[LevelThree+LevelFive] = Level7;
map[Shift+LevelThree+LevelFive] = Level8;
map[Lock+LevelThree+LevelFive] = Level8;
map[Lock+Shift+LevelThree+LevelFive] = Level7;

level_name[Level1] = "Base";
level_name[Level2] = "Shift";
level_name[Level3] = "Alt Base";
level_name[Level4] = "Shift Alt";
level_name[Level5] = "X";
level_name[Level6] = "X Shift";
level_name[Level7] = "X Alt Base";
level_name[Level8] = "X Shift Alt";

> };

Celui-ci fait parfaitement notre affaire. Nous allons donc ajouter devant le signe [ de chacune des lignes de touche alphabétiques, le texte suivant :

type[group1] = "EIGHT_LEVEL_ALPHABETIC", 

puis devant le signe ] de ces mêmes lignes, le texte suivant :

, noSymbol, noSymbol, noSymbol, noSymbol

Une ligne modifiée devrait se présenter ainsi :

key <AD01> { type[group1] = "EIGHT_LEVEL_ALPHABETIC",[  b,  B,  bar, brokenbar, noSymbol, noSymbol, noSymbol, noSymbol] }; // b B | ¦
On veillera à ne pas insérer d'espace entre le dernier symbole pré-existant et la première virgule du texte inséré.
default partial modifier_keys
xkb_symbols "ralt_switch" {
key <RALT> {
type[Group1]="ONE_LEVEL",
symbols[Group1] = [ ISO_Level3_Shift ]
};
modifier_map Mod5 { ISO_Level3_Shift };
};
  • tutoriel/exemple_de_creation_d_un_agencement_clavier_personnalise.1313994748.txt.gz
  • Dernière modification: Le 15/12/2011, 15:21
  • (modification externe)