Date Tags debian

(… ou comment péter son Xorg dans la joie et la bonne humeur)

Depuis plusieurs mois (environ 6), je suis passé de hardy à lenny, uniquement parce qu’OpenOffice.org faisait aimablement segfaulter X à chaque lancement, ce qui est assez insupportable, vous en conviendrez aisément. Cependant, je suis toujours développeur Ubuntu (même si je suis moins actif qu’il y a un an), donc je suis avec intérêt ce qu’il se passe dans cette distribution (principalement pour pouvoir critiquer, je l’avoue, mais aussi parce que les pcs de mes parents et de mon frère tournent sous ubuntu, et accessoirement parce que je m’occupe de medibuntu). Mû par une envie irrépressive, c’est-à-dire que je m’ennuyais franchement, j’ai décidé d’installer Xserver 1.5 sur ma testing, puisqu’il n’y a pas de raison que seule Ubuntu s’amuse avec des snapshots qui cassent les pilotes propriétaires ATI.

Maintenant que les deux ou trois lecteurs tombés ici par hasard en cherchant “blog de gapz” dans google ont fui, passons aux choses sérieuses : cette version me semble intéressante car elle supporte l’input-hotplug, grâce à hal, et donc que si je branche à la volée mon touchpad (C’est une image, je ne m’amuse pas à ouvrir le capot de mon portable et à bidouiller le touchpad toutes les cinq minutes. En revanche, je peux assez facilement le simuler par un modprobe -r appletouch && modprobe appletouch. Je suis d’accord qu’il faut être atteint du bulbe ou trituré du cortex pour faire une chose aussi absurde (qu’un poisson sans bicyclette) de son plein gré, mais il arrive que mon touchpad ne se réveille pas à la sortie d’un suspend, m’obligeant à recourir à de viles méthodes comme celle-ci.), il sera correctement configuré (ce qui n’est pas le cas avec le fichier statique de config xorg.conf). Une autre raison possible est que testing est excessivement trop stable pour moi en ce moment, que prendre des paquets depuis experimental c’est fun, et enfin je bullais activement en ce vendredi soir, comme je l’ai écrit ci-dessus (mais si, suivez enfin !), ce qui d’ailleurs fait trois raisons et non une seule comme évoqué au début de la phrase, mais les lecteurs attentifs auront corrigé d’eux-même, et puis arrêtez de m’interrompre, c’est insupportable à la fin.

Donc, d’abord, comment casser son interface graphique (n’essayez pas si vous utilisez des pilotes propriétaires, ça risque de mal tourner) en une seule ligne de commande (adaptez à votre matériel, moi j’ai un MacBook 1,1) :

aptitude install xserver-xorg{,-{core,input-{evdev,kbd,mouse,synaptics},video-intel}}/experimental libgl1-mesa-dri/experimental

Une fois que l’installation est achevée, vous pouvez commencer à vous en donner à cœur joie avec la configuration grâce à hal. La plupart des périphériques d’entrée sont maintenant gérés par le pilote evdev (plutôt que kbd ou mouse), et il n’y a rien à faire, à part copier /usr/share/doc/hal/examples/10-x11-input.fdi dans /etc/hal/fdi/policy/. Pour plus d’informations sur la syntaxe, n’hésitez pas à lire la spécification de hal (dans hal-doc je crois), et à user et abuser de lshal ou hal-device pour récupérer les propriétés de vos périphériques (également pour vérifier que les options passées sont bien prises en compte).

Un problème peut se poser quand vous devez passer explicitement certaines options à votre périphérique pour qu’il fonctionne à votre gré (par exemple le défilement à deux doigts avec un touchpad apple), comme vous le faisiez avec le xorg.conf. C’est là qu’on se dit que la nature est bien faite (observons deux papillons), car tout est prévu dans hal, grâce aux clés input.x11_options.*. Voici pour info à quoi ressemble mon /etc/hal/fdi/policy/10-x11-input.fdi pour mon touchpad apple :

<?xml version="1.0" encoding="UTF-8"?>
<deviceinfo version="0.2">
  <device>

    <match key="info.capabilities" contains="input.mouse">
      <merge key="input.x11_driver" type="string">evdev</merge>
    </match>

    <match key="info.capabilities" contains="input.touchpad">
      <match key="info.product" contains="appletouch">
        <merge key="input.x11_driver" type="string">synaptics</merge>
        <merge key="input.x11_options.SHMConfig" type="string">true</merge>
        <merge key="input.x11_options.LeftEdge" type="string">10</merge>
        <merge key="input.x11_options.RightEdge" type="string">1200</merge>
        <merge key="input.x11_options.TopEdge" type="string">10</merge>
        <merge key="input.x11_options.BottomEdge" type="string">370</merge>
        <merge key="input.x11_options.FingerLow" type="string">10</merge>
        <merge key="input.x11_options.FingerHigh" type="string">20</merge>
        <merge key="input.x11_options.MaxTapTime" type="string">180</merge>
        <merge key="input.x11_options.MaxTapMove" type="string">220</merge>
        <merge key="input.x11_options.SingleTapTimeout" type="string">100</merge>
        <merge key="input.x11_options.MaxDoubleTapTime" type="string">180</merge>
        <merge key="input.x11_options.LockedDrags" type="string">off</merge>
        <merge key="input.x11_options.MinSpeed" type="string">1.10</merge>
        <merge key="input.x11_options.MaxSpeed" type="string">1.30</merge>
        <merge key="input.x11_options.AccelFactor" type="string">0.08</merge>
        <merge key="input.x11_options.TapButton1" type="string">0</merge>
        <merge key="input.x11_options.TapButton2" type="string">0</merge>
        <merge key="input.x11_options.TapButton3" type="string">0</merge>
        <merge key="input.x11_options.RTCornerButton" type="string">0</merge>
        <merge key="input.x11_options.RBCornerButton" type="string">0</merge>
        <merge key="input.x11_options.LTCornerButton" type="string">0</merge>
        <merge key="input.x11_options.LBCornerButton" type="string">0</merge>
        <merge key="input.x11_options.VertScrollDelta" type="string">20</merge>
        <merge key="input.x11_options.HorizScrollDelta" type="string">50</merge>
        <merge key="input.x11_options.VertEdgeScroll" type="string">false</merge>
        <merge key="input.x11_options.HorizEdgeScroll" type="string">false</merge>
        <merge key="input.x11_options.VertTwoFingerScroll" type="string">true</merge>
        <merge key="input.x11_options.HorizTwoFingerScroll" type="string">true</merge>
      </match>
    </match>

  </device>
</deviceinfo>

Simple, non ? Et ça croustille fonctionne ! Mais alors me direz-vous, pourquoi s’ennuyer avec cela alors que mon xorg.conf le fait déjà ? D’une part, parce que Xorg utilise hal pour la détection du matériel branché à chaud, au lieu de tout redétecter lui-même comme avant, et ça, c’est bien. D’autre part, oui, la seule application autorisée à reimplémenter un système d’exploitation, c’est Emacs, je connais même des gens qui essaient de configurer leur client mail à l’intérieur d’Emacs, et qui n’y arrivent pas, c’est pour vous dire comme c’est hilarant l’Elisp. D’autre part, disais-je donc avant d’être interrompu assez grossièrement par moi-même, d’autre part parce que ça utilise hal, donc ce n’est plus statique, donc (vous suivez ?), si je débranche et rebranche mon touchpad, il reste correctement configuré automatiquement, avec le défilement à deux doigts, ce qui n’est pas le cas avec Xorg seul (il faut tuer Xorg).

Waouh, c’est génial, je veux le même à la maison.” exultez-vous. Mais ce n’est pas fini, il reste la configuration de la disposition du clavier. Le fichier d’exemple actuel /usr/share/doc/hal/examples/10-x11-input.fdi a une section qui concerne le clavier, mais ce n’est pas celle qui nous intéresse pour la disposition (uniquement pour le pilote et autres options du même genre à passer). Pour la disposition du clavier, il faut copier /usr/share/hal/fdi/policy/10osvendor/10-keymap.fdi dans /etc/hal/fdi/policy/. Arrivé à ce stade, je m’aperçois que je n’ai pas expliqué pourquoi ces copies, plutôt que d’éditer le fichier original : dans le premier cas, c’est trivial, le fichier est un exemple ; dans le deuxième cas, pour faire simple, c’est parce que le fichier dans /usr n’est pas marqué comme fichier de configuration, donc il sera écrasé à la prochaine mise à jour, ce qui n’est bien souvent pas le cas des fichiers dans /etc. Après cette digression technique, revenons-en au fichier en question : précisez la disposition adéquate, ce n’est pas très difficile. La plupart des options du xorg.conf sont supportées, comme le montre cet exemple (fichier utilisé pour mon layout mac) :

<?xml version="1.0" encoding="UTF-8"?>
<deviceinfo version="0.2">
  <device>

    <match key="info.capabilities" contains="input.keys">
      <merge key="input.x11_driver" type="string">evdev</merge>
      <merge key="input.x11_options.XkbRules" type="string">xorg</merge>
      <merge key="input.x11_options.XkbModel" type="string">macbook79</merge>
      <merge key="input.x11_options.XkbLayout" type="string">fr</merge>
      <merge key="input.x11_options.XkbVariant" type="string">mac</merge>
      <merge key="input.x11_options.XkbOptions" type="strlist">lv3:lwin_switch</merge>
      <append key="input.x11_options.XkbOptions" type="strlist">compose:rwin</append>
    </match>

  </device>
</deviceinfo>

Et ça marche bien également (notez l’utilisation du append au lieu du merge quand on veut spécifier plusieurs valeurs), sauf que j’ai l’impression qu’evdev écrase une des valeurs spécifiées (le modèle ou les règles, ce qui peut s’avérer un peu gênant). Le seul problème potentiel, c’est qu’avec evdev (à la place de kbd), certaines touches ne renvoient plus le même code, et ça peut perturber certaines applications (exemple, pommed ne fonctionne plus chez moi sous X, mais très bien en console).

Une fois que cette phase de configuration est achevée, vous pouvez supprimer votre xorg.conf, et relancer hal puis X (de même à chaque modification de la configuration).

Voilà, je crois que c’est tout ce que j’avais à dire à ce sujet (Je pense que j’ai battu mon record personnel de longueur de billet non délibérément trollistique (j’admets volontiers que j’en ai égaré un ou deux dans ce billet, d’ailleurs, si vous les trouvez, merci d’écrire au journal, on vous enverra un pin’s, ou une blague TéléZ).). Il faut noter que xserver 1.5 n’est pas prévu pour lenny, donc aucun effort n’a été fait de ce côté-là dans debian (notamment pour la transition xorg.conf -> hal), mais dès la reprise de l’empaquetage intensif après la sortie de lenny, on peut s’attendre à une configuration moins compliquée et plus out-of-the-box. :)

10-keymap.fdi 10-x11-input.fdi