URL: https://www.overclockers.at/linux/dcop_was_kde_unter_der_haube_hat_pt_1_168266/page_1 - zur Vollversion wechseln!
KDE, das unter der GNU General Public License stehende, freie K Desktop Environment, hat eine Menge Fans - der eine wohl mindestens ebensogrosze Anzahl Gegner gegenuebersteht, die meinen, es waere ein Windows-Abklatsch, oder generell ein klobiges Stueck Software, dessen Einsatz auf einem X11-faehigen, unixoiden System - zum Beispiel GNU/Linux - sich nicht lohnt. Mit diesem kleinen Tutorial will ich nicht nur ein wenig auf die elegant gestalteten Interna von KDE eingehen, sondern auch eine wirklich nuetzliche Anwendungsmoeglichkeit eines der wesentlichen Bestandteile dieses Desktops aufzeigen: die von DCOP naemlich, dem Desktop Communication Protocol.
Auch wenn DCOP mit Release 4 von KDE, dessen erstes Technolgy Preview kuerzlich der staunenden Oeffentlichkeit praesentiert wurde, vom generischen, durch die freedesktop.org-Initiative standardisierten DBUS abgeloest wird, lohnt es sich doch auf jeden Fall, es mehr als eines Blickes zu wuerdigen - und das nicht nur, weil KDE 3.5 noch einige Zeit das Flaggschiff des KDE-Projekts bleiben wird.
DCOP ist ein applikationsuebergreifendes Kommunikationssystem, mit dem Programme Nachrichten untereinander austauschen koennen. Diese Nachrichten werden ueber den DCOP-Server - fuer jeden User, der eine KDE-Session laufen hat, ist ein solcher gestartet - zum Empfaenger geroutet, und von diesem entsprechend geparsed (ausgewertet).
Dieses System kann ueber viele verschiedene Wege genutzt werden - es existieren Bindings fuer einige weitverbreitete Programmiersprachen, darunter natuerlich C++ (die Sprache, in der KDE und das darunterliegende Qt-Toolkit von Trolltech implementiert sind), oder auch die wunderschoene Skriptsprache Ruby.
Aber, und das soll uns hier vordergruendig von Interesse sein, DCOP laesst sich auch ueber ein fuer UNIX-typisches Kommandozeilen-Tool, das den gar nicht zu kryptischen Namen `dcop` traegt, nutzen - und das durchaus clever, wie ich hoffentlich noch zeigen werde koennen.
Am besten, wir halten uns gar nicht zu sehr mit einer hochtechnischen Beschreibung auf, sondern stuerzen uns mitten ins Vergnuegen... In einer ordnungsgemaesz gestarteten KDE-Session starten wir einen Terminal-Emulator (z. B. Konsole, das zu KDE gehoert), mit der Shell unserer Wahl (in meinem Fall `bash` aus dem GNU-Projekt) in ihm. Um zu sehen, ob ein DCOP-Server laeuft, bedienen wir uns des Programmaufrufs `ps -ef | fgrep dcop`. Das liefert einen Output aehnlich dem Folgenden:
Code:colo@zealot ~ $ ps -ef | grep dcop colo 8542 1 0 Sep03 ? 00:00:26 dcopserver [kdeinit] --nosid colo 7546 7535 0 20:52 pts/11 00:00:00 grep --colour=auto dcop
Code:colo@zealot ~ $ dcop konsole-7534 kwin kicker konversation [b][ ... tatsaechlicher Output gekuerzt ... ][/b] kopete kwalletmanager kgpg akregator
Code:colo@zealot ~ $ dcop kopete qt 0x8446518 KIMIface KIO::Observer KIO::Scheduler KopeteChatWindow KopeteIface (default) MainApplication-Interface ManagerIface_contact html-widget113 html-widget195 kopete kopete-mainwindow#1 kopete-mainwindow#2 ksycoca mainWindow
Code:colo@zealot ~ $ dcop kopete KopeteIface QCStringList interfaces() QCStringList functions() QStringList contacts() QStringList reachableContacts() QStringList onlineContacts() QStringList fileTransferContacts() QStringList contactFileProtocols(QString displayName) QStringList contactsStatus() QString messageContact(QString contactId,QString messageText) QString onlineStatus(QString metaContactId) void messageContactById(QString metaContactId) bool addContact(QString protocolName [...] QString groupName) QStringList accounts() void connect(QString protocolName,QString accountId) void disconnect(QString protocolName,QString accountId) void connectAll() void disconnectAll() bool loadPlugin(QString name) bool unloadPlugin(QString name) void setAway() void setAway(QString msg) void setAway(QString msg,bool away) void setAvailable() void setAutoAway() void setGlobalNickname(QString nickname) void setGlobalPhoto(KURL photoUrl)
Hoe... MASSIV falsches Forum, wtf?! Bitte in's GNU/Linux- UNIX und *BSD-Forum verschieben
E: Danke fuer die Kooperation
#!/bin/sh
dcop kmix Mixer0 setMute 3 $(expr $(dcop kmix Mixer0 mute 3) = false)
Toggelt einen Channel (in dem Fall 3 -> dort hängen die Lautsprecher) auf mute ... praktisch wenn man nur einen Channel muten will und nicht alle.
Das auf einen Hotkey binden ... feddich.
Und wieso genau sollte man jetzt kde verwenden? Ich mein, ja es kann mehrerer grafische prozesse verwalten, es hat eine startleiste, mit der man programme starten kann, aber was genau kann kde, was wmii, fluxbox, xfce, enlightment, wii oder wwi nicht können?
Ich mein das beispiel ist recht nett, aber ich bin mir sicher, dass man mit minimalen änderungen am kopete source durchaus auch alles realisieren kann, was man überhaupt mit dem programm erreichen kann.
@derelict
Ich hab mehr oder weniger das gleiche programm für amixer geschrieben und mit xbindkeys eingebunden, ist nicht viel aufwendiger.
Ich mein ich kann schon verstehen, dass eine hand voll recht nette software mitgeliefert wird, aber diese kde libs sind so verdammt speicherlastig.
Ich will jetzt nicht irgendwie über kde herziehen, aber ich wüsste gerne, was euch dazu bewogen hat ausgerechnet kde zu verwenden
Vielleicht oeffnen dir ja die weiteren geplanten Teile dieser Mini-Serie die Augen.
Bis dahin: Urteile nicht ueber etwas, das du nicht im Ansatz kennst oder gar verstehst.
ZitatIch will jetzt nicht irgendwie über kde herziehen, aber ich wüsste gerne, was euch dazu bewogen hat ausgerechnet kde zu verwenden
Ich bin zwar XFCE-User, aber solche Artikel sind immer wieder interessant zu lesen. Tolle Arbeit COLO.
*****
Falls das jetzt falsch rübergekommen sein sollte, ich hatte in keinster weise vor deine arbeit runterzumachen, falls das so rübergekommen ist will ich mich echt dafür entschuldigen, nimms mir plz nicht übel
overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025