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.