<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Artisan Numérique</title>
  <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1590"/>
  <link rel="self" type="application/atom+xml" href="http://artisan.karma-lab.net/node/1590/atom/feed"/>
  <id>http://artisan.karma-lab.net/node/1590/atom/feed</id>
  <updated>2008-10-23T01:12:41+02:00</updated>
  <entry>
    <title>Redéfinition d&#039;un clavier</title>
    <link rel="alternate" type="text/html" href="http://artisan.karma-lab.net/node/1590" />
    <id>http://artisan.karma-lab.net/node/1590</id>
    <published>2008-10-19T21:00:02+02:00</published>
    <updated>2008-10-23T01:12:41+02:00</updated>
    <author>
      <name>Ulhume</name>
    </author>
    <category term="X11" />
    <category term="OK" />
    <category term="Planet Libre" />
    <category term="Tutoriel" />
    <summary type="html"><![CDATA[<p>
GNU/Linux et XKB/Xorg offrent une grande souplesse quant il s'agit de devoir modifier la disposition des touches d'un clavier. La longue histoire de l'environnement mais surtout la multitude de plate forme sur lequel il fonctionne, a fait évolué cet aspect jusqu'à fournir un véritable langage de définition avec <kbd>xkb</kbd>. Voyons donc comment exploiter cela lorsque l'on tombe sur une machine au clavier peu ou mal reconnu. 
</p>
    ]]></summary>
    <content type="html"><![CDATA[<p>
GNU/Linux et XKB/Xorg offrent une grande souplesse quant il s'agit de devoir modifier la disposition des touches d'un clavier. La longue histoire de l'environnement mais surtout la multitude de plate forme sur lequel il fonctionne, a fait évolué cet aspect jusqu'à fournir un véritable langage de définition avec <kbd>xkb</kbd>. Voyons donc comment exploiter cela lorsque l'on tombe sur une machine au clavier peu ou mal reconnu. 
</p>
<!--break-->

	<a name='chapter_1'></a>
  <h2>De la touche, à la console</h2>
	
<p>
	Lorsque vous pressez une touche sur votre clavier, disons la touche <span class="key">A</span>, sa position est transmise à Linux par le contrôleur USB (module <kbd>usbhid</kbd>) ou par le contrôleur du port PS/2 (module gêrant la puce ancestrale <kbd>i8042</kbd>) sous la forme d'un <kbd>scan code</kbd> composé de deux chiffres. Dans notre cas Linux recevra <span class="keyCode">0x10 0x90</span> (<kbd>0x</kbd> signifiant de l'hexadécimal).  
</p>
<p>
  A partir de là il y a deux circuits possibles. Le premier est celui qui mène à la console. Dans ce cas, Linux converti le <kbd>scan code</kbd> en un <kbd>key code</kbd> selon une <a class='external' target='_blank' href='http://www.comptechdoc.org/os/linux/howlinuxworks/linux_hlkeycodes.html' >table prédéfine</a>. Pour notre touche <span class="key">A</span>, cela nous donne <span class="keyCode">16</span>.</p>
<p>
Ensuite ce <kbd>key code</kbd> est converti en un caractère ou un contrôle par une table de conversion. Ces tables, ou du moins les fichiers qui les décrivent, se trouve en <kbd>/usr/lib/kbd/keymaps</kbd>. C'est ainsi que la touche <span class="key">A</span> devient le code ASCII <kbd>97</kbd>, puis le caractère <kbd>a</kbd> affiché dans la console.
</p>
<p>
  Une batterie de commandes permettent de lister le mapping courrant (<kb>dumpkeys</kb>), de changer le mapping d'une touche <kbd>setkeycodes</kbd> et enfin de charger un mapping complet par la commande <kbd>loadkeys</kbd>.
</p>
<p>
  Ainsi, si par exemple en utilisant un disque d'urgence (mode rescue), vous vous retrouvez avec un clavier QWERTY, un <kbd>loadkey fr</kbd>, peut grandement aider...   
</p>




	<a name='chapter_2'></a>
  <h2>De la touche à X11</h2>
	
<p>
  Bon, la console c'est bien sympathique mais comment tout cela fonctionne t-il sous X ? Et bien de la même manière, en beaucoup plus complexe. Sous X, le module chargé du clavier est <kbd>XKB</kbd>. Comme Linux, XKB s'alimente à la source, aux <kbd>scan codes</kbd>. Et comme Linux, il dispose d'une table qui va permettre la conversion de ces <kbd>scan codes</kbd> en <kbd>key codes</kbd>. Seulement ce ne sont pas les mêmes correspondance, évidement <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/wink2.gif" title="Wink" alt="Wink" class="smiley-content"/>.
</p>
<p>
  Ainsi notre touche <span class="key">A</span>, a cette fois pour code <span class="keyCode">24</span>. Grâce à une table, <kbd>XKB</kbd> va ensuite transforme ce <kbd>key code</kbd> en un <kbd>key code symbolique</kbd>. La liste de ces valeurs peut être consultée dans le fichier <kbd>/usr/share/X11/xkb/keycodes/xfree86</kbd> où l'on trouve la ligne :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  &lt;AD01&gt; = &nbsp;24;
  </div>
  
  </div>
</p>
<p>
  L'intérêt du <kbd>key code symbolique</kbd> est qu'il permet de séparer d'un côté les spécificités d'un modèle de clavier, de l'autre, nous allons le voir, la disposition de ce clavier. Par exemple, pour un clavier de Mac, le <kbd>key code</kbd> de la touche <span class="key">A</span> est <kbd>20</kbd>, mais pour le mac, comme pour le PC, le <kbd>key code symbolique</kbd> est le même, à savoir <kbd>AD01</kbd>. Enfin j'utilise le terme symbolique car <kbd>AD01</kbd> n'est pas un chiffre en hexadécimal, mais bien un identifiant. Par exemple le <kbd>key code symbolique</kbd> de la touche <spam class="key">Alt</spam> est... <kbd>ALT</kbd> <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/smile.gif" title="Smiling" alt="Smiling" class="smiley-content"/>
</p>
<div class='inline-box note'>
  Petite information amusante, la disposition AZERTY, QWERTY & co, n'est en rien dictée par des impératifs ergonomique, bien au contraire. En effet, ces positions sont héritées des machines à écrire mécaniques, et l'objectif était de <b>réduire la vitesse de frappe</b> pour que les marteaux ne s'emmêlent pas... Il existe aujourd'hui des dispositions de clavier réellement ergonomiques, par exemple en suivant la méthode <a class='external' target='_blank' href='http://fr.wikipedia.org/wiki/Clavier_Dvorak' >Dvorak</a>. Ces dispositions exotiques sont bien évidement disponibles sous Xorg/Linux.
</div>
<p>
  Comme évoqué plus haut, le <kbd>key code symbolique</kbd> permet la séparation entre spécificité matérielles et disposition du clavier. Cela implique qu'il existe une seconde table de conversion qui elle fait le lien entre <kbd>key code symbolique</kbd> et un caractère ou contrôle. On appelle cela un <kbd>Key Sym</kbd>. Ainsi que le clavier soit celui d'un PC, d'un Mac, ou d'un Amiga, le <kbd>keySym</kbd> du <kbd>key code symbolique</kbd> <kbd>AD01</kbd> sera toujours <kbd>a</kbd>. On peut donc avoir un même fichier de description des positions pour un clavier de AZERTY de Mac et de PC.   
</p>
<p>
   D'ailleurs, lorsque sous Gnome vous allez dans le paramétrage du clavier, vous avez bien choisir <i>d'abord</i> un modèle, puis seulement ensuite, une disposition. Il en va de même dans le fichier <kbd>/etc/X11/xorg.conf</kbd> :
   
  <div class='code-block code-block-fragment'>
  <div class='container'>
  &nbsp; &nbsp;Section <span class="st0">&quot;InputDevice&quot;</span><br />
&nbsp; &nbsp; Identifier <span class="st0">&quot;Keyboard&quot;</span><br />
&nbsp; &nbsp; Driver <span class="st0">&quot;kbd&quot;</span><br />
&nbsp; &nbsp; Option <span class="st0">&quot;XkbModel&quot;</span> <span class="st0">&quot;pc104&quot;</span><br />
&nbsp; &nbsp; Option <span class="st0">&quot;XkbLayout&quot;</span> <span class="st0">&quot;fr&quot;</span><br />
&nbsp; &nbsp; Option <span class="st0">&quot;XkbOptions&quot;</span> <span class="st0">&quot;compose:rwin&quot;</span><br />
EndSection
  </div>
  
  </div>
</p>
<p>
  Ici le modèle physiques (la table <kbd>key codes / key codes symbolique</kbd> est celle d'un clavier générique <kbd>PC104</kbd>, et la disposition (la table <kbd>key code symbolique / key sym</kbd>, est celle d'un clavier AZERTY. 
</p>
<p>
  L'ensemble des fichiers responsables des dispositions de clavier est stocké dans le dossier <kbd>/usr/share/X11/xkb/symbols</kbd> et une liste des symboles, les <kbd>key syms</kbd> disponibles, peut être trouvée <a class='external' target='_blank' href='http://www.in-ulm.de/~mascheck/X11/keysyms.txt' >ici</a>.
</p>
<p>
  Maintenant, comme pour la console, il est possible de modifier la disposition du clavier, et là, plusieurs options sont disponibles. 
</p>


	<a name='chapter_3'></a>
  <h2>Utilisation de xmodmap</h2>
	
<p>
  <kbd>xmodmap</kbd> ne tombe pas du placard, c'est en fait l'outil d'origine pour modifier la disposition des touches et ce bien avant Xorg, à l'époque de <a class='external' target='_blank' href='http://www.xfree86.org/' >XFree86</a>. Et même si l'utilitaire est amené à disparaître au profit d'<kbd>xkb</kbd>, il reste pratique pour hacker rapidement un clavier.
</p>

<p>
  A titre d'exemple, nous allons créer un fichier <kbd>.xmodmap</kbd> permettant changer la ligne des chiffres sur un clavier QWERTY de sorte à rendre disponibles les accents comme sur un clavier AZERTY. En Qwerty les chifffres sont directement accessibles, les symboles étant liés à la touche <kbd>Shift</kbd>. En AZERTY ce sont les symboles qui sont directement accessibles, dont les accents, et les chiffres sont eux relégués au niveau du <kbd>Shift</kbd>.
</p>
<p>
  Notre "nouveau" clavier va donc mélanger les deux approches. La règles est de placer les symboles en premiers plans, de remplacer ceux des touches 2, 7, 9 et 0 par é, è, ç et à. On va aussi ajouter une touche d'accents circonflexes et trémas sur le keycode 49, transformer la touche WIN en touche AltGR et redéfinir les touches de directions. Cet exemple n'est pas pris au hasard, il s'agit juste de rendre le <a class='external' target='_blank' href='/node/1587' >clavier du netbook U810</a> utilisable en français. L'avantage ce cet exemple est qu'il est assez complet. 
</p>
<p>
  Dans le langage <kbd>xmodmap</kbd> cette modification se traduit comme cela :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="sy0">!</span> Refonte de la première ligne de touches<br />
keycode <span class="nu0">10</span> = exclam &nbsp; &nbsp; <span class="nu0">1</span><br />
keycode <span class="nu0">11</span> = eacute &nbsp; &nbsp; <span class="nu0">2</span> &nbsp; at<br />
keycode <span class="nu0">12</span> = numbersign <span class="nu0">3</span><br />
keycode <span class="nu0">13</span> = dollar &nbsp; &nbsp; <span class="nu0">4</span><br />
keycode <span class="nu0">14</span> = percent &nbsp; &nbsp;<span class="nu0">5</span><br />
keycode <span class="nu0">15</span> = asciicircum <span class="nu0">6</span><br />
keycode <span class="nu0">16</span> = egrave &nbsp; &nbsp; <span class="nu0">7</span> &nbsp; ampersand<br />
keycode <span class="nu0">17</span> = asterisk &nbsp; &nbsp;<span class="nu0">8</span><br />
keycode <span class="nu0">18</span> = ccedilla &nbsp; <span class="nu0">9</span> &nbsp; parenleft<br />
keycode <span class="nu0">19</span> = agrave &nbsp; &nbsp; <span class="nu0">0</span> &nbsp; parenright<br />
keycode <span class="nu0">9</span> &nbsp;= Tab &nbsp; &nbsp; &nbsp; &nbsp;Escape<br />
<br />
<span class="sy0">!</span> Activation <a target="blank" href="http://pwet.fr/man/linux/commandes/du"><span class="kw2">du</span></a> décorateur de caractères<br />
keycode <span class="nu0">49</span> = dead_circumflex dead_diaeresis asciitilde<br />
<br />
<span class="sy0">!</span> Utilisation de la touche WIN comme AltGR<br />
keycode <span class="nu0">115</span> = Mode_switch<br />
<a target="blank" href="http://pwet.fr/man/linux/commandes/clear"><span class="kw2">clear</span></a> mod5<br />
add mod5 = Mode_switch<br />
<br />
<span class="sy0">!</span> Redéfinition des touches de direction<br />
keycode <span class="nu0">60</span> = Up <a target="blank" href="http://pwet.fr/man/linux/commandes/less"><span class="kw2">less</span></a> greater<br />
keycode <span class="nu0">35</span> = Down bracketleft braceleft<br />
keycode <span class="nu0">34</span> = Left &nbsp;bracketright braceright<br />
keycode <span class="nu0">51</span> = Right backslash bar<br />
<br />
<span class="sy0">!</span> Transfert <a target="blank" href="http://pwet.fr/man/linux/commandes/du"><span class="kw2">du</span></a> . sur le touche de la ,<br />
keycode <span class="nu0">59</span> = coma &nbsp;period
  </div>
  <div class='caption'>contenu de monClavier.xmodmap</div>
  </div>
</p> 
<p>
  Nous retrouvons dans ce listing nos <kbd>key code</kbd> que vous pouvez retrouver grâce à l'utilitaire <kbd>xev</kbd> ou encore en utilisant la commande <kbd>xbindkeys -mk</kbd>. 
</p>
<p>
  Ensuite, nous avons une série de 1 à 4 <kbd>keySyms</kbd>. Le premier correspond à la touche pressée, le second à la même touche mais avec <kbd>Shift</kbd>, le troisième avec la touche <kbd>AltGr</kbd>, et le quatrième correspond à <kbd>Shift+AltGr</kbd>.
</p>
<p>
  Le keycode 49 est un peu spécial car faisant appel à ce que l'on appel les <kbd>touches mortes</kbd>. Une touche morte est une touche qui ne produit aucun symbole mais qui va altérer la prochaine touche frappée. Ici nous définissons la touche morte qui ajoute l'accent circonflexe, puis le trema avec le <kbD>Shift</kbd>. 
</p>
<p>
  Dernier point, la définition de la touche pour <kbd>Mode_Switch</kbd> qui n'est autre que ALTGR, sur la touche <kbd>Windows</kbd>.
</p>
<p>
Une fois que votre fichier est créé, il se charge très simplement par la commande

  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='command'><span class='prompt'>root#</span>xmodmap monClavier.xmodmap</div><div class='command'><span class='prompt'>root#</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>
<p>
  Enfin, vous pouvez à tout moment liste la disposition courante par la commande <kbd>xmodmap -pke</kbd>.
</p>
<p>
Maintenant que nous maîtrisons la méthode des anciens, passons à celle des modernes, via <kbd>xkb</kbd></p>





	<a name='chapter_4'></a>
  <h2>utilisation de xkb</h2>
	

<h3>Principe</h3>
<p>
   XKB est le pilote X11 qui gère le clavier. Il est donc possible d'écrire des configurations spécialement pour celui-ci, sans passer par XModMap et ainsi intégrer définitivement un nouveau clavier au système. 
</p>

<p>
  XKB permet de définir une correspondance entre les <kbd>keycodes</kbd> (ex. 176, 134) et des symboles (ex. ESC, AE01). Ensuite entre des symboles et une série de caractères correspondant à la touche "libre", via Shift, via AltGr puis via Shift+AltGr. Et enfin, de manière plus anecdotique, de définir une correspondance entre les symboles et une géométrie du clavier permettant d'en obtenir un aperçu visuel à l'écran. 
</p>
<p>
  La configuration de XKB est stockée dans le dossier <kbd>/usr/share/X11/xkb</kbd>. Les fichiers de <kbd>keycodes/symboles</kbd> sont placés dans le sous-dossier <kbd>keycodes</kbd>. Les claviers de PC sont (je pense) gérés par le fichier <kbd>xfree98</kbD>.
</p>
<p>
Les fichiers de correspondance symboles/caractères sont quant à eux dans le sous-dossier <kbd>symbols</kbd>. On y trouve le fichier <kbd>fr</kbd> responsable du clavier AZERTY. Si l'on regarde de plus près ces fichiers, on constate deux choses. Tout d'abord ils font références à d'autre fichiers. Dans le cas du <kbd>fr</kbd> c'est <kbd>latin</kbD>. La définition du clavier français n'est donc qu'un "patch" de la version latine commune avec l'anglais. 
</p>
<p>
  le second constat est qu'un fichier contient plusieurs définitions s'incluant généralement les unes les autres. Ces sections représente des "variantes" de la version "basic". Ces variantes sont utilisable sous le nom <kbd>principal(variante)</kbd>.  Ainsi le clavier français, variante OSS, est appelée <kbd>fr(oss)</kbd>. 
</p>
<p>
  Enfin, les fichiers associant symboles et position physique des touches sont disponibles dans le dossier <kbd>geometry</kbd>. Ainsi, deux clavier de type PC, peuvent avoir une géométrie différente. 
</p>  

<h3>Définition d'une variante</h3>
<p>
  Le cas de l'U810 est, d'un point de vue <kbd>keycode</kbd>, un clavier de PC standard. Notre nouveau clavier n'est donc qu'une "variante" du clavier anglais (gb). Nous allons donc modifier le fichier responsable de la translation <kbd>key codes symboliques / key syms</kbd> de la disposition <kbd>gb</kbd>. Pour cela, il faut cette fois éditer le fichier <kbd>/usr/share/X11/xkb/symbols/gb</kbd> pour y ajouter, par exemple à la fin, la définition de notre variante :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  &nbsp; partial alphanumeric_keys<br />
xkb_symbols <span class="st0">&quot;fujitsu_u810&quot;</span> <span class="br0">&#123;</span><br />
<br />
&nbsp; &nbsp; include <span class="st0">&quot;gb(basic)&quot;</span><br />
<br />
&nbsp; &nbsp; name<span class="br0">&#91;</span>Group1<span class="br0">&#93;</span><span class="sy0">=</span><span class="st0">&quot;France - Fujitsu U810&quot;</span>;<br />
<br />
<br />
&nbsp; &nbsp; key &lt;AE01&gt; &nbsp;<span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; exclam, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">1</span><span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key &lt;AE02&gt; &nbsp;<span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; eacute, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">2</span>, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; at, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AE <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key &lt;AE03&gt; &nbsp;<span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; numbersign, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">3</span><span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key &lt;AE04&gt; &nbsp;<span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; dollar, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">4</span><span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key &lt;AE05&gt; &nbsp;<span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; percent, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">5</span><span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key &lt;AE06&gt; &nbsp;<span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; asciicircum, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">6</span><span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key &lt;AE07&gt; &nbsp;<span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; egrave, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">7</span>, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ampersand, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AE <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key &lt;AE08&gt; &nbsp;<span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; asterisk, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">8</span><span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key &lt;AE09&gt; &nbsp;<span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; ccedilla, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">9</span>, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; parenleft, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AE <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key &lt;AE10&gt; &nbsp;<span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; agrave, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">0</span>, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; parenright, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AE <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key &lt;TLDE&gt; &nbsp;<span class="br0">&#123;</span> <span class="br0">&#91;</span> dead_circumflex, &nbsp;dead_diaeresis <span class="br0">&#93;</span> <span class="br0">&#125;</span>; &nbsp; &nbsp;<br />
<br />
&nbsp; &nbsp; key &lt;LWIN&gt; <span class="br0">&#123;</span> <span class="br0">&#91;</span>ISO_Level3_Shift<span class="br0">&#93;</span><span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key &lt;ESC&gt; &nbsp; &nbsp;<span class="br0">&#123;</span> <span class="br0">&#91;</span>Tab,Escape,Tab<span class="br0">&#93;</span><span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key &lt;AB09&gt; &nbsp;<span class="br0">&#123;</span> <span class="br0">&#91;</span> Up, less, greater<span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key &lt;AD12&gt; &nbsp;<span class="br0">&#123;</span> <span class="br0">&#91;</span> Down, bracketright, braceleft<span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key &lt;AD11&gt; &nbsp;<span class="br0">&#123;</span> <span class="br0">&#91;</span> Left, bracketleft, braceright<span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key &lt;BKSL&gt; &nbsp;<span class="br0">&#123;</span> <span class="br0">&#91;</span> Right,backslash, bar <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key &lt;AB08&gt; &nbsp;<span class="br0">&#123;</span> <span class="br0">&#91;</span> coma, period <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
<span class="br0">&#125;</span>;
  </div>
  <div class='caption'>/usr/share/X11/xkb/symbols/u810</div>
  </div>
</p>
<p>
  On remarque d'emblée que mise à part la syntaxe différente, il existe de grosse similitude avec le langage de <kbd>xmodmap</kbd>. La seule différence tient à ce que l'on n'utilise pas directement les <kbd>key codes</kbd>, mais le <kbd>key codes symboliques</kbd>. Pour le reste, c'est exactement la même chose qu'avec <kbd>xmodmap</kbd> avec une définition plus simple de la touche <kbd>AltGr</kbd> en passant par le symbole <kbd>ISO_Level3_Shift</kbd>.
</p>
<p>
  Pour être sur de ne rien avoir écrit de travers, vous pouvez compiler ce code :

  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='command'><span class='prompt'>gaston$</span>xkbcomp /usr/share/X11/xkb/symbols/u810</div><div class='command'><span class='prompt'>gaston$</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>
<p>
   Une fois notre variante ajoutée elle est utilisable. Pour cela, lancez la commande suivante
   
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='co0'># changer la disposition et la variante</div><div class='command'><span class='prompt'>root#</span>setxkbmap -layout gb -variant fujitsu_u810</div><div class='result'>&nbsp;</div><div class='co0'># revenir à la variante française</div><div class='command'><span class='prompt'>root#</span>setxkbmap -layout fr</div><div class='command'><span class='prompt'>root#</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>
<p>
  Normalement cela devrait fonctionner directement. Pour que cela soit automatiquement pris en compte au démarrage de X, il faut simplement modifier <kbd>/etc/X11/xorg.conf</kbd>, localiser l'enregistrement <kbd>InputDevice</kbd> lié au clavier modifier comme suit :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  Section <span class="st0">&quot;InputDevice&quot;</span><br />
&nbsp; &nbsp; Identifier <span class="st0">&quot;Keyboard&quot;</span><br />
&nbsp; &nbsp; Driver <span class="st0">&quot;kbd&quot;</span><br />
&nbsp; &nbsp; Option <span class="st0">&quot;XkbModel&quot;</span> <span class="st0">&quot;pc105&quot;</span><br />
&nbsp; &nbsp; Option <span class="st0">&quot;XkbLayout&quot;</span> <span class="st0">&quot;gb&quot;</span><br />
&nbsp; &nbsp; Option <span class="st0">&quot;XkbVariant&quot;</span> <span class="st0">&quot;fujitsu_u810&quot;</span><br />
&nbsp; &nbsp; Option <span class="st0">&quot;XkbOptions&quot;</span> <span class="st0">&quot;compose:rwin&quot;</span><br />
EndSection
  </div>
  
  </div>
</p>
<p>
  Maintenant un problème reste entier, celui de l'utilisation d'un clavier "normal". Si ce clavier est connecté directement par le port USB, il suffit de le trouver par un <kbd>lsusb</kbd> et de chercher la correspondance dans <kbd>/dev/input/by-id</kbd>. Par exemple pour mon enermax, c'est <kbd>/dev/input/by-id/usb-0566_3108-event-kbd</kbd>. Ensuite il faut simplement dupliquer votre entrée existante pour le clavier dans <kbd>/etc/X11/xorg.conf</kbd> et la modifier comme suit :
    
  <div class='code-block code-block-fragment'>
  <div class='container'>
  Section <span class="st0">&quot;InputDevice&quot;</span><br />
&nbsp; &nbsp; Identifier <span class="st0">&quot;Keyboard&quot;</span><br />
&nbsp; &nbsp; Driver <span class="st0">&quot;kbd&quot;</span><br />
&nbsp; &nbsp; Option <span class="st0">&quot;Device&quot;</span> <span class="st0">&quot;/dev/input/by-id/usb-0566_3108-event-kbd&quot;</span><br />
&nbsp; &nbsp; Option <span class="st0">&quot;XkbModel&quot;</span> <span class="st0">&quot;pc105&quot;</span><br />
&nbsp; &nbsp; Option <span class="st0">&quot;XkbLayout&quot;</span> <span class="st0">&quot;fr&quot;</span><br />
&nbsp; &nbsp; Option <span class="st0">&quot;XkbOptions&quot;</span> <span class="st0">&quot;compose:rwin&quot;</span><br />
EndSection
  </div>
  
  </div>
</p>
<p>
  Ceci fait, le clavier d'origine fonctionne avec sa variante, et le nouveau clavier en mode classique français. Bien évidement il est possible d'inverser. 
</p>
<p>
  Le problème qui nous reste concerne des outils comme <kbd>synergy</kbd> qui se base sur le layout/variant courant. Dans ce cas là, il faut pouvoir basculer rapidement d'un clavier à l'autre en utilisant par exemple l'applet <kbd>Indicateur de Claviers</kbd> de Gnome, et donc ajouter notre variante dans <kbd>Système/Préférences/Clavier/Agencements</kbd>. 
</p>
<p> 
  Pour que Gnome connaisse notre variante, il faut la déclarer dans le fichier <kbd>/usr/share/X11/xkb/rules/xorg.xml</kbd>. Ouvrez-le et cherchez le clavier <kbd>gb</kbd>. Ajoutez ensuite dans la section <kbd>variantlist</kbd>, notre variante U810 comme suit :
    
  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="sc3"><span class="re1">&lt;variantList<span class="re2">&gt;</span></span></span><br />
&nbsp; <span class="sc3"><span class="re1">&lt;variant<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;configItem<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;name<span class="re2">&gt;</span></span></span>fujitsu_u810<span class="sc3"><span class="re1">&lt;/name<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;description<span class="re2">&gt;</span></span></span>Fujitsu U810<span class="sc3"><span class="re1">&lt;/description<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;/configItem<span class="re2">&gt;</span></span></span><br />
&nbsp; <span class="sc3"><span class="re1">&lt;/variant<span class="re2">&gt;</span></span></span><br />
&nbsp; ...<br />
<span class="sc3"><span class="re1">&lt;/variantList<span class="re2">&gt;</span></span></span>
  </div>
  
  </div>
    </p>
<p>
  Ceci fait, nous allons maintenant pouvoir ajouter au tableau de bord Gnome l'applet <kbd>Indicateur de Claviers</kbd> et basculer d'une disposition à l'autre en cliquant dessus. 
</p>


	<a name='chapter_5'></a>
  <h2>Définition d'une disposition</h2>
	
<p>
  Un des problèmes posé par l'approche "variante" est que XKB permet de redéfinir une touche mais pas de réinitialiser une définition. Ainsi dans le cas de l'U810, la touche <kbd>flèche haut</kbd> est connectée au symbole <kbd>AB09</kbd>. Sur un clavier de PC normal, ce symbole correspond à la touche <kbd>colon,      slash, periodcentered,   division</kbd>.
</p>
<p> Du coup, si je place dans mon fichier <kbd>fr</kbd> une simple variante en redéfinissant le comportement de la touche <kbd>AB09</kbd> par un <kbd>key <AB09> { [        Up ] }</kbd>, les anciens comportement avec SHIFT et ALTGR restent présents et je ne peux pas sélectionner un texte avec SHIFT+flèches.</p>
<p>
 La solution est donc de créer une nouvelle disposition plutôt qu'une variante sur une disposition existante. 
</p>
<p>
  Le clavier de l'U810 étant le même qu'un PC standard du point de vue des keycodes, nous ne touchons donc qu'à la table des symboles en créant la notre dans un fichier <kbd>symbols/U810</kbd> :
   
  <div class='code-block code-block-fragment'>
  <div class='container'>
  partial default alphanumeric_keys<br />
xkb_symbols <span class="st0">&quot;U810&quot;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; include <span class="st0">&quot;level3(ralt_switch)&quot;</span><br />
&nbsp; &nbsp; name<span class="br0">&#91;</span>Group1<span class="br0">&#93;</span>=<span class="st0">&quot;France&quot;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>PGDN<span class="sy0">&gt;</span> &nbsp; &nbsp;<span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; XF86KbdLightOnOff &nbsp; <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>PGUP<span class="sy0">&gt;</span> &nbsp; &nbsp;<span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; Menu &nbsp; <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>K6B<span class="sy0">&gt;</span> &nbsp; &nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; XF86RotateWindows &nbsp; <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>LALT<span class="sy0">&gt;</span> &nbsp; &nbsp;<span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; XF86Sleep &nbsp; <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>OUTP<span class="sy0">&gt;</span> &nbsp; &nbsp;<span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; XF86Display <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>ESC<span class="sy0">&gt;</span> &nbsp; &nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; Tab, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Escape, &nbsp; &nbsp; &nbsp;Tab &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AE01<span class="sy0">&gt;</span> &nbsp; &nbsp;<span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; exclam, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">1</span>, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; exclam &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AE02<span class="sy0">&gt;</span> &nbsp; &nbsp;<span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; eacute, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">2</span>, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; at &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AE03<span class="sy0">&gt;</span> &nbsp; &nbsp;<span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; quotedbl, &nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">3</span>, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; numbersign &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AE04<span class="sy0">&gt;</span> &nbsp; &nbsp;<span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; apostrophe, &nbsp; &nbsp; &nbsp;<span class="nu0">4</span>, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; dollar &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AE05<span class="sy0">&gt;</span> &nbsp; &nbsp;<span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; percent, &nbsp; &nbsp; &nbsp; &nbsp; <span class="nu0">5</span>, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <a target="blank" href="http://pwet.fr/man/linux/commandes/less"><span class="kw2">less</span></a> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AE06<span class="sy0">&gt;</span> &nbsp; &nbsp;<span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; tilde, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="nu0">6</span>, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; greater &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AE07<span class="sy0">&gt;</span> &nbsp; &nbsp;<span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; egrave, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">7</span>, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ampersand &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AE08<span class="sy0">&gt;</span> &nbsp; &nbsp;<span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; asterisk, &nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">8</span>, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; asterisk &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AE09<span class="sy0">&gt;</span> &nbsp; &nbsp;<span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; ccedilla, &nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">9</span>, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; braceleft, &nbsp; &nbsp; &nbsp; &nbsp;parenleft &nbsp; <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AE10<span class="sy0">&gt;</span> &nbsp; &nbsp;<span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; agrave, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="nu0">0</span>, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; braceright, &nbsp; &nbsp; &nbsp; parenright &nbsp;<span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
<br />
<br />
<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AD01<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; a, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; A, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ae, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; AE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AD02<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; z, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Z, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;guillemotleft, &nbsp; &nbsp;<a target="blank" href="http://pwet.fr/man/linux/commandes/less"><span class="kw2">less</span></a> &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AD03<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; e, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; E, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;EuroSign, &nbsp; &nbsp; &nbsp; &nbsp; cent &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AD04<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; r, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; R, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;paragraph, &nbsp; &nbsp; &nbsp; &nbsp;registered &nbsp;<span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AD05<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; t, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; T, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;tslash, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Tslash &nbsp; &nbsp; &nbsp;<span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AD06<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; y, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Y, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;leftarrow, &nbsp; &nbsp; &nbsp; &nbsp;yen &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AD07<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; u, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; U, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ugrave &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AD08<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; i, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; I, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;rightarrow, &nbsp; &nbsp; &nbsp; idotless &nbsp; &nbsp;<span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AD09<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; o, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; O, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;bracketleft, &nbsp; &nbsp; &nbsp; OE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AD10<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; p, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; P, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;bracketright, &nbsp; &nbsp; THORN &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AC11<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; apostrophe, &nbsp; &nbsp;quotedbl &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
<br />
<br />
<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AC01<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; q, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Q, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; at, &nbsp;Greek_OMEGA <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AC02<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; s, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;S, &nbsp; &nbsp; &nbsp; ssharp, &nbsp; &nbsp; &nbsp;section <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AC03<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; d, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;D, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;eth, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ETH <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AC04<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; f, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;F, &nbsp; &nbsp; &nbsp;dstroke, &nbsp;ordfeminine <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AC05<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; g, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;G, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;eng, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;ENG <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AC06<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; h, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;H, &nbsp; &nbsp; &nbsp;hstroke, &nbsp; &nbsp; &nbsp;Hstroke <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AC07<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; j, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;J <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AC08<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; k, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;K, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;kra, &nbsp; &nbsp;ampersand <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AC09<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; l, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;L, &nbsp; &nbsp; &nbsp;lstroke, &nbsp; &nbsp; &nbsp;Lstroke <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AC10<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; m, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;M, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; mu, &nbsp; &nbsp;masculine <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
<br />
<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AB01<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; <a target="blank" href="http://pwet.fr/man/linux/commandes/w"><span class="kw2">w</span></a>, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;W, &nbsp; &nbsp; &nbsp;lstroke, &nbsp; &nbsp; &nbsp;Lstroke <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AB02<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; x, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;X, guillemotright, &nbsp; &nbsp;greater <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AB03<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; c, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;C, &nbsp; &nbsp; &nbsp; &nbsp; cent, &nbsp; &nbsp;copyright <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AB04<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; v, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;V, leftdoublequotemark, leftsinglequotemark <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AB05<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; b, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;B, rightdoublequotemark, rightsinglequotemark <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AB06<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp; n, &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;N &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AB07<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; comma, &nbsp; period, &nbsp; dead_acute, dead_doubleacute <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AB08<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> semicolon, &nbsp; &nbsp;colon, dead_acute, dead_doubleacute <span class="br0">&#93;</span> <span class="br0">&#125;</span>; &nbsp;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AB09<span class="sy0">&gt;</span> <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; &nbsp; &nbsp;Up &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AB10<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; slash, &nbsp; &nbsp;question &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>LWIN<span class="sy0">&gt;</span> <span class="br0">&#123;</span> <span class="br0">&#91;</span>ISO_Level3_Shift<span class="br0">&#93;</span><span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>TLDE<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span>dead_circumflex, dead_diaeresis, asciitilde &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AE11<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; minus, underscore, &nbsp; &nbsp;backslash, questiondown &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AE12<span class="sy0">&gt;</span>&nbsp; <span class="br0">&#123;</span> <span class="br0">&#91;</span> &nbsp; &nbsp; equal, &nbsp; &nbsp; &nbsp; plus, dead_cedilla, &nbsp;dead_ogonek &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AD11<span class="sy0">&gt;</span> <span class="br0">&#123;</span> <span class="br0">&#91;</span> Left &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>AD12<span class="sy0">&gt;</span> <span class="br0">&#123;</span> <span class="br0">&#91;</span> Down &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>BKSL<span class="sy0">&gt;</span> <span class="br0">&#123;</span> <span class="br0">&#91;</span> Right &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
<br />
<br />
&nbsp; &nbsp; key &nbsp; <span class="sy0">&lt;</span>UP<span class="sy0">&gt;</span> <span class="br0">&#123;</span>&nbsp; <span class="br0">&#91;</span> &nbsp;Prior&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>LEFT<span class="sy0">&gt;</span> <span class="br0">&#123;</span>&nbsp; <span class="br0">&#91;</span> &nbsp;Home &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>DOWN<span class="sy0">&gt;</span> <span class="br0">&#123;</span>&nbsp; <span class="br0">&#91;</span> &nbsp;Next &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; key <span class="sy0">&lt;</span>RGHT<span class="sy0">&gt;</span> <span class="br0">&#123;</span>&nbsp; <span class="br0">&#91;</span> &nbsp;End&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#93;</span> <span class="br0">&#125;</span>;<br />
&nbsp;<span class="br0">&#125;</span>;
  </div>
  
  </div>
</p>
<p>
  La définition est plus volumineuse que notre version "layout", et pour cause, il s'agit cette fois d'une redéfinition propre et complète du clavier. Pour le reste, la syntaxe en elle-même n'a rien de nouveau maintenant. 
</p>
<p>
  Ce qui l'est en revanche, c'est qu'il va falloir modifier <kbd>/usr/share/X11/xkb/rules/xorg.xml</kbd> pour supprimer notre variante et ajouter notre disposition. Cela se fait simplement en ajoutant dans le tag <kbd>layouts</kbd> l'entrée suivante :
  
  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="sc3"><span class="re1">&lt;layout<span class="re2">&gt;</span></span></span><br />
&nbsp; <span class="sc3"><span class="re1">&lt;configItem<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;name<span class="re2">&gt;</span></span></span>U810<span class="sc3"><span class="re1">&lt;/name<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;shortDescription<span class="re2">&gt;</span></span></span>Fra<span class="sc3"><span class="re1">&lt;/shortDescription<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;description<span class="re2">&gt;</span></span></span>French U810<span class="sc3"><span class="re1">&lt;/description<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;languageList<span class="re2">&gt;</span></span></span><span class="sc3"><span class="re1">&lt;iso639Id<span class="re2">&gt;</span></span></span>fra<span class="sc3"><span class="re1">&lt;/iso639Id<span class="re2">&gt;</span></span></span><span class="sc3"><span class="re1">&lt;/languageList<span class="re2">&gt;</span></span></span><br />
&nbsp; <span class="sc3"><span class="re1">&lt;/configItem<span class="re2">&gt;</span></span></span><br />
&nbsp; <span class="sc3"><span class="re1">&lt;variantList</span><span class="re2">/&gt;</span></span><br />
<span class="sc3"><span class="re1">&lt;/layout<span class="re2">&gt;</span></span></span>
  </div>
  
  </div>
</p>
<p>
  Cette fois nous ne sommes plus une variante de la disposition "gb" mais une disposition <kbd>French U810</kbd> appartenant au groupe de langue française. La commande de bascule est donc cette fois :
   
  <div class='code-block code-block-traces'>
  <div class='container'>
  <div class='co0'># passer à la nouvelle disposition</div><div class='command'><span class='prompt'>root#</span>setxkbmap -layout U810</div><div class='result'>&nbsp;</div><div class='co0'># revenir à la variante française</div><div class='command'><span class='prompt'>root#</span>setxkbmap -layout fr</div><div class='command'><span class='prompt'>root#</span><span class='cursor'>&nbsp;</span></div>
  </div>
  
  </div>
</p>
<p>
 Pour <kbd>xorg.conf</kbd> la syntaxe est la même sauf que nous oublions l'option "xkbVariant" :
 
  <div class='code-block code-block-fragment'>
  <div class='container'>
  Section <span class="st0">&quot;InputDevice&quot;</span><br />
&nbsp; &nbsp; Identifier <span class="st0">&quot;Keyboard&quot;</span><br />
&nbsp; &nbsp; Driver <span class="st0">&quot;kbd&quot;</span><br />
&nbsp; &nbsp; Option <span class="st0">&quot;XkbModel&quot;</span> <span class="st0">&quot;pc105&quot;</span><br />
&nbsp; &nbsp; Option <span class="st0">&quot;XkbLayout&quot;</span> <span class="st0">&quot;U810&quot;</span><br />
&nbsp; &nbsp; Option <span class="st0">&quot;XkbOptions&quot;</span> <span class="st0">&quot;compose:rwin&quot;</span><br />
EndSection
  </div>
  
  </div>
</p>
<p>
  Enfin ayant modifie <kbd>xorg.xml</kbd>, Gnome est capable de retrouver la nouvelle disposition mais de manière un peu détournée. Lorsque vous ajouter un nouvel agencement, allez dans l'onglet <kbd>Par langue</kbd>, sélectionnez <kbd>Français</kbd> et dans la seconde liste vous devriez trouver <kbd>French U810</kbd>. 
</p>


	<a name='chapter_6'></a>
  <h2>Ajout d'une géométrie</h2>
	
<p>
  Là c'est un peu le gadget. En effet, lorsque l'on choisi une disposition avec Gnome, s'affiche l'image du clavier. Il est possible de créer sa propre image correspondant à la réalité du clavier physique. Pour cela, créer le fichier <kbd>geometry/U810</kbd> suivant :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  partial hidden xkb_geometry <span class="st0">&quot;basic&quot;</span> <span class="br0">&#123;</span><br />
<br />
&nbsp; description <span class="sy0">=</span> <span class="st0">&quot;Fujitsu U810 Keyboard&quot;</span>;<br />
&nbsp; width <span class="sy0">=</span> <span class="nu0">396</span>;<br />
&nbsp; height <span class="sy0">=</span> <span class="nu0">106</span>;<br />
<br />
&nbsp; shape.<span class="me1">cornerRadius</span> <span class="sy0">=</span> <span class="nu0">1</span>;<br />
&nbsp; shape <span class="st0">&quot;NORM&quot;</span> <span class="br0">&#123;</span> <span class="br0">&#123;</span> <span class="br0">&#91;</span><span class="nu0">24</span>, <span class="nu0">22</span><span class="br0">&#93;</span> <span class="br0">&#125;</span>, <span class="br0">&#123;</span> <span class="br0">&#91;</span><span class="nu0">2</span>, <span class="nu0">1</span><span class="br0">&#93;</span>, <span class="br0">&#91;</span><span class="nu0">22</span>, <span class="nu0">20</span><span class="br0">&#93;</span> <span class="br0">&#125;</span> <span class="br0">&#125;</span>;<br />
&nbsp; shape <span class="st0">&quot;SMALL&quot;</span> <span class="br0">&#123;</span> <span class="br0">&#123;</span> <span class="br0">&#91;</span><span class="nu0">22</span>, <span class="nu0">20</span><span class="br0">&#93;</span> <span class="br0">&#125;</span>, <span class="br0">&#123;</span> <span class="br0">&#91;</span><span class="nu0">2</span>, <span class="nu0">1</span><span class="br0">&#93;</span>, <span class="br0">&#91;</span><span class="nu0">20</span>, <span class="nu0">18</span><span class="br0">&#93;</span> <span class="br0">&#125;</span> <span class="br0">&#125;</span>;<br />
&nbsp; shape <span class="st0">&quot;SPCE&quot;</span> <span class="br0">&#123;</span> <span class="br0">&#123;</span> <span class="br0">&#91;</span><span class="nu0">42</span>, <span class="nu0">20</span><span class="br0">&#93;</span> <span class="br0">&#125;</span>, <span class="br0">&#123;</span> <span class="br0">&#91;</span><span class="nu0">2</span>, <span class="nu0">1</span><span class="br0">&#93;</span>, <span class="br0">&#91;</span><span class="nu0">40</span>, <span class="nu0">18</span><span class="br0">&#93;</span> <span class="br0">&#125;</span> <span class="br0">&#125;</span>;<br />
<br />
&nbsp; text.<span class="me1">color</span> <span class="sy0">=</span> <span class="st0">&quot;black&quot;</span>;<br />
<br />
&nbsp; section.<span class="me1">left</span> <span class="sy0">=</span> <span class="nu0">1</span>;<br />
&nbsp; row.<span class="me1">left</span> <span class="sy0">=</span> <span class="nu0">1</span>;<br />
&nbsp; key.<span class="me1">shape</span> <span class="sy0">=</span> <span class="st0">&quot;NORM&quot;</span>;<br />
&nbsp; key.<span class="me1">gap</span> <span class="sy0">=</span> <span class="nu0">1</span>;<br />
<br />
&nbsp; section <span class="st0">&quot;Alphanumeric&quot;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; top <span class="sy0">=</span> <span class="nu0">1</span>;<br />
&nbsp; &nbsp; row <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; top <span class="sy0">=</span> <span class="nu0">1</span>;<br />
&nbsp; &nbsp; &nbsp; keys <span class="br0">&#123;</span> <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span> &lt;ESC&gt;, <span class="st0">&quot;SMALL&quot;</span> <span class="br0">&#125;</span>, <span class="br0">&#123;</span>&lt;AE01&gt;, <span class="st0">&quot;SMALL&quot;</span> <span class="br0">&#125;</span>, <span class="br0">&#123;</span>&lt;AE02&gt;, <span class="st0">&quot;SMALL&quot;</span> <span class="br0">&#125;</span>, <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>&lt;AE03&gt;, <span class="st0">&quot;SMALL&quot;</span> <span class="br0">&#125;</span>, <span class="br0">&#123;</span>&lt;AE04&gt;, <span class="st0">&quot;SMALL&quot;</span> <span class="br0">&#125;</span>, <span class="br0">&#123;</span>&lt;AE05&gt;, <span class="st0">&quot;SMALL&quot;</span> <span class="br0">&#125;</span>, <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>&lt;AE06&gt;, <span class="st0">&quot;SMALL&quot;</span> <span class="br0">&#125;</span>, <span class="br0">&#123;</span>&lt;AE07&gt;, <span class="st0">&quot;SMALL&quot;</span> <span class="br0">&#125;</span>, <span class="br0">&#123;</span>&lt;AE08&gt;, <span class="st0">&quot;SMALL&quot;</span> <span class="br0">&#125;</span>, <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>&lt;AE09&gt;, <span class="st0">&quot;SMALL&quot;</span> <span class="br0">&#125;</span>, <span class="br0">&#123;</span>&lt;AE10&gt;, <span class="st0">&quot;SMALL&quot;</span> <span class="br0">&#125;</span>, <span class="br0">&#123;</span>&lt;BKSP&gt;, <span class="st0">&quot;SMALL&quot;</span> <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; row <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; top <span class="sy0">=</span> <span class="nu0">21</span>;<br />
&nbsp; &nbsp; &nbsp; keys <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;AD01&gt;, &lt;AD02&gt;, &lt;AD03&gt;, &lt;AD04&gt;, &lt;AD05&gt;,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;AD06&gt;, &lt;AD07&gt;, &lt;AD08&gt;, &lt;AD09&gt;, &lt;AD10&gt;,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;AC11&gt;<br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; row <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; top <span class="sy0">=</span> <span class="nu0">43</span>;<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;left <span class="sy0">=</span> <span class="nu0">4</span>;<br />
&nbsp; &nbsp; &nbsp; keys <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;AC01&gt;, &lt;AC02&gt;, &lt;AC03&gt;, &lt;AC04&gt;, &lt;AC05&gt;,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;AC06&gt;, &lt;AC07&gt;, &lt;AC08&gt;, &lt;AC09&gt;, &lt;AC10&gt;, <br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;RTRN&gt;<br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; row <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; top <span class="sy0">=</span> <span class="nu0">65</span>;<br />
&nbsp; &nbsp; &nbsp; keys <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span> &lt;LFSH&gt;, <span class="st0">&quot;Shift&quot;</span> <span class="br0">&#125;</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;AB01&gt;, &lt;AB02&gt;, &lt;AB03&gt;, &lt;AB04&gt;, &lt;AB05&gt;,<br />
&nbsp; &nbsp; &nbsp; &nbsp; &lt;AB06&gt;, &lt;AB07&gt;, &lt;AB08&gt;, &lt;AB09&gt;, &lt;AB10&gt;<br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; row <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; top <span class="sy0">=</span> <span class="nu0">87</span>;<br />
&nbsp; &nbsp; &nbsp; keys <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>&lt;LCTL&gt;, <span class="st0">&quot;SMALL&quot;</span> <span class="br0">&#125;</span>, <span class="br0">&#123;</span>&lt;FN&gt;, <span class="st0">&quot;SMALL&quot;</span> <span class="br0">&#125;</span>, <span class="br0">&#123;</span>&lt;LWIN&gt;, <span class="st0">&quot;SMALL&quot;</span> <span class="br0">&#125;</span>, <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>&lt;LALT&gt;, <span class="st0">&quot;SMALL&quot;</span> <span class="br0">&#125;</span>, <span class="br0">&#123;</span>&lt;TLDE&gt;, <span class="st0">&quot;SMALL&quot;</span> <span class="br0">&#125;</span>, <span class="br0">&#123;</span>&lt;SPCE&gt;, <span class="st0">&quot;SPCE&quot;</span> <span class="br0">&#125;</span>, <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>&lt;AE11&gt;, <span class="st0">&quot;SMALL&quot;</span> <span class="br0">&#125;</span>, <span class="br0">&#123;</span>&lt;AE12&gt;, <span class="st0">&quot;SMALL&quot;</span> <span class="br0">&#125;</span>, <span class="br0">&#123;</span>&lt;AD11&gt;, <span class="st0">&quot;SMALL&quot;</span> <span class="br0">&#125;</span>, <br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>&lt;AD12&gt;, <span class="st0">&quot;SMALL&quot;</span> <span class="br0">&#125;</span>, <span class="br0">&#123;</span>&lt;BKSL&gt;, <span class="st0">&quot;SMALL&quot;</span> <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>;<br />
&nbsp; &nbsp; <span class="br0">&#125;</span>;<br />
&nbsp; <span class="br0">&#125;</span>;<br />
<br />
<span class="br0">&#125;</span>;
  </div>
  
  </div>
</p>
<p>
  Ca fait un peu peur la première fois mais c'est en réalité assez simple. On définit ici une image de 396x106 pixels. Ensuite vient la définition de trois formes de touches (normales, petites et barre d'espace). Le premier groupe est la taille, le second et le troisième définissent un sous-rectangle permettant de représenter la perspective de la touche. 
</p>
<p>
  Ensuite on passe à la définition du clavier ligne par ligne (row) en indiquant à chaque fois la propriété <kbd>top</kbd> de la ligne en pixels. Pour la première lignes toutes les touches ont l'attribut <kbd>small</kbd>, pour la suivante, aucun attribut n'est spécifié, c'est donc <kbd>norm</kbd> qui est utilisé, et ainsi de suite. Les codes entres &lt; et &gt; sont les mêmes symboles utilisés dans la définition du layout. 
</p>
<p>
 Une fois notre clavier dessiné, il faut le déclarer. Tout d'abord dans <kbd>rules/base.xml</kbd> en ajoutant cette fois un <kbd>model</kbd> :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  <span class="sc3"><span class="re1">&lt;model<span class="re2">&gt;</span></span></span><br />
&nbsp; <span class="sc3"><span class="re1">&lt;configItem<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;name<span class="re2">&gt;</span></span></span>U810<span class="sc3"><span class="re1">&lt;/name<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;description<span class="re2">&gt;</span></span></span>U810 keyboard<span class="sc3"><span class="re1">&lt;/description<span class="re2">&gt;</span></span></span><br />
&nbsp; &nbsp; <span class="sc3"><span class="re1">&lt;vendor<span class="re2">&gt;</span></span></span>Fujitsu<span class="sc3"><span class="re1">&lt;/vendor<span class="re2">&gt;</span></span></span><br />
&nbsp; <span class="sc3"><span class="re1">&lt;/configItem<span class="re2">&gt;</span></span></span><br />
<span class="sc3"><span class="re1">&lt;/model<span class="re2">&gt;</span></span></span>
  </div>
  
  </div>
</p>
<p>
  Ensuite, ça se corse un peu, il faut modifier le fichier <kbd>rules/base</kbd>, recherche la ligne <kbd>! model		=	geometry</kbd>, et avant la dernière ligne <kbd>*		=       pc(pc104)</kbd>, insérez la ligne <kbd>U810		= 	U810(basic)</kbd>. 
</p>
<p>
  Enfin, dans le fichier <kbd>geometry.dir</kbd>, il faut rajouter :

  <div class='code-block code-block-fragment'>
  <div class='container'>
  -d------ -------- U810<span class="br0">&#40;</span>basic<span class="br0">&#41;</span>
  </div>
  
  </div>
</p>
<p>
<image file="gnome_xkb.png"/>
  Voilà, c'est terminé, un coup de redémarrage de X, allez dans le panneau de configuration du clavier, et dans les modèles de clavier, sélectionnez Fujitsu/U810. Ensuite allez changer le layout en cliquant sur <kbd>ajouter</kbd> et vous devriez voir apparaître un clavier à peu prés identique à celui de l'U810. 
</p>


	<a name='chapter_7'></a>
  <h2>Conclusion</h2>
	
<p>
 Voilà, le petit tour dans le monde des touches et des claviers est terminé. La seule chose qui nous manque ici pour aller encore plus loin serait de redéfinir cette fois le modèle même du clavier, mais je n'en ai pas encore trouvé l'usage <img src="http://artisan.karma-lab.net/sites/all/modules/contrib/smileys/packs/crystal/smile.gif" title="Smiling" alt="Smiling" class="smiley-content"/></p>
    ]]></content>
  </entry>
</feed>
