Tips en Trucs 2010

Vensters besturen met WMIface

WMIface wordt gebruikt in scripts om de vensteromgeving te bedienen. WMIface werkt samen met elke EWMH-compatibele vensteromgeving, zoals KWin van KDE, Metacity van GNOME, Compiz, enz.

WMIface vervangt wmctrl. Wmctrl wordt niet langer onderhouden en aangepast aan nieuwe vensteromgevingen en mogelijkheden. WMIface heeft meer mogelijkheden dan het aanspreken van de mogelijkheden van de vensteromgeving en is daardoor eenvoudiger en handiger in het gebruik.

WMIface is afhankelijk van de Qt4 QtCore en de X11 bibliotheken. KDE 3 gebruikers moeten enkele eenvoudige aanpassingen uitvoeren. Deze staan beschreven in het /usr/share/doc/packages/wmiface/README bestand van WMIface. WMIface kan je in openSUSE 11.2 best installeren via de website http://software.opensuse.org/search. Bij de verschillende pakketversies van wmiface kies je best niet de UNSTABLE of FACTORY versies. UNSTABLE versies zijn nog niet grondig getest en FACTORY versies horen bij de toekomstige openSUSE 11.3 distributie. Zowel de UNSTABLE als de FACTORY versies kunnen uw systeem zo ingrijpend aanpassen dat deze onstabiel wordt.

Drie voorbeelden

De webbrowser Konqueror starten, naar linux.pindanet.be surfen en 10 seconden later Konqueror terug afsluiten:
#!/bin/bash
konqueror http://linux.pindanet.be --name pindanet &
sleep 10
window=$(wmiface findNormalWindows "" "pindanet Konqueror" "" "" 0 false)
wmiface closeWindow $window
Het volgende script kan je enkel stoppen door Ctrl+C te drukken op het ogenblik dat het bureaublad met de terminal van waaruit je het script startte zichtbaar is. Daarbij moet het terminalvenster actief zijn. Traag de verschillende bureaubladen doorlopen:
#!/bin/bash
while true; do
sleep 10
desktop=$(wmiface currentDesktop)
total=$(wmiface numberOfDesktops)
if test $desktop = $total; then
wmiface setCurrentDesktop 1
else
wmiface setCurrentDesktop $(( desktop + 1 ))
fi
done
Alle KWrite vensters minimaliseren:
#!/bin/bash
wmiface findNormalWindows "" " Kwrite" "" "" 0 false | \
while read ln; do
wmiface minimize $ln
done

Opmerking: WMIFace is enkel geschikt voor gebruik in scripts. Programma's gebruiken klassen uit libkdeui (NET*, KWindowSystem, KWindowInfo). WMIface wordt dus gebruikt vanop de opdrachtregel en kan voor problemen zorgen indien het gebruikt wordt vanuit programma's.

Opmerking: Sommige zaken los je gemakkelijker op als je geen gebruik maakt van een script en WMIface. Zeker als het om eenvoudige zaken gaat. Een voorbeeld: als je de grootte van een bepaald venster wilt beïnvloeden, is het gebruik van de Speciale vensterinstellingen (Alt+F3 > Geavanceerd) eenvoudiger. WMIface is speciaal ontworpen om de vensteromgeving te manipuleren en is daardoor beter dan het communiceren met de applicaties via D-Bus. Een voorbeeld: de opdracht qdbus org.kde.konqueror-4770 /konqueror/MainWindow_1 raise vraagt aan de applicatie om het venster naar de voorgrond te brengen, maar dat kan door de vensteromgeving geblokkeerd worden (KWin blokkeerd niet actieve vensters die de aandacht opeisen), de opdracht wmiface raiseWindow 60817415 zal het venster wel op de voorgrond plaatsen omdat dit rechtstreeks aan de vensteromgeving wordt gevraagd.

Voor meer details raadpleeg je het /usr/share/doc/packages/wmiface/README bestand van WMIface.