xcompmgr HOWTO

Door Joris van Rooij

Vrijgegeven onder de CCPL.

  1. Inleiding
  2. X.org Configuratie
  3. Benodigde software
  4. Bash watchdog
  5. Configuratie van de software
  6. Het resulaat

Inleiding

xcompmgr is een X composition manager. Om niet te hard van stapel te lopen zullen we eerst uitleggen wat het nu eigenlijk doet. De X.org X server heeft sinds versie 6.8 een extension genaamd "composite", waardoor iedere window in een externe buffer beschikbaar wordt voor een applicatie voordat deze op het scherm verschijnt. Dit maakt het onder andere mogelijk om je window transparant te maken of gebruik te maken van een alpha channel. Nog meer eye-candy voor je X desktop dus.

X.org configuratie

Eigenlijk is dit verbazend simpel. Er hoeft maar één regel toegevoegd te worden aan je X configuratie bestand. Dit bestand is doorgaans te vinden als /etc/X11/xorg.conf. Deze regel hoort in de section "Extensions". Als deze nog niet bestaat kun je hem gewoon bijvoegen.

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

Bijna iedereen kan deze optie uit proberen in de configuratie. Het wordt niet altijd ondersteund maar wanneer het ondersteund wordt door de driver van je grafische kaart krijg je er een flinke performance verhoging voor terug. Dit hoort in de section "Screen" van je het scherm waarin je composite wilt gebruiken.

Section "Screen"
        #andere opties, identifier etc
        Option          "RenderAccel" "true"
EndSection

nVidia gebruikers die de driver van nVidia zelf gebruiken zullen een extra regel aan hun configuratie toe moeten voegen willen ze nog gebruik kunnen maken van GLX (3D hardware acceleratie). Dit hoort in de section "Device" van hun nVidia kaart.

Section "Device"
        #andere opties, identifier etc
        Option          "AllowGLXWithComposite" "true"
End

ATI gebruikers die ATI's eigen driver gebruiken zullen deze regel toe moeten voegen in die zelfde section.

Section "Device"
        #andere opties, identifier etc
        Option          "backingstore" "true"
EndSection

Na het aanpassen van je xorg.conf zul je je X server moeten herstarten. Dit kun je in de bijna alle gevallen doen door opnieuw in te loggen. Om helemaal zeker te zijn kun je hardhandig je X sessie beïndigen door de toetsencombinatie ctrl-alt-backspace te gebruiken.

Benodigde software

- xcompmgr

Dit is waar het allemaal om draait. De composite manager. Veel Linux distributies hebben dit al beschikbaar als installeerbaar pakket. Ik ga hier uit van een compilatie vanuit de broncode om met iedere gebruiker rekening te houden. De mensen die het als installeerbaar pakket in hun distributie hebben kunnen deze stap over slaan. Zorg dat je bij de installatie van software root rechten hebt.

xcompmgr komt met een lijst aan dependencies (pakketten die al geïnstalleerd moeten zijn) waar je aan moet voldoen wil je deze software installeren. Hoe je deze paketten installeert is distributie afhankelijk en is terug te vinden in de documentatie van je distributie. De volledige lijst is als volgt: libx11, libxcomposite, libxdamage, libxfixes, libxrender. De exacte namen zijn ook per distributie verschillend, maar een zoekactie naar deze namen zal wanneer ze beschikbaar zijn zeker resultaat op leveren. xcompmgr is vrij te downloaden van freedesktop.org. Vul voor de x-en de juiste versie nummers in.

wget http://freedesktop.org/xapps/release/xcompmgr-x.x.x.tar.gz
tar zxvf xcompmgr-x.x.x.tar.gz
cd xcompmgr-x.x.x
./configure
make
su -c 'make install'

Voor Debian gebruikers (en misschien ook anderen) geldt dat de libraries niet op de standaard plaats te vinden zijn. Dit is eenvoudig op te lossen door het volgende te doen voor het configure commando:

updatedb
locate xcomposite.pc
Nu krijg je de locatie van dat bestand. Bijvoorbeeld "/usr/X11R6/lib/pkgconfig/xcomposite.pc"
export PKG_CONFIG_PATH=/usr/X11R6/lib/pkgconfig/
Ga nu verder bij het configure commando.

- transset-df

Hier kiezen we om geen gebruik te maken van de standaard applicatie voor het bewerken van de doorzichtigheid van je window genaamd "transset". Dit is een uitgebreide versie die iets meer opties biedt dan het origineel. Ook hier geldt dat je het best eerst kunt kijken of je distributie dit al niet beschikbaar heeft als installeerbaar pakket. Zo niet is ook deze software vij te verkrijgen van het internet. Vul ook hier voor de x het juiste versie nummer in.

wget http://forchheimer.se/transset-df/transset-df-x.tar.gz
tar zcvf transset-df-x.tar.gz
cd transset-df-x
make
su -c 'make install'

Ook bij transset-df kunnen problemen optreden voor onder andere Debian gebruikers. De oplossing is identiek aan die van xcompmgr, alleen moet dit uitgevoerd worden voor het make commando. Wanneer je deze oplossing al uitgevoerd hebt hoeft dit geen tweede keer mits je je console niet gesloten hebt.

- xbindkeys

Deze software is erg gemakkelijk wanneer je transparantie wilt instellen met de muis. (Met dank aan gentoo-wiki voor de tip.) Bijna alle distributies hebben dit als installeerbaar pakket. Mocht je dit vanuit source willen installeren werkt dit op de zelfde manier.

Bash watchdog

De composite extension staat nog in zijn kinderschoenen en dat heeft helaas tot het gevolg een gebrek aan stabiliteit. Daarom volgt hier een bash script waardoor je xcompmgr crashes eigenlijk nouwelijks merkt op een redelijk snelle machine. Dit is natuurlijk een tijdelijke en grove oplossing. Naar mate de software verder ontwikkeld wordt zullen deze crashes ook verdwijnen en wordt dit overbodig. Dit script hoort thuis in je PATH. Bijvoorbeeld /usr/bin/.

/usr/bin/xcompmgrd

#!/bin/bash
#xcompmgr crash watchdog en starter

case "$1" in
  "start" )
     if [ -f ~/.xcompmgrd.pid ]
     then
       echo "watchdog draait al"
     else
       $0 startd `cat ~/.xcompmgrd` &> /dev/null &
       echo "watchdog gestart"
     fi
  ;;
  "stop" )
    if [ -f ~/.xcompmgrd.pid ]
    then
      kill `cat ~/.xcompmgrd.pid`
      killall xcompmgr
      rm ~/.xcompmgrd.pid
      echo "watchdog gestopt"
    else
      echo "watchdog draait niet"
    fi
  ;;
  "startd" )
    while [ 1 ]
    do
      echo $[$PPID+1] > ~/.xcompmgrd.pid
      xcompmgr "$2" &> /dev/null
    done
  ;;
  * )
    echo "xcompmgr crash watchdog en starter"
    echo "gebruik:"
    echo "$0 actie"
    echo "  acties:"
    echo "  start (start xcompmgr en watchdog)"
    echo "  stop (stop xcompmgr en watchdog)"
    echo "  startd (interne optie voor het starten van de watchdog)"
  ;;
esac

Configuratie van de software

Er is maar weinig configuratie nodig. Ten eerste zullen we xbindkeys configureren zodat je met de muis transparantie per window kunt regelen door met het scrollwieltje te draaien terwijl je ctrl ingedrukt houdt. De configuratie bevindt zich in ~/.xbindkeysrc

"transset-df --min 0.1 -p --dec 0.1"
 control + b:4

"transset-df -p --inc 0.1"
 control + b:5

Ten tweede gaan we de opties voor xcompmgr instellen. Dit hebben we in ons bash script verwerkt in een configuratie bestandje en is daarom gemakkelijk aan te passen. Kijk voor de volledige lijst aan opties in de xcompmgr manpage (man xcompmgr). Deze opties geven je soft shadows en fading voor zowel de windows als de menu's.

echo -n "-cCfF" > ~/.xcompmgrd

Je kunt nu nog je window manager zo instellen dat "xbindkeys" en "xcompmgrd start" automatisch gestart worden bij het starten van de window manager. Dit is bij iedere window manager verschillend. Kijk in de documentatie van jouw window manager hoe je automatisch programma's kunt laten starten. Wanneer je video af wilt spelen in een transparant window kun je de xshm driver gebruiken. Bijvoorbeeld gxine start je met gxine -V xshm.

Het resultaat

Het resultaat mag er wezen. Nu heb je een feature aan eye-candy in je desktop die niet veel mensen hebben. Een screenshot van mijn resultaat volgt hieronder. Dit screenshot is gemaakt op een Centrino laptop met een Intel 855GM grafische kaart en Debian sid. Je hebt dus geen megahardware nodig om een mooi resultaat neer te zetten.

xcompmgrd

Het resultaat

 

© 2002-2008 - Linux-box.nl en bijdragende auteurs