Vraie transparence et ombres, avec Xorg

Vraie transparence et ombres, avec Xorg, xcompmgr et transset, sous Debian.

Principe

La vraie transparence a toujours été un problème pour les gestionnaires de fenêtres, car en principe, une fenêtre ne peut pas « voir » les autres fenêtres. Par conséquent, quand on place une fenêtre sur l’autre, et que l’on souhaite la rendre transparente, on voit souvent le fond d’écran, mais pas la fenêtre du dessous. C’est ce que l’on appelle de la fausse transparence, car en fait le gestionnaire de fenêtre ne fait que reprendre l’image de fond d’écran. Il y a là une différence importante entre le fait de reprendre le fond d’écran, et celui de reprendre l’image de toutes les fenêtres. Pour avoir de la vraie transparence, il faut passer par la 3D ; alors les fenêtres peuvent être capturées, travaillées en tant qu’images, et placées les unes sur les autres dans l’axe de la profondeur, ce qui leur permet d’être réellement transparentes.
Pour ce faire, nous allons donc activer l’accélération 3D d’Xorg, puis la composition de fenêtres avec la librairie xcomposite.

1. Activer l’accélération 3D, sous Xorg

Il existe de nombreux tutoriels pour activer l’accélération 3D d’une carte Ati ou Nvidia, sous Xorg. En revanche, pour ce qui est des chipsets i810 et autres des portables, il n’y en a pas des masses. Pourtant, c’est possible. Nous allons voir d’abord comment installer l’accélération 3D pour un driver i810 sous Xorg, ensuite le reste du tuto sera commun pour toutes les cartes.

1.1 installation d’Xorg

Un simple apt-get install xserver-xorg fait l’installation d’xorg.
La version d’xorg testée est la 6.9.0.dfsg.1-6

$ apt-get install xserver-xorg
$ dpkg -l xserver-xorg
[...]
ii  xserver-xorg     6.9.0.dfsg.1-6   the X.Org X server

1.2 installation du driver, sur un portable à base de chipset Intel

Pour les chipsets graphiques à base d’Intel, le driver i810 est commun à de nombreux chipsets Intel, comme l’i855GM par exemple. Pour savoir quel est le chipset de votre carte graphique, tappez en route (après avoir installé hwinfo) :

$ hwinfo  --gfxcard

Pour les chipset graphiques d’Intel, chargez le module i915, en root :

$ modprobe i915

La commande lsmod|grep 915 devrait retourner :

$ lsmod | grep i915
i915                   17536  2
drm                    61972  3 i915

1.3 Configuration d’xorg

Le plus important est de bien configurer xorg et son fichier xorg.conf.

Editez le fichier /etc/X11/xorg.conf , en indiquant le driver et ses options, ainsi que les champs nécessaire à l’accélération 3D et xcomposite :

$ vi /etc/X11/xorg.conf

[...]
 Section "Files"
        #FontPath       "unix/:7100"                    # local font server
        # if the local font server has problems, we can fall back on these
        FontPath        "/usr/lib/X11/fonts/misc"
        FontPath        "/usr/lib/X11/fonts/cyrillic"
        FontPath        "/usr/lib/X11/fonts/100dpi/:unscaled"
        FontPath        "/usr/lib/X11/fonts/75dpi/:unscaled"
        FontPath        "/usr/lib/X11/fonts/Type1"
        FontPath        "/usr/lib/X11/fonts/CID"
        FontPath        "/usr/lib/X11/fonts/100dpi"
        FontPath        "/usr/lib/X11/fonts/75dpi"
EndSection

Section "Module"
        Load    "bitmap"
        Load    "dbe"
        Load    "ddc"
	#le module DRI active l'accélération 3D matérielle
        Load    "dri"
        Load    "extmod"
        Load    "freetype"
        Load    "glx"
        Load    "int10"
        Load    "record"
        Load    "type1"
        Load    "vbe"
EndSection

Section "Extensions"
	#Ces options servent pour la vraie transparence
        Option  "Composite"     "Enable"
        Option  "RENDER"        "Enable"
        Option  "DAMAGE" "true"
EndSection

Section "InputDevice"
        Identifier      "Generic Keyboard"
        Driver          "keyboard"
        Option          "CoreKeyboard"
        Option          "XkbRules"      "xorg"
        Option          "XkbModel"      "pc105"
        Option          "XkbLayout"     "fr"
EndSection

Section "InputDevice"
        Identifier      "Configured Mouse"
        Driver          "mouse"
        Option          "CorePointer"
        Option          "Device"                "/dev/input/mice"
        Option          "Protocol"              "ImPS/2"
        Option          "Emulate3Buttons"       "false"
        Option          "ZAxisMapping"          "4 5"
EndSection

Section "Device"
        	Identifier      "Carte vidéo générique"
        	Driver          "i810"
        	#l'option DRI indique que l'on veut vraiment utiliser l'accélération 3D.
	        Option          "DRI"
	        #EnablePageFlip augmente la vitesse d'affichage 3D, en principe.
        	Option          "EnablePageFlip"        "True"
	        #AllowGLXWithComposite permet que la vraie transparence 
                #soit pris en charge par la carte 3D
        	Option          "AllowGLXWithComposite" "true"
        	#RenderAccel est une option pour l'activation de l'accélération 3D.
	        Option          "RenderAccel"           "true"
	        #Backingstore améliore la vraie transparence.
        	 Option          "backingstore"          "true"
EndSection

Section "ServerFlags"
       # Ces options servent à éteindre l'écran pour économiser la batterie
       Option      "blank time"    "10"
       Option      "standby time"  "20"
       Option      "suspend time"  "30"
       Option      "off time"      "40"
EndSection

Section "Monitor"
        Identifier      "Écran générique"
        Option          "DPMS"
        HorizSync       30-65
        VertRefresh     50-75
EndSection

Section "Screen"
        Identifier      "Default Screen"
        Device          "Carte vidéo générique"
        Monitor         "Écran générique"
        DefaultDepth    24
                SubSection "Display"
                Depth           24
                Modes          "1024x768" "800x600" "640x480"
        EndSubSection
EndSection

Section "ServerLayout"
        Identifier      "Default Layout"
        Screen          "Default Screen"
        InputDevice     "Generic Keyboard"
        InputDevice     "Configured Mouse"
EndSection

Section "DRI"
        Mode    0666
EndSection

L’essentiel est de bien ajouter la section « Extensions », d’activer le DRI, et de bien renseigner la section « Device ».

Sauvegarder le fichier xorg.conf, puis copiez-le et changez le md5sum du fichier de référence :

 $ cp /etc/X11/xorg.conf /etc/X11/xorg.conf.custom
 $  md5sum /etc/X11/xorg.conf >/var/lib/xfree86/xorg.conf.md5sum

1.4 Vérification de l’accélération 3D

Avant d’aller plus loin, il est impératif que l’accélération 3D fonctionne. Il faut relancer le serveur Xorg, en fermant la session graphique, puis en se mettant en console (alt F1), et en root relancer gdm (ou kdm ou autre) :

$ /etc/init.d/gdm restart

Ensuite, dans gnome ou autre, vérifiez que la 3D est activée avec glxgears dans un terminal :

$ glxgears
2721 frames in 5.0 seconds = 544.123 FPS
2861 frames in 5.0 seconds = 572.043 FPS

Si ça dépasse les 500 fps, sur un portable, c’est signe que la 3D est activée (sur un PC avec une vraie carte 3D, ça devrait dépasser les 1000 fps) . Vous pouvez en profiter pour tester chromium, un excellent shoot’em up.

Maintenant que la 3D est activée, on va installer ce qu’il faut pour la vraie transparence et les ombres.

2. Installation d’xcomposite et de ses applications.

2.1 installation des paquets debian nécessaires

Les paquets suivant devront être installés par la commande :

$ apt-get install  libxcomposite1 libxcomposite-dev libxdamage1 libxdamage-dev libxfixes3 libxfixes-dev libxrender-dev libxrender1

2.2 Creation des liens pour pkg-config

Si vous faite un ls /usr/lib/pkgconfig/ vous devriez voir les fichiers pris en compte par pkg-config. Vous remarquez qu’il n’y a ni xcomposite.pc, ni xdamage.pc, ni même xfixes.pc. Ceux-ci sont situés dans /usr/X11R6/lib/pkgconfig/. Or on en a besoin pour plutard.
Par conséquent, une solution simple et efficace consiste à créer des liens de ces fichiers dans /etc/lib/pkgconfig :

$ ln -s /usr/X11R6/lib/pkgconfig/xcomposite.pc /usr/lib/pkgconfig/xcomposite.pc
$ ln -s /usr/X11R6/lib/pkgconfig/xfixes.pc /usr/lib/pkgconfig/xfixes.pc
$ ln -s /usr/X11R6/lib/pkgconfig/xdamage.pc /usr/lib/pkgconfig/xdamage.pc

A partir de là, nous pouvons installer les applications xcompmgr et transset.

2.3 Installation d’xcompmgr et transset

Xcompmgr est le manager d’éffets spéciaux d’xorg. Il permet la prise en compte des ombres et de la transparence, et bien plus en théorie (mais en pratique, pour l’instant, juste des ombres et de la transparence).
Transset est un utilitaire qui permet d’activer la transparence sur une fenêtre, un menu ou autre. Transset ne fonctionne pas sans xcompmgr.
Inutile de les chercher avec apt-cache, ces applications n’existent pas dans les dépots Debian, même dans le dépôt sid. Probablement du fait de la réputation d’instabilité d’xcompmgr. Pourtant, si l’accélération 3D est bien activée, et xorg bien configuré, ces applications ne devraient pas poser de problème.
Il faut d’abord les récupérer.

2.3.1 installation d’xcompmgr

Xcompmgr est téléchargeable à cette adresse, en format tar.gz (xcompmgr-1.1.1.tar.gz (ou plus)) :
freedesktop.org/wiki/Software_2fxapps
Le projet xcomposite étant officiellement hébergé par freedesktop.

Décompresser le tarball, puis faites en un paquet debian (dh-make doit être installé):

$ tar -zxvf xcompmgr-1.1.1.tar.gz
$ cd xcompmgr-1.1.1

//dh_make va créer les fichier nécessaire pour en faire un paquet debian :

$ dh_make
Type of package: single binary, multiple binary, library, kernel module or cdbs?
 [s/m/l/k/b] s
Maintainer name : dams
Email-Address   : dams@debian.mondomaine
Date            : Thu,  6 Apr 2006 23:49:34 +0200
Package Name    : xcompmgr
Version         : 1.1.1
License         : blank
Type of Package : Single
Hit <enter> to confirm: [touche entrée]
Done. Please edit the files in the debian/ subdirectory now. xcompmgr
uses a configure script, so you probably don't have to edit the Makefiles.

// Puis en root , cette commande crée le paquet debian (il passe toutes les étapes suivante, automatiquement, la compilation, la création des liens et du  programme):

$ debian/rules binary     
...
//si tout se passe bien, à la fin de la compilation, vous devriez voir :
dpkg-deb : construction du paquet « xcompmgr » dans « ../xcompmgr_1.1.1-1_i386.deb ».

//Alors, en root toujours, il nous reste plus qu'à installer le paquet debian :
$ cd ..
$ dpkg -i xcompmgr_1.1.1-1_i386.deb

//Le paquet installé, vous pouvez déjà profiter des ombres en lançant la commande (en utilisateur) :
$ nohup xcompmgr -cfG &

2.3.2 installation de transset.

Pour celui-ci, comme il n’a pas de tarball, il va falloir procéder autrement. Ses fichiers sont disponible en cvs. Le cvs permet de les télécharger plus facilement, sans passer par un navigateur, et de mettre les fichiers à jours.

Dans un dossier quelconque, entrez les commandes suivante, en utilisateur :

$ cvs -d :pserver:anoncvs@cvs.freedesktop.org:/cvs/xapps co transset

On ne pourra pas, avec la version actuelle, en faire un paquet debian, car c’est une application trop légère, sans règles d’installation. Cependant, on peut quand même l’installer :

$ cd transset
$ make

//en root :
$ cp transset /usr/local/bin/

//Pour le desinstaller, il n'y aura qu'à supprimer le programme /usr/local/bin/transset

A présent, vous pouvez utiliser transset pour rendre transparentes des fenêtres ou autre, en cliquant sur ce que vous voulez après avoir lancé, en utilisateur, avec xcompmgr activé :
$ transset

A noté que, de mon point de vu, les ombes rendent mieux déplacés vers le coin bas-droite, et pour avoir un effet de fondu plus rapide (voir man xcompmgr) :
$ nohup xcompmgr -t 0 -l 0 -D 2 -o 0.5 -cfC &

transset donne par defaut une opacité de 0.75. On peut le modifier par exemple avec :
$ transset 0.5

Remarques :
_pour une utilisation courante, il serait plus simple de faire un script qui lance xcompmgr, et applique transset sur des fenêtres par défaut, au démarrage de la session graphique, ou sous Gnome, de mettre la commande xcompmgr en demarrage (sans l’option C) et transset en lanceur.
_l’option -C, qui permet d’éviter l’ombre sur la barre des menus, est à éviter si l’on passe xcompmgr en application de démarrage, sous Gnome (ça me l’a fait disparaître).
_Sous Gnome, le fait de mettre transset comme lanceur, dans la barre d’outil, est bien pratique.
_Sous Gnome encore, il existe un outil dédié à xcompmgr, nommé gcompgr. Je ne l’ai pas testé, mais il a l’air pas mal. sourceforge.net/projects/gcompmgr/

Damsss.

Damsss, es tu certain que cette méthode fonctionne avec les cartes ATI + XFCE?

Car j’ai essayé de suivre le topic mais après modification du xorg.conf (et redémarrage de l’interface graphique), mon acceleration 3D saute (ATI 9200se et xserver-xorg).

Je me suis contenté d’ajouter les lignes extensions, device (à partir de “l’option DRI”) et la section DRI.

Une idée?

Merci.

Qu’affiche un :
cat /var/log/Xorg.0.log | grep EE (pour voir les erreurs, c’est peut-être un n°de log différent)

Sinon, le windows manager n’a rien à voir. xcomposite fonctionne avec n’importe lequel, une fois installé. Essaye de continuer le tuto, et d’installer xcomposite. Peut-être que l’option AllowGLXWithComposite nécessite qu’il soit déjà installé (vu que j’ai fait le tuto une fois installé ).

Juste pour info., je pense qu’il y a une petite erreur en 2.2:
“Si vous faite un ls /etc/lib/pkgconfig/ vous devriez voir les fichiers pris en compte par pkg-config.”

Je pense que tu as plutot voulu dire /usr/lib/pkgconfig (je dis ca car j’ai cherché un moment ces dossiers :wink: )

Corrigé ! :laughing:

C’est bon… personne n’a rien vu…

Bop, ca ne fonctionne toujours pô:
voici mon log Xorg (par contre je ne saurais dire ce qui y est vieux de récent). Pour l’instant j’ai juste modifié mon xorg.conf avec les ajouts des sections extensions et device (sauf driver):

X Window System Version 6.9.0 (Debian 6.9.0.dfsg.1-6 20060403233528 David Nusin$Release Date: 21 December 2005
X Protocol Version 11, Revision 0, Release 6.9
Build Operating System: Linux 2.6.12-1-686 i686 [ELF]
Current Operating System: Linux demonaz 2.6.15-1-686-smp #2 SMP Mon Mar 6 15:34$Build Date: 04 April 2006
Before reporting problems, check wiki.X.Org
to make sure that you have the latest version.
Module Loader present
OS Kernel: Linux version 2.6.15-1-686-smp (Debian 2.6.15-8) (waldi@debian.org) $Markers: (–) probed, (**) from config file, (==) default setting,
(++) from command line, (!!) notice, (II) informational,
(WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(==) Log file: “/var/log/Xorg.0.log”, Time: Wed Apr 19 20:56:18 2006
(==) Using config file: “/etc/X11/xorg.conf"
Parse error on line 114 of section Device in file /etc/X11/xorg.conf
"EndSection” is not a valid keyword in this section.
(EE) Problem parsing the config file
(EE) Error parsing the config file

Fatal server error:
no screens found

Please consult the The X.Org Foundation support
at wiki.X.Org
for help.
Please also check the log file at “/var/log/Xorg.0.log” for additional informat$
(WW) xf86CloseConsole: VT_GETSTATE failed: Bad file descriptor
(WW) xf86CloseConsole: KDSETMODE failed: Bad file descriptor
(WW) xf86CloseConsole: VT_GETMODE failed: Bad file descriptor

Voici ma section Device:
Section "Device"
Identifier "Carte ATI"
Driver "fglrx"
BusID "PCI:1:0:0"
EndSection

La 3D semble fonctionner (je tourne à 1100 fps en moyenne sous glxgears avec une ATI 9200se -carte relativement bas de gamme-)

A priori, il y a une erreur de syntaxe dans ta config, vers la ligne 114. Verifie bien la syntaxe des mots, si t’as pas oublié un guillemet, un EndSubSection ou un EndSection quelquepart.

C’est ok pour le fichier xorg.conf, j’avais un end section qui se balladait seul (désolé).

Par contre le souci reste le même: dès que je relance ma session graphique (je reboote pour être certain), avec le fichier xorg.conf modifié, je perds mon acceleration graphique.

Voici ce que j’obtiens sous glxgears:
Xlib: extension “XFree86-DRI” missing on display “:0.0”.
1994 frames in 5.3 seconds = 376.761 FPS
2108 frames in 5.0 seconds = 419.599 FPS
2239 frames in 5.2 seconds = 433.051 FPS
1953 frames in 5.1 seconds = 383.748 FPS
2240 frames in 5.2 seconds = 431.293 FPS
2240 frames in 5.3 seconds = 421.698 FPS
2100 frames in 5.2 seconds = 402.249 FPS
2520 frames in 5.2 seconds = 485.183 FPS
2380 frames in 5.0 seconds = 472.723 FPS

Pourquoi parle t-il de XFree86 alors que je suis sous Xorg?

Voici une partie de mon fichier xorg.conf:

Section "Module"
Load "bitmap"
Load "dbe"
Load "ddc"
Load "dri"
Load "evdev"
Load "extmod"
Load "freetype"
Load "glx"
Load "int10"
Load "record"
Load "type1"
Load "record"
Load "vbe"
EndSection

Section “Extensions”
#Ces options servent pour la vraie transparence
Option “Composite” "Enable"
Option “RENDER” "Enable"
Option “DAMAGE” "true"
EndSection

Section "Monitor"
Identifier "4311 FA"
HorizSync 30.0 - 70.0
VertRefresh 50.0 - 160.0
Option "DPMS"
EndSection

Section "Device"
Identifier "Carte ATI"
Driver "fglrx"
BusID “PCI:1:0:0”
#l’option DRI indique que l’on veut vraiment utiliser l’accélération 3D.
Option “DRI”
#EnablePageFlip augmente la vitesse d’affichage 3D, en principe.
Option “EnablePageFlip” “True”
#AllowGLXWithComposite permet que la vraie transparence
#soit pris en charge par la carte 3D
Option “AllowGLXWithComposite” “true”
#RenderAccel est une option pour l’activation de l’accélération 3D.
Option “RenderAccel” “true”
#Backingstore améliore la vraie transparence.
Option “backingstore” "true"
EndSection

Section "Screen"
Identifier "Screen manuel avec config fine"
Device "Carte ATI"
Monitor "4311 FA"
DefaultDepth 24
SubSection "Display"
Depth 1
Modes “1280x1024” “1024x768” “800x600” “720x400” “640x480”

Section "DRI"
Mode 0666
EndSection

Afin d’avancer un peu, je suis allé jusqu’au bout de la procédure. Lorsque j’execute xcompmgr, ca rame à mort, puis ca se met en caraffe (obligé de killer xcompmgr). Probablement lié à la parte de l’acceleration graphique.

Une idée?

Le problème vient du fglrx. Je le sais car j’ai aussi fait le test avec une carte ATI. En fait, c’est vraiment la chianlie la 3D avec une carte ATI, comparré à l’i810 pour chips Intel, qui s’active sans problème, avec un driver natif (rien eut à faire, aucune panne). La solution : faire en sorte que le driver fglrx fonctionne.
La réinstallation a fonctionnée, le plus souvent. Verifier que le module fglrx s’est bien lancé (lsmod | grep fglrx). Recharger le module, relancer X.

Curieux, à priori il est bien lancé:

$ lsmod | grep fglrx
fglrx 458464 0
agpgart 32076 2 fglrx,intel_agp

Sinon, quelle est la commande pour relancer un module?
:blush:

“J’ai trouvé” ce qui provoque le ralentissement:
l’activation du composite “enable”

Si je mets cette ligne en commentaire (uniquement cette ligne dans l’ensemble), je récupère mon accéleration graphique.

A priori il s’agit d’un problème courant sur les cartes ATI d’incompatibilité fglrx/composite. Le seul remède trouvé pour l’instant serait de repasser en driver ati au lieu de fgrlx (avec grosse perte de performances en conséquence). Je continue de chercher…

J’ai aussi joué avec ca, c’est pas mal pour impressionner les copains ou pour travailler sur un document à partir d’un document en dessous. A part cà je n’ai pas vraimment trouvé d’utilité.

Par contre transset c’est bien, mais ca t’oblige à cliquer, à la longue je trouve ca chiant. Alors qu’avec ca:
forchheimer.se/transset-df/
et xbindkeys pour l’assigner à une touche du clavier, tu peux changer la transparence de la fenêtre active. Exemple CtrlFn1 pour transparence 1, …

Moi j’avais pris transset et xcomp de experimental plutot que de cvs, detail…

Merci pour ce thread je me suis rendu compte que le dri etait maintenant géré pour le 24bits pour les i810, j’ai changé mon xorg.conf

quote="isterios"
Sinon, quelle est la commande pour relancer un module? [/quote]
rmmod pour le décharger du noyau,
modprobe pour l’y reintroduire. :wink:

Bonsoir Damss,
j’ai tenté d’adapté cela avec xfree86, j’arrive à avoir l’accéleration mais je
bloque sur les librairies relative à composite que je ne peux installer …
Connais tu des équivalents pour xfree86 ?
C’est ballot, à part quelques problemes, j’y étais presque … une idée?

Sous Xfree, il y a bien l’Xrender et ses options, mais c’est encore au stade expérimentale, et comme Xfree a basculé dans le commerciale au moment où c’était en train d’être étudié (comme par hasard), l’xcomposite n’y est pas implémenté (sur les versions libres d’Xfree). En revanche, les utilisateurs d’Xfree n’ont pas à trimer pour activer l’accélération 3D de leurs cartes graphique puisque les drivers d’XFree supportent la 3D, en générale.

Et à franc parler, l’xcomposite, on s’en lasse vite (devoir faire une manip’ - transset - pour chaque fenêtre à rendre transparente, c’est vite lassant), hormis pour faire des screenshots qui en jette. Ca sera vraiment interressant quand il sera plus évolué, ou intégré avec l’Xgl (pour compiz par exemple).

Ok alors, je laisse tomber …
mais je suis pourtant passé de 478 à 900 et quelques FPS en suivant les consignes et modifiant le XF86Config-4 … A quoi cela me sert t’il au juste, de laisser ça dans l’état … je suppose que c’est un petit plus non ? mais lequel lol ?
Merci en tout cas. :wink:

Bonjour, je viens de suivre le tuto, toute l install se passe bien si ce n est qu au final rien ne se passe, c est ennuyeux… Le log de xorg ne me donne rien de speciale, je ne vois pas ou ca bloque (si vous avez une idee…).
Pour info je suis sur une debian Etch et Gnome 2
Merci d avance.

C’est quoi, rien ? La machine ne démarre plus ?
Sois plus précis STP.

Non en faite tous marche bien(Xorg, gdm, gnome…), si ce n est que quand je lance transset et que je clic sur une fenetre, elle ne deviens pas transparente meme si je met une opacite de 0.2 ou meme 0… Je pense que mon acceleration 3D est active car chromium tourne impecable et je fais du 490 FPS sur glxgears ( l ordinateur portable n est pas tou neuf non plus… ). Excuse moi si mon message n etait pas claire…

Est-ce que tu as lancé xcompmgr avant d’utiliser transset ?