Trucs et astuces

De Disposition de clavier francophone et ergonomique bépo

Les trucs et astuces permettent de bidouiller vos fichiers de configuration gérants le comportement du claviers.

Modifier la place des touches

Changer la disposition des touches systèmes sous Linux

La définition de chaque caractère pour xkb se trouve dans le fichier : /usr/include/X11/keysymdef.h

Pour localiser le fichier xkb de la disposition de clavier, taper locate xkb/symbols en console. Ainsi sous Ubuntu il vous suffira de modifier le fichier /usr/share/X11/xkb/symbols/fr avec votre éditeur préféré. Attention depuis Ubuntu 13.10 pour que les modifications soient effectives il faut supprimer les dispositions pré-compilées en tapant :

sudo rm /var/lib/xkb/*.xkm

puis fermer et ouvrir votre session si vous utilisez un environnement graphique.

Vous pouvez également vous créer des alias pour passer très rapidement d'une disposition à l'autre :

alias azerty='setxkbmap fr'
alias bepo='setxkbmap fr bepo'

En console tty, la commande est :

loadkeys fr-bepo

Utiliser les Options de xkb

La liste des options se trouve généralement dans /usr/share/X11/xkb/rules/base.lst

Quelques options intéressantes :

caps:swapescape      inverse ESC et Capslock.
shift:breaks_caps    Shift annule CapsLock.
compose:lwin         La touche windows gauche devient Compose.
compose:rwin         La touche windows droit devient Compose.
compose:menu         La touche menu devient Compose.
compose:caps         La touche capslock devient Compose.
compose:102          La touche Less-than/Greater-than (êÊ/¦) devient Compose.

Pour activer les options sur une session il suffit de taper :

setxkbmap fr bepo Option1,Option2

Pour désactiver toutes les options :

setxkbmap -option

Pour activer les options à chaque redémarrage il faut rajouter dans la section input device dotée de l'identifiant keyboard :

Option          "XkbOptions"    "Option1,Option2"


Je voudrais avoir les < et > en accès direct

Sous GNU/Linux, dans le fichier xkb de la disposition, déplacer less (<) et greater (>) en première colonne en les inversant avec guillemotleft («) et guillemotright (»). Le code :

key <AE02> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ guillemotleft, 2, less,  leftdoublequotemark ] }; // « 2 < “
key <AE03> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ guillemotright, 3, greater, rightdoublequotemark ] }; // » 3 >

devient :

key <AE02> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ less, 2, guillemotleft, leftdoublequotemark ] }; // < 2 « “
key <AE03> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ greater, 3, guillemotright, rightdoublequotemark ] }; // > 3 » ”


Je voudrais avoir les chiffres en accès direct

La méthode présentée ici va uniquement intervertir la couche en accès direct avec celle en majuscule des touches sur lesquelles se trouvent les chiffres (les autres touches sont inchangées, de même que les autres couches, tel qu'altgr). En complément de cette modification, je vous conseille d'utiliser la touche verr-maj comme un deuxième altgr, et de dupliquer certains symboles en altgr main droite (notament les parenthèses).

Le moyen le plus simple de le faire, est de créer une disposition basé sur le bépo, en ajoutant ceci à la fin du fichier /usr/share/X11/xkb/symbols/fr :

partial alphanumeric_keys
xkb_symbols "bepo_invert_number" {
 
    // First row
    key <AE01> { [         1,        quotedbl ] };
    key <AE02> { [         2,   guillemotleft ] };
    key <AE03> { [         3,  guillemotright ] };
    key <AE04> { [         4,       parenleft ] };
    key <AE05> { [         5,      parenright ] };
    key <AE06> { [         6,              at ] };
    key <AE07> { [         7,            plus ] };
    key <AE08> { [         8,           minus ] };
    key <AE09> { [         9,           slash ] };
    key <AE10> { [         0,        asterisk ] };
 
};
 
partial alphanumeric_keys
xkb_symbols "bepo_modifie" {
    include "keypad(oss)"
    include "fr(bepo)"
    include "fr(bepo_invert_number)"
};

Vous pourrez désormais utiliser votre disposition fraichement créé avec la commande :

setxkbmap fr bepo_modifie


Je voudrais intervertir l’apostrophe typographique ( ’ ) avec l’apostrophe dactylographique ( ' )

Sous GNU/Linux, dans le fichier xkb de la disposition, intervertir rightsinglequotemark avec apostrophe. Les lignes :

key <AC05> { [           comma,    semicolon, rightsinglequotemark, dead_horn ] }; // , ; ’ ̛

et

key <AB06> { [      apostrophe,     question,   questiondown,      dead_hook ] }; // ' ? ¿ ̉

deviennent :

key <AC05> { [           comma,    semicolon, apostrophe, dead_horn ] }; // , ; ' ̛

et

key <AB06> { [ rightsinglequotemark,     question,   questiondown,      dead_hook ] }; // ’ ? ¿ ̉


Je voudrais avoir une espace insécable automatique avec les guillemets

Il faut ajouter les lignes suivantes dans votre ~/.XCompose. Assurez-vous que ce sont bien des espaces insécables qui sont après et avant les guillemets (autrement dit, méfiez-vous des copier-coller : certains éditeurs de texte vont les remplacer par des espaces normales, ou par un caractère quelconque). Les guillemets sans insécables sont encore accessibles avec <span class="touche" style="background: </>; ">clavier bépoCompose</span>.

# Insécables automatiques
<guillemotleft> : "« "
<guillemotright> : " »"

Rendre capslock utile

Inverser Maj et CapsLock

Dans le fichier xkb de la disposition bépo :

key <CAPS> { [ Shift_L ], actions = [ SetMods(modifiers=Shift) ] };
key <LFSH> { [ Caps_Lock ], actions = [ LockMods(modifiers=Lock) ] };
Maj sur CapsLock en gardant CapsLock en AltGr au même endroit

Dans la section xkb_types :

type "ALTGR_TWO" { modifiers = LevelThree; map[None] = Level1; map[LevelThree] = Level2; level_name[Level1] = "Base"; level_name[Level2] = "AltGr"; };

Puis :

key <CAPS> { type = "ALTGR_TWO", [ Shift_L, Caps_Lock ], actions = [ SetMods(modifiers=Shift), LockMods(modifiers=Lock) ] };
AltGr dupliqué à gauche

Choisir une touche, comme CAPS ou LFSH ou LWIN ou…

key <CAPS> { [ ISO_Level3_Shift ], actions = [ SetMods(modifiers=LevelThree) ] };
Mettre Backspace sur CapsLock

Sous linux à rajouter dans le xkb :

key <CAPS> { [ BackSpace ] };

Changer la disposition des touches sous Mac

Voir ConfigGenerator#Sous_Mac_OS_X

Changer la disposition des touches systèmes sur Mac

Sur un Mac (avec Tiger, Leopard ou SnowLeopard, i.e OS X 10.4 ou supérieur), on peut installer et utiliser le panneau de Préférences Systèmes KeyRemap4MacBook (qui n’est pas que pour les MacBook, malgré son nom !) qui permet de changer tout ce qu’on veut ou presque (plusieurs centaines de réglages disponibles, et on peut facilement apprendre comment en créer d’autres — ou bien même demander à l’auteur de KR4MB de les ajouter si on n’y arrive pas), éventuellement avec son compagnon PCKeyboardHack si on veut également re-mapper CapsLock.

Exemple de changements :

  • transformer la touche Commande (= « Cmd » ou « Pomme ») qui est à droite de la barre espace en touche Alt (= « Option »), notamment pour les claviers de portables qui n’ont qu’une touche Alt (à gauche) : sélectionner « Change Command_R to Option_R » dans le sous-menu « Change Command_R Key » ;
  • pour ceux qui ont branché un clavier PC sur le Mac, mais veulent retrouver la touche Commande immédiatement à gauche de la barre espace : inverser à gauche les touches Alt et Commande en cliquant sur « Option_L to Command_L » et sur « Command_L to Option_L » dans les sous-menus appropriés (« Change Option_L Key » et « Change Command_L Key ») ;
  • échanger CapsLock et la touche Majuscule gauche (Shift_L) : 1. utiliser PCKeyboardHack pour mapper CapsLock sur Shift_L : cocher « Change CapsLock Key », et entrer à droite sur la même ligne le keycode correspondant à Shift_L (= 56, cf. liste indicative sur le panneau de Préférences Système de PCKeyboardHack) [note : sur certains modèles, il se peut que vous ayez à cocher d’abord l’option « Enable CapsLock LED Hack » dans KeyRemap4MacBook (dans le sous-menu « General ») pour que ça marche, cf. la page de PCKeyboardHack (en anglais)] ; 2. utiliser KeyRemap4MacBook pour mapper Shift_L sur CapsLock : dans le sous-menu « Change Shift_L Key », cocher l’option « Shift_L to CapsLock » ;
  • tirer profit des touches spéciales Couper/Copier/Coller qui existent sur certains claviers (p. ex. TypeMatrix 2030) : le clavier envoie des « combos » à l’ordi — en l’occurrence : Shift+Delete, Control+Insert et Shift+Insert, respectivement —, vous pouvez remapper ces combos vers Command+X, Command+C et Command+V en cochant l’option « Use PC Style Copy/Paste #3bis », que vous trouverez dans le sous-menu « Device Specific Settings ». [Attention, bien sélectionner l’option 3bis, correspondant au bépo ! Vous avez aussi l’option « Use PC Style Copy/Paste #3 » pour réaliser la même chose en azerty ou qwerty. Ce second réglage est disponible au sein du même sous-menu « Device Specific Mixed Settings » pour le clavier TypeMatrix 2030, mais aussi dans le sous-menu « For PC Users », pour d’autres claviers.]
  • bien entendu, vous pouvez faire en sorte que certains changements soient actifs sur un clavier, mais pas sur un autre (par exemple si vous branchez un chavier externe sur un portable : vous voulez peut-être que votre clavier interne fonctionne « normalement » — ou en tout cas différemment — quand vous débranchez le clavier externe) ;
  • et même, en théorie [en pratique : peut-être à venir prochainement ?…], avoir des changements actifs pour le bépo, mais pas pour l’azerty ;
  • si vous êtes un peu bidouilleur, vous pouvez facilement aller plus loin…

Changer la disposition des touches sous Windows

Voir


Changer la disposition des touches systèmes sous Windows

Pour Windows XP et Windows Server 2003, il existe le programme remapkey.exe disponible dans le Windows Server 2003 Resource Kit Tools.

Il n'a pas été « validé » pour Windows Vista, toutefois en le lançant en tant qu'administrateur (avec un clic droit sur l'exécutable), vous devriez être en mesure de réaliser des changements :

J'ai réussi à intervertir Alt avec Majuscule Gauche, j'ai pas poussé plus loin les tests.
Olympi, le 18 janvier 2009 à 12:25 (CET)

Créer une touche de fonction Fn comme sur les portables

Pour XOrg (Linux, BSD, etc.)

Choisissez une touche comme Alt Gauche (LALT), Win Gauche ou droite (LWIN, RWIN), CAPS, etc. Puis

key <LALT> { [ VoidSymbol ], actions = [ SetControls(controls=Overlay1) ] };

Il ne vous reste plus qu’à choisir quelles touches vous voulez mettre en Fn: pavé numérique, flèches de déplacements, etc. Par exemple pour mettre une flèche de déplacement à gauche sur la touche clavier bépot:

key <AC07> {
 type[group1]="FOUR_LEVEL_ALPHABETIC", [t, T, thorn, THORN],
 overlay1 = <LEFT>
}

Vous trouverez un exemple complet ici (et ici une autre configuration plus adaptée pour les vimistes :-)).

Un exemple que l'on peut ajouter sur n'importe quel layout :

partial hidden alphanumeric_keys
xkb_symbols "pc78" {
	key <CAPS> { [ VoidSymbol ], actions = [ SetControls(controls=Overlay1), LockControls(controls=Overlay1) ] };
	key <AD07> {  overlay1 = <HOME> };
	key <AD08> {  overlay1 = <UP> };
	key <AD09> {  overlay1 = <PGDN> };
	key <AD11> {  overlay1 = <BKSP> };
	key <AC07> {  overlay1 = <LEFT> };
	key <AC08> {  overlay1 = <DOWN> };
	key <AC09> {  overlay1 = <RGHT> };
	key <AC10> {  overlay1 = <PGUP> };
	key <AC11> {  overlay1 = <RTRN> };
	key <AB07> {  overlay1 = <END> };
};

dont le bépo :

partial alphanumeric_keys
xkb_symbols "bepo-pc78" {
	include "fr(bepo)"
	include "fr(pc78)"
};

(à mettre dans votre fichier fr.)

Pour Mac

Grâce à KeyRemap4MacBook, vous pouvez en théorie changer une touche quelconque en touche Fn ; en pratique, en ce moment (= version 6.8.1 de KR4MB), les réglages sont disponibles pour les touches suivantes : Command_R (= touche « Cmd »/« Pomme » de droite), Control_L (= touche Control de gauche), Enter, Option_L (= touche Alt/Option de gauche), Option_R (= la même, mais à droite), Shift_L (= touche majuscule à gauche), Shift_R (= idem à droite), la touche Application d’un clavier PC (ce dernier réglage est disponible dans le sous-menu « For PC Users », puis « Change PC Application Key »). Le réglage est à trouver chaque fois dans le sous-menu correspondant : « Change Command_R », « Change Control_L », etc.

Si cette liste ne suffit pas à vos besoins, on peut la compléter :

  • soi-même, en apprenant la syntaxe (pas bien méchante + nombreux exemples dispos) du fichier XML de configuration de KR4MB (explications + tutoriel disponibles (en anglais) sur le site de KR4MB, page Source Code), et en envoyant ensuite sa contribution au développeur pour qu’elle soit intégrée aux prochaines versions (1. plus pratique, pour éviter de devoir recompiler/réinstaller quand on fait une mise à jour, 2. plus sympa, pour faire profiter les autres des additions créées) ;
  • si on n’y arrive pas, en demandant gentiment au développeur ce qu’on veut (attention à ne pas abuser de sa disponibilité, même si elle est très grande !).

Pour Windows

Il est possible d'avoir cette fonctionnalité en utilisant PKL.

Modifier le comportement des touches mortes

Je suis espérantiste et je voudrais que ^+v=ŭ et ^+V=Ŭ

Il faut ajouter ce qui suit dans votre ~/.XCompose

<dead_circumflex> <v> : "ŭ" U016D
<dead_circumflex> <V> : "Ŭ" U016C

Je voudrais définir des touches mortes de modifieurs (Alt, AltGr, Ctrl,…) (X.Org)

Il vous faut avoir votre propre fichier .xkb pour pouvoir le modifier. Dans la section "xkb_symbols" rajoutez par exemple:

key <FK13> { actions = [ LatchMods(modifiers=Control) ] }; // dead ctrl
key <FK14> { actions = [ LatchMods(modifiers=Shift) ] };   // dead shift
key <FK15> { actions = [ LatchMods(modifiers=Alt) ] };     // dead alt
key <FK16> { actions = [ LatchMods(modifiers=AltGr) ] };   // dead altgr

Il ne vous reste plus qu'à utiliser ces keycodes comme bon vous semblera !

Par exemple, si vous avez défini une couche overlay1 (voir astuce plus haut):

key <AD01> { type[group1] = "FOUR_LEVEL_SEMIALPHABETIC", [ b, B, bar,  brokenbar ], overlay1 = <FK13> }; // b B | ¦

pour avoir un Control mort en fn+b :-)

GNU/Linux: configuration poussée

Vous pouvez consulter les différents documents concernant XKB.

Créer une disposition personnalisé

Attention, en modifiant la façon dont votre clavier est utilisé, il est possible que vous en perdiez l'usage (il m'est arrivé d'avoir de ne plus avoir accès à la touche `enter` ou `espace` en faisant de mauvaise manipulation) ! Faites donc des sauvegardes régulières dans des fichiers de backup, et ne redémarer pas votre ordinateur avec une disposition boggué.

1. Ce dont on va se servir :

  • /usr/share/X11/xkb/symbols/fr : contient entre autre la définition du bépo
  • /usr/include/X11/keysymdef.h : contient la liste des symboles (keysym)
  • http://www.charvolant.org/~doug/xkb/html/img3.png Pour la liste des codes de touches (keycode)

2. Rappel : faite une copie de sauvegarde de /usr/share/X11/xkb/symbols/fr (avant, en cas d'erreur, et après pour ne pas perdre votre travail lors d'une mise à jour).

3. Fabrication d'une dispo perso basé sur le bépo :

Ajouter à la fin du fichier /usr/share/X11/xkb/symbols/fr les lignes suivantes :

xkb_symbols "bepo_test" {
   include "keypad(oss)"
   include "fr(bepo)"
   name[Group1]= "French (Bepo, ergonomic, Dvorak way, Test de modification de la disposition bepo)";
   // ajoutez les différences entre votre disposition et le bépo ici
}

Include "keypad(oss)" m'a permis de régler certain problèmes (j'avais par exemple déclacé ma touche majuscule et shift + majuscule ne fonctionnait plus. Include "fr(bepo)" permet de se baser sur la disposition bepo, et donc avoir un clavier utilisable dès le début des modifications.

Votre disposition est maintenant prête à l'emploi. Il suffit désormais de taper :

setxkbmap fr bepo_test

pour basculer vers votre disposition (actuellement c'est un clone du bépo, donc vous ne verrez pas de différence), et inversement

setxkbmap fr bepo

pour revenir en bépo.

Vous pouvez désormais ajouter vos changements en piochant dans la liste des exemples présenté précédement dans cette page. Vous pourrez également vous inspirer des dispositions de clavier existante situées dans /usr/share/X11/xkb/symbols/*.

/!\ Si vous enlevez certains symboles de votre clavier, vous ne pourrez plus les écrire. C'est particulièrement problèmatique s’il s'agit de la touche « espace » ou « entrée ». Je vous conseille lors des phases de tests de toujours avoir une console accessible à la souris (pour pouvoir faire du copier-coller avec le clic milieu), avec la commande suivante prête à être validée : « setxkbmap fr bepo ».

Exemple

- Un exemple complet se trouve ici.

- La disposition perso de Robin à également été construite de cette manière.

setxkbmap ne fonctionne qu’une seule fois

Imaginez le scénario suivant :

  •  vous créez un nouveau layout dans un fichier /usr/share/X11/xkb/symbols/layout ;
  •  vous l’activez à l’aide de la commande setxkbmap layout variante ;
  •  vous modifiez votre layout ;
  •  vous retapez setxkbmap layout variante ;
  •  vous vous apercevez que vos dernières modifications n’ont pas été prises en compte.

En fait, la première fois que vous exécutez setxkbmap layout variante, la commande compile le clavier et le stocke dans /var/lib/xkb sous forme d’un fichier .xkm avec un nom du genre server-1AAD618ED4955FE03F2E50661CFAE17F431BAE8A.xkm
Aux appels suivants de la commande setxkbmap, le fichier .xkm ne sera plus compilé.

La manière la plus simple d’obtenir sa recompilation à partir du code xkb que vous venez de modifier est d’effacer au préalable les fichiers .xkm avec la commande
rm /var/lib/xkb/*.xkm si vous êtes su,
ou sudo rm /var/lib/xkb/*.xkm si vous êtes sudoer,
ou encore de renommer le fichier source.