Installation et paramétrage de Beryl from Scratch
Le 27 octobre 2006, à 2:37 par Ulhume...
Attention cet article est obsolète et n'est ici que pour mémoire.

Avec la dernière de Suse 10.1, Mandriva 2007 est à ma connaissance la seule distribution à implémenter en standard le nouveau bureau 3D.
Je ne sais pas (et je m'en moque un peu Wink ce que donnera Vista dans ce domaine, mais le résultat, après quelques efforts, est impressionnant. Impressionnant et, quelques soient mes a priori de départ... utile ! Utile car cette technologie permet enfin d'utiliser le GPU, le micro-processeur 3D de la carte graphique et laisse ainsi libre le CPU pour d'autres tâches. Mais aussi utile car certains "effets" deviennent vite totalement indispensables...
Voici donc un petit trip pour comprendre un peux mieux ce qui se cache sous ces barbaries que sont AIGLX,XglX, Compiz, Beryl et autre obscure fonction TFP...

Historique (tout afficher)
  • v1 - Suppression de liens morts (2008-10-08 14:31)

De la 3D sur un bureau ?

L'idée de base est assez ancienne. D'un côté la fascination pour la 3D donnait des envies de longue date à certain de transporter ces concepts sur nos bureau. Il existe de nombreux projets, assez anciens, qui reposent sur une exploitation des métaphore 3D pour simplifier l'espace de travail comme le projet looking glass ou encore metisse (un projet Français ! Wink.

Mais au-delà des effets 3D, une réalité a rendu plus concret ces bureaux en 3D, il s'agit de l'énorme montée en puissance des GPU. En effet, la prolifération des jeux en 3D a tellement dopé le marché que la moindre carte graphique possède aujourd'hui d'énormes capacités de calcul capacités qui, si l'on n'est pas joueur, sont absolument inutilisées. Nous étions dans le paradoxe d'un CPU qui travail pour afficher des fenêtres alors que le GPU, lui, se tournait les pouces... L'idée est alors venue d'utiliser massivement le moteur de textures des GPU pour dessiner boutons et autres fenêtre.

Mais une fois l'idée posée, d'autres ont pu germer. En effet, pourquoi se limiter à cela et ne pas en profiter pour faire un peu remuer tout ce vieux bureau hérité de cette non moins vénérable Lisa (cf. ihm en photo de gauche).

En quête de la fonction TFP

Ainsi est né, en gros, l'idée de Xgl du côté de Novel (éditeur de la distribution Suse) et un peu plus tard, et en réaction ) Xgl, Aiglx par redhat. Pour mieux comprendre (très rapidement) la différence entre ces deux architectures, il faut se rappeler que X est un serveur. A ce titre une application graphique est un client réseau d'un serveur X qui seul dialogue avec la carte graphique. La 3D quant à elle est gérée par OpenGL à travers une extension du serveur X appelée GLX. C'est cette extension qui dialogue avec les drivers propriétaires de la Nvidia (par exemple).

Pour rendre visuellement une fenêtre à l'aide d'un moteur 3D, il faut utiliser le moteur de texture de la carte graphique en transformant le rendu 2D de la fenêtre, une image (ou pixmap) en une texture exploitable par le GPU. Il faut pour cela, d'une manière ou d'une autre, avoir accès à une fonction que l'on appelle "texture from pixmap" alias tfp pour les intimes. Aiglx et XGL s'opposent justement sur la manière de fournir ce service.

AIGLX (pour Accelerated Indirect GLX) se place comme une extension de GLX en permettant l'accès aux fonctions hardware 3D de manière indirecte, c'est à dire en respectant la philosophie de transparence réseau des serveur X. Ainsi, une application peut utiliser "à distance" les capacités graphiques 3D d'un serveur X disposant d'AIGLX. La fonction tfp est donc disponible à travers le réseau mais demande une modification du driver pour être appelée sur la carte graphique.

XGL (ou plutôt XglX) a une philosophie radicalement différente. Il ne s'agit pas là d'une extension d'un serveur X existant mais d'un serveur compatible X11 qui se place au dessus de X.org dont il est le client unique. Une fois lancé, Xgl ne fait alors qu'une chose, ouvrir sur le serveur X.org une fenêtre en plein écran dédiée à l'affichage d'objets OpenGL, un peu comme un jeu vidéo. Xgl devient alors le serveur (DISPLAY=:93) pour toute les autres applications dont il fait le rendu visuel sur la fenêtre OpenGL plein écran. On comprendra donc qu'Xgl est structurellement plus rapide qu'AIGLX. En effet, les commandes 3D sont directement passées à la carte graphique via les API OpenGL. De plus, Xgl propose sa propre implémentation de la fameuse fonction tfp ce qui le rends indépendant de sa présence ou nom dans le driver de la carte. Xgl fonctionne donc sur toutes les cartes du marché disposant d'un driver OpenGL, sans modification (contrairement à AIGLX). La suite d'XglX s'appelle Xegl qui se passe complètement du serveur X.org.

Une expérience amusante à faire chez soi pour se convaincre de la nature "fenêtre plein écran" de XglX. Ouvrez une console et de taper les commandes suivantes :

export DISPLAY=:0
kwin&
kwrite&

Ce qui nous donne quelque chose comme ceci :

On comprends ainsi parfaitement que XglX est une simple fenêtre sur le bureau d'un premier serveur X (:0).

Il y a de grands débats pour savoir laquelle des deux options est la plus pérenne. RedHat reproche à Novel d'avoir développé Xgl "dans son coin", les puristes voient en Xgl la fin de la philosophie X et les détracteurs d'AIGLX pointe la nécessité de modifier les drivers pour que l'extension puisse fonctionner, d'autres encore trouve que Xgl représente trop de travail par rapport au simple ajout d'une couche à X. Bref, il y a fort à parier que les deux options se retrouveront ensemble dans les prochaines versions du serveur X.

Dans tous les cas, les performances d'AIGLX sont simplement en dessous d'XGL. Ce qui est logique de par la nature même d'accès indirecte d'Xgl. Mais nous allons le voire, il existe une troisième car certains Beryl, le composition manager, peut aussi utiliser directement la fonction TFP du driver nVidia pour les meilleurs performances. Une sorte de troisième voie Smiling

La discrète extension COMPOSITE

Mais quoi qu'il en soit, cette fonctionnalité de rendu 3D ne serait que bien peu de chose sans une extension des serveurs X apparue, elle, il y a déjà deux ans : COMPOSITE. Cette extension permet à une application spéciale appelée gestionnaire de composition (CM pour composite manager), de provoquer le rendu d'une arborescence de fenêtres en mémoire et non plus directement à l'écran. le gestionnaire de composition peut ainsi modifier cette image en mémoire, puis de la renvoyer au serveur X pour son affichage final. Lorsqu'elle est apparue, cette extension a déjà permis de très jolis effets de transparence et d'ombres de fenêtres.

On comprend à ce stade que les bases du bureau full-3D sont posées avec les briques COMPOSITE et TFP via XGL/AIGLX. Il ne manque dorénavant plus qu'un chef d'orchestre pour que la magie s'opère, un gestionnaire de composition très spécial qui prendrait en charge la fonction TFP. Et ce n'est pas tout car si nous n'avions qu'un gestionnaire de composition, nous aurions une uniformité des effets sur toutes les fenêtres, par exemple une ombre ou une transparence. Pour aller plus loin, il fallait donc aussi un nouveau gestionnaire de fenêtres (WM pour Windows Manager) pour le comportement (placement, déplacements, réduction, etc.) et, fin du fin, un nouveau décorateur de fenêtres (WD ou Windows Decorator) chargé de dessiner les bords et les barres de titre.

La magie de Compiz

Les équipes Novel ont donc développé compiz, un gestionnaire de fenêtres ET de composition utilisant la fonction TFP pour ses effets. Il a été aussi développé (par novel ?) cgwd, un décorateur de fenêtre exploitant lui aussi la fonction TFP. Et C'est à ce stade que les fenêtres gigotent lorsqu'on les déplace, bondissent ou s'enfuient sur une combinaison de touche, se mettent à plat lorsque la souris touche un coin de l'écran ou que les bureaux virtuelles deviennent les faces d'un cube dont la rotation fait baver les windowsiens de jalousies à défaut d'être réellement très utile Wink Et tout ceci avec XGL comme AIGLX.

compiz se repose sur une architecture de type "plugins". C'est à dire que chaque effet (redimensionnement, changement de bureau, etc...) est un plugin indépendant, paramétrage et désactivable à loisir. Cela permet à des développeurs indépendants de mettre au point leurs propres effets (une fenêtre qui explose par exemple lorsqu'on la ferme).

Mais l'histoire ne se termine pas là, loin de là... Le Sieur Quinn Storm, un des développeurs, plutôt pas mauvais, de compiz avait depuis un temps déjà développé sa propre branche appelée compiz-quinn. Plus d'effets, plus novateur, plus rapide aussi... Et ce qui devait arriver arriva, la branche est devenue un nouveau projet appelé beryl accompagné d'un renommage de cgwd en emerald. Et il faut bien avouer que le couple Beryl-Emerald fait des merveilles. C'est plus rapide, mais surtout c'est beaucoup plus beau ! Le projet est fournit avec des outils de choix de thèmes pour emerald et de paramétrage fin des effets pour beryl.. Un must qui m'a fait jeter à la poubelle le "vieux" compiz intégré à la Mandriva 2007 pour me lancer dans la compilation de beryl...

Installation de Beryl et Emerald

D'après la publicité, Mandriva 2007 est déjà en 3D, non ? bein non, car cela ne marche pas... En effet, si Mandriva annonce un support XGL/AIGLX cela ne concerne en réalité que les versions payantes qui contiennent les "bons" drivers, pas les driver libre qui généralement ne disposent pas de l'accélération OpenGL/3D. Conclusion, il faut installer les drivers propriétaire Nvidia qui fournissent la fonction TFP (depuis la version 9629) pour AIGLX et les librairies OpenGL accélérées pour XglX (quelle que soit la version).

Cette installation est faite pour ceux qui veulent avoir les dernières versions de beryl et des drivers nVidia. Pour les autres qui préférerais une version plus "clef en main", je conseil la page wiki de l'installation de beryl via urpmi.

Pour ceux qui possède une i86_64, pensez à chaque fois qu'un librairie est à installer à prendre la version 64 bits. Par exemple, libxorg-x11-devel devient dans votre cas lib64xorg-x11-devel

Installation des drivers NVidia

Allez dans la section Drivers linux du site de nVidia et télécharger le driver correspondant à votre processeur (i32, 64, etc..). Une fois le fichier télécharger, il faut sortir de X, pour cela, presser CTRL-ALT-F1 et loggez vous en root.

Il faut que X soit arrêté, donc tapez un violent pkill kdm. On va aussi en profiter pour installer les paquets de développement de X11, les sources du kernel (si ce n'est déjà fait) ainsi qu'enlever les anciens artefacts 3D de la mandriva puis lancer l'install des drivers :

 # les glutes de mandriva
urpme task3d-desktop compiz xorg-xgl

# réinstaller XGL, les sources du kernel et les headers de X
urpmi xorg-xgl libxorg-x11 kernel-source

# maintenant on lance l'installation du driver nvidia
sh NVIDIA-Linux-x86-1.0-9629-pkg1.run

Une fois que l'installeur a terminé son travail, acceptez qu'il modifie votre fichier /etc/X11/xorg.conf. Une fois de retour en ligne de commande, éditez ce fichier pour vérifier que vous avez les points suivant, sinon, les ajouter :

Section "Device"
    Identifier "fx5200"
    VendorName "nVidia Corp."
    BoardName "NVIDIA GeForce FX 5200"
    Driver "nvidia"

    # choses générales
    Option "NoLogo" "true"

    # Ajouté pour beryl
    Option "AddARGBGLXVisuals" "true"
    Option "RenderAccel" "true"
    Option "AllowGLXWithComposite" "true"
    Option "TripleBuffer" "true"
    Option "DisableGLXRootClipping" "true"
    Option "BackStoring" "True"

    # Ajouté pour contrôler la carte via nvidia-settings
    Option "AllowDDCCI" "true"
    Option "Coolbits" "1"
EndSection

Section "Extensions"
    Option "Composite" "Enable"
    Option "RENDER" "Enable
EndSection

Maintenant, il nous reste à compiler beryl, autant ne pas relancer X pour l'instant...

Compilation de beryl

Bery s'installe donc très facilement en téléchargeant les sources avec subversion :

svn co svn://svn.beryl-project.org/beryl/trunk/ beryl

Une fois les sources téléchargé, passer en root pour installer quelques petits paquets de développement :

urpmi libstartup-notification-1_0-devel
urpmi librsvg2_2-devel
urpmi libcairo2-devel
urpmi intltool
urpmi libgtk+2.0_0-devel
urpmi libwnck-1_18-devel
urpmi libapr1-devel
urpmi libapr-util1-devel
urpmi libapr0-devel
urpmi apr-devel
urpmi libneon0.26-devel
urpmi libsvn0
urpmi subversion-devel
urpmi xvinfo

Enfin, pour éviter un petit soucis qui m'est arrivé avec libapr et libapr-util :

ln -s /usr/bin/apr-1-config /usr/bin/apr-config
ln -s /usr/bin/apu-1-config /usr/bin/apu-config

Ensuite, les développeurs de beryl ont eu le bon goût de mettre un script qui compile l'ensemble. Pour que ce script fonctionne, il faut que vous ayez paramétré votre sudo pour qu'il vous autorise le lancement d'un make install, ensuite il suffit d'aller dans le dossier beryl créé par svn et de lancer ./makeall. Au bout d'un temps la compilation c'est normalement déroulé sans problème... Du moins je l'espère pour vous Wink

Pour les processeur i86_64, il faut modifier le script makeall et modifier la ligne comme suite :
if ./autogen.sh --libdir=/usr/lib64 --prefix=$MYPREFIX && make && sudo make install

Pour bien comprendre la suite, il est nécessaire de s'arrêter sur la manière dont Beryl trouve SA fonction TFP. Basiquement Beryl recherche le maximum de performance/stabilité, ce qui nous donne dans l'ordre : Xgl (performant et stable), natif nVidia (très performant et moins stable) puis AIGLX (moins performant et stable). Ceci implique que si Xgl n'est pas chargé, c'est le driver nVidia qui sera utilisé. Hors ce dernier est buggé et les grandes fenêtres s'affichent en noir sur certaines cartes. AIGLX n'apportant rien en terme de performance, je conseille donc de garder Xgl pour le moment en paramétrant le fichier /etc/sysconfig/xgl pour indiquer XGL=yes. Mettez non pour tester si driver nVidia fonctionne chez vous.

Nous pouvons maintenant, redémarrer X en tapant kdm. Lorsque vous êtres reconnecté, si vous tapez dans une console echo $DISPLAY vous devez avoir un :93.0 qui apparaît, preuve que XGL est actif. Ensuite, vous n'avez qu'à lancer beryl-manager pour que la magie s'opère.

Gagner en vitesse

La machine que j'utilise pour tester beryl est très modeste en comparaison de certain, un Sempro 2400+ et une carte vidéo nVidia FX5200 avec 64mo. Il y a un plugin bien utile permettant d'afficher le nombre de frame par secondes. Il s'active via beryl-settings, pensez à désactiver le limiteur de vitesse et y associer un raccourcis clavier (ici F12). A l'activation du raccourcis, une jauge s'affiche pour indiquer les performances, soit 50 fps et mon CPU était à fond... Un peu inquiet, j'ai modifié modifié les options suivantes :

  • Options générales/Choix/Synchronisation avec VBlank. J'ai enlevé, c'est un peu idiot lorsqu'on a un écran LCD (y'a pas beaucoup de canons à électron dans ce type d'écran, surtout en DVI...)
  • Blur Fx à désactiver (je n'ai pas bien compris ce que cela faisait) mais il prends du CPU.
  • Gestion des crashs à désactiver, gros gain de vitesse.
  • TailFocus à désactiver, très gros gain de vitesse mais on y perd un peu Smiling

Une fois ces "optimisation" réalisée, je passe à 120 fps (au lieu de 50, ça valait le coup Smiling

Un autre conseil, dans le paramétrage du plugin "Animations", onglet "Valeurs Numériques", descendez le temps des animations montantes (ouvertures, maximisation, etc..) à 0.5s et les descendantes (fermetures, minimisation, etc..) à 1s. En effet, c'est agaçant d'avoir à "attendre" 1 seconde quelque chose que l'on doit utiliser, il vaut mieux, à mon sens, laisser plus de temps aux animations qui se font sans gène (je peux faire autre chose en admirant un fenêtre qui se minimise). Ainsi, on n'est plus gêné par les effets d'un point de vue ergonomique. My 2 cents opinion.

Conclusion

Voilà, fin donc de l'aventure Beryl. En tout cas une chose est sure, je suis aujourd'hui incapable de m'en passer. Les effets sont tellement "organiques" qu'il rendent tout autre système lourd et cartonneux en comparaison...

Commentaires

akrew , le 21 October, 2006 - 17:56

tout simplement magnifique
merci ajrarn pour cette contribution qui m'a permis de crâner sans modération en face de mes amis windowsiens.
A noter que beryl fonctionne de facon nettement plus stable si le driver nvidia a ete compilé.
concernant les librairies, il m'a fallut ajouter un petit "urpmi libxdamage libxcomposite" et surtout bien mettre a jour mes utilitaitres "autoconf, automake ...etc ...". Il m'a aussi fallut compiler separement emerald à cause d'une obscure erreur de compilation.
Sinon, mon linux ("ma nux" comme je l'appelle intimement) est devenue la plus belle du monde.
Et bravo pour les details d'optimisation qui ont fait passer mon fps de 60 à 240.

Excellent article !!!

Ulhume, le 21 October, 2006 - 19:13

Ah bé ça fait plaisir, au moins quelqu'un les lit (mes articles Wink))

Les URPMI que tu as du faire en plus, c'est sur une mandriva 2006 c'est ça ?

Akrew , le 21 October, 2006 - 19:42

aiglx est une bombe atomique

après telechargement puis installation du driver optimisé (encore en beta de nvidia, mais je n'ai constaté aucun bogue pour le moment) depuis le site suivant ( http://www.nzone.com/object/nzone_downloads_linux_display_x86_1.0-9625.html ) , je peux enfin faire tourner beryl sans xgl !! et les resultats sont terribles puisque mon fps passe de 240 à 350, ma charge cpu qui était de 15-30% passe sous les 10%, et ma memoire n'est pas plus occupée par X qu'à l'époque ou je ne connaissais pas beryl !!!

Ah, que j'aimerai pouvoir faire une capture vidéo de mon écran, et la diffuser a toute la terre !!!

En passant, mon visualiseur de diaporamas "kuickshow", (tres important pour le fan de Mangas que je suis) qui n'affichait plus rien du tout avec xgl (Sniff !!!), fonctionne à merveille avec aiglx.

Nota : ma config : petit proc AMD2400+, nvidia geforce fx5700, 1 Go de RAM Corsair

beryl sous mandriva 2006

Bonjour Ulhume,

non, sur la Mandriva 2006, je n'ai pas réussi à compiler correctement beryl, mais j'avais un peu foutu le bronx dans la liste de mes medias urpmi donc je ne peux pas donner mon avis pour le fonctionnement de beryl sur mandriva 2006. En revanche cela m'a decidé à sauter le pas et de passer à mandriva 2007, tout est nickel. Et quelle surprise ! les icônes de type crystal sont magnifiques !

Ulhume, le 8 November, 2006 - 17:27

Petite précision, ce n'est pas en mode AIGLX que tu te trouves mais bien native nVidia. Pour t'en convaincre :

pkill beryl-manager ; pkill beryl ; pkill bery-xgl ; pkill emerald ; beryl --force-aiglx &
Si mon intuition est bonne, tu devrais avoir de moins bonnes performances. L'ordre de beryl est Xgl/nvidia/AIGLX. AIGLX est le plus compatible X.org mais aussi le plus lent.

Sinon, combien de RAM as tu sur ta 5700 ? J'ai l'impression que chez moi c'est là que le bas blesse. Et j'ai aussi l'impression que la TFP n'utilise pas l'aperture agp que j'ai monté à 2560mo (mode agpart).

Pour ce qui est est de kuickshow, en effet, ça ne marche pas terrible sous Xgl Smiling j'ai eu d'autres gags comme celui là avec le sélecteur de couleurs de kde qui me renvois toujours le même bleu où que je pose la pipette Wink

Côté look, avec beryl, je te conseil de jouer avec l'éditeur de thèmes d'Emerald. Je viens de découvrir c'est assez fou ce que l'on peut faire en 3 cliques. Ca avec le look domino et les icônes OS-K, ça fait un bureau plutôt sympa Smiling

Thomas , le 2 February, 2007 - 22:59

Bonsoir,
Je suis totalement débutant avec linux et j'ai essayé d'installer Beryl avec votre méthode. J'utilise Mandriva 2007. Lors de la compilation, j'obtiens ceci :

...
libtoolize: `config.sub' exists: use `--force' to overwrite
libtoolize: `ltmain.sh' exists: use `--force' to overwrite
autoreconf-2.5x: running: /usr/bin/autoconf
autoreconf-2.5x: running: /usr/bin/autoheader
autoreconf-2.5x: running: automake --add-missing --copy --no-force
autoreconf-2.5x: Leaving directory `.'
Copying file mkinstalldirs
Copying file po/Makefile.in.in

Please add the files
codeset.m4 gettext.m4 glibc21.m4 iconv.m4 isc-posix.m4 lcmessage.m4
progtest.m4
from the /usr/share/aclocal directory to your autoconf macro directory
or directly to your aclocal.m4 file.
You will also need config.guess and config.sub, which you can get from
ftp://ftp.gnu.org/pub/gnu/config/.

./autogen.sh: line 11: intltoolize: command not found
BUILD FAILED for beryl-core

J'aimerais aussi savoir quelle est la signification de "devel" et où pourrais-je trouver les prérequis de Beryl (les "quelques" petits paquets).

Merci!

Ulhume, le 3 February, 2007 - 01:12

Les paquets dits "-devel" sont les versions de développement des versions standard. Un exemple, imagines que tu fabriques un programme qui utilises bluez (ce sont les outils linux pour gérer le bluetooth). Si tu tapes :

urpmq -y bluez

cela permet de chercher tous les paquets contenant le mot clef bluez et vas donc te renvoyer (entre autre) :

libbluez2
libbluez2-devel

La première ligne est le paquet standard, c'est à dire les librairies utilisables par une application ayant besoin du bluetooth. Le second est la version de développement pour la personne ayant besoin de développer une application utilisant bluetooth. Dans le premier tu trouveras des fichiers binaires (des .so souvent), et dans le second, des .h utilisable pour la compilation.

Maintenant ton problème semble venir de intltoolize qui manque (cf le command not found). Dans ce cas de figure, tu peux taper :

urpmf intltoolize

Cela permet de chercher un paquet contenant le fichier demandé, cela va renvoyer :

intltool:/usr/bin/intltoolize
intltool:/usr/share/man/man8/intltoolize.8.bz2

Il faut donc que tu installes le paquet intltool, en tant que root cette fois :

urpmi intltool

ceci fait, tu peux relancer la compilation.

Maintenant c'est un très bon exercice de compiler from scratch ainsi. Mais au cas où tu veilles aller plus vite, les paquets beryls sont maintenant installables via urpmi soit dans le dépôt contrib-backport (voir easy urpmi pour plus d'info), soit dans le dépôt Seer Of Souls.

J'espère que cela t'auras un peu aider

Thomas , le 4 February, 2007 - 11:40

Merci beaucoup! Ca fonctionne enfin.

Et bravo pour ce site qui est très intéressant et très bien tenu.

Poster un nouveau commentaire

Le contenu de ce champ est gardé secret et ne sera pas montré publiquement.
  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • To highlight piece of code, just surround them with <code type="language"> Your code &tl;/code>>. Language can be java,c++,bash,etc... Everything Geshi support.
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Textual smileys will be replaced with graphical ones.
  • Les adresses de pages web et de messagerie électronique sont transformées en liens automatiquement.

Plus d'informations sur les options de formatage

Connexion utilisateur
Les derniers bavardages...