[[Vorlage(Archiviert)]] {{{#!vorlage Hinweis DCOP wird von KDE 3.X benutzt, DCOP wird in KDE 4 nicht mehr verwendet. Dort wurde u.a. auf [wikipedia:D-Bus:] umgestellt. }}} {{{#!vorlage Wissen [:Terminal: Ein Terminal öffnen] [:Programme_starten: Ein Programm starten] }}} [[Inhaltsverzeichnis(2)]] Das '''D'''esktop '''Co'''mmunications '''P'''rotocol '''DCOP''' erlaubt es KDE-Programmen, untereinander zu kommunizieren. Man kann also aus Programm A heraus eine Funktion des Programms B aufrufen. Zum Einsatz kommt dies beispielsweise bei Videoplayern, die temporär den Bildschirmschoner deaktivieren. Außerdem ist es möglich, mittels des DCOP-Clients ``dcop`` per Kommandozeile gezielt bestimmte Funktionen von laufenden KDE-Programmen auszuführen. Besonders nützlich ist dies bei Shellskripten. Eine mögliche Anwendung ist die Steuerung von Medienplayern mittels Multimediatasten der Tastatur. Bei ubuntuusers.de gibt es dafür ein [:Archiv/Skripte/Multimedia-Tasten_unter_KDE: Skript], mit dem diverse Medienplayer komfortabel per Tastendruck gesteuert werden können. Außerdem können dcop-Befehle auch für die Programmsteuerung über Fernbedienung ([:Lirc:]) verwendet werden. [[Anker(dcop)]] = Der textbasierte DCOP-Client = Die Verwendung des DCOP-Clients ist denkbar einfach. Man startet ein Terminal [1] und gibt ein {{{#!vorlage Befehl dcop ZU_STEUERNDES_PROGRAMM KOMMANDO }}} Dies setzt allerdings voraus, dass man das Kommando bereits kennt. Um herauszufinden, welches Programm welche DCOP-Kommandos bietet, startet man einfach {{{#!vorlage Befehl dcop }}} ohne Parameter. Es werden nun alle laufenden Programme aufgelistet, die DCOP unterstützen. Laufen mehrere Instanzen des gleichen Programms, wird zur Unterscheidung noch eine Nummer (genauer gesagt: die [http://de.wikipedia.org/wiki/Process_ID PID] {de} ) angefügt. Die Ausgabe von ``dcop`` könnte also beispielsweise so aussehen: {{{kwin kicker kded konqueror-5572 konqueror-5555 adept_notifier kdesktop ksmserver }}} Will man nun wissen, welche Kommandos von den einzelnen Programmen zur Verfügung gestellt werden, führt man ``dcop PROGRAMM`` aus, also beispielsweise {{{#!vorlage Befehl dcop kdesktop }}} {{{#!vorlage Hinweis Man kann die Tabulator-Taste zur automatischen Vervollständigung verwenden. }}} Nun erhält man eine Liste der verfügbaren Objekte: {{{qt KBookmarkManager-/home/otto/.kde/share/apps/konqueror/bookmarks.xml KBookmarkNotifier KDesktopIface (default) KDirNotify-1 KDirNotify-2 KIO::Scheduler KScreensaverIface KShortURIFilterIface KURIIKWSFilterIface KURISearchFilterIface KonqUndoManager LocalDomainURIFilterIface MainApplication-Interface kdesktop ksycoca }}} Jedes dieser Objekte stellt bestimmte Funktionen zur Verfügung. Weiter geht es beispielsweise mit {{{#!vorlage Befehl dcop kdesktop KDesktopIface }}} Hier werden nun die Funktionen des Objekts ``KDesktopIface`` angezeigt, darunter {{{void setWallpaper(int desk,QString wallpaper,int mode) void setWallpaper(QString wallpaper,int mode) }}} Das bedeutet: ``setWallpaper`` gibt es in zwei Versionen. Die eine erwartet eine Ganzzahl ``desk``, ein Textargument ``wallpaper`` und eine Ganzzahl ``mode``. Bei der anderen Version kann man den ersten Parameter weglassen. Was diese Parameter bedeuten, lässt sich durch einfaches Ausprobieren herausfinden. So führt das ``dcop``-Kommando {{{#!vorlage Befehl dcop kdesktop KDesktopIface setWallpaper ~/tollesbild.png 1 }}} dazu, dass auf allen Arbeitsflächen die Datei '''~/tollesbild.png''' als zentriertes Hintergrundbild gesetzt wird, und mit {{{#!vorlage Befehl dcop kdesktop KDesktopIface setWallpaper 2 ~/nocheinbild.png 6 }}} richtet man '''~/nocheinbild.png''' als skaliertes Hintergrundbild der Arbeitsfläche 2 ein. Ob das auch geklappt hat, testet man mit {{{#!vorlage Befehl dcop kdesktop KBackgroundIface currentWallpaper 1 }}} und {{{#!vorlage Befehl dcop kdesktop KBackgroundIface currentWallpaper 2 }}} Man erhält als Rückmeldung jeweils den Dateinamen des Hintergrundbildes. [[Anker(kdcop)]] = KDCOP - Der grafische DCOP-Browser = Da es sehr mühsam ist, mittels Kommandozeile DCOP-Kommandos herauszufinden, bietet sich die Verwendung von KDCOP an. Es handelt sich hierbei um eine grafische Oberfläche, die eine übersichtliche Baumstruktur bietet. Gestartet wird KDCOP mit dem Befehl [2] {{{#!vorlage Befehl kdcop }}} [[Bild(./kdcop.png, 200, right)]] Ähnlich wie bei einem Dateimanager kann man in der Baumansicht die Programme und deren Objekte aufklappen, und die vorhandenen Funktionen mit Doppelklick ausführen. Bei Funktionen, die Argumente erwarten, werden diese in einem Fenster abgefragt. Den Typ des Rückgabewerts kann man schon in der Baumansicht erkennen, da er vor dem eigentlichen Funktionsnamen angeführt wird. Der folgenden unvollständigen Liste kann man häufig auftretende Datentypen entnehmen: ||<-2 rowclass="kde-titel">Von DCOP verwendete Datentypen|| ||Bezeichnung||Bedeutung|| ||int||Ganzzahl|| ||Q(C)String||Zeichenkette|| ||Q(C)StringList||mehrere Zeichenketten|| ||void||(keine Rückgabe)|| Wenn eine Funktion Rückgabewerte liefert, so werden diese im unteren Bereich des Fensters ausgegeben. Sie können mit ''"Bearbeiten -> Kopieren"'' in die Zwischenablage kopiert werden. [[Anker(Beispiele)]] = Beispiele = Um die mächtigen Möglichkeiten von DCOP zu demonstrieren, werden hier einige Beispiele angeführt: [[Anker(Shutdown)]] == Rechner herunterfahren == Häufig wird nach einer Möglichkeit gefragt, das System ohne Eingabe von [:sudo:] herunterzufahren. Neben der [:Herunterfahren: im Artikel "Herunterfahren" beschriebenen Methode] geht es auch komfortabel mit dem dcop-Kommando {{{#!vorlage Befehl dcop --all-sessions --all-users ksmserver ksmserver logout 0 2 0 }}} Hinweise zu den Parametern findet man bei Linux-User 02/05 ( siehe [#Links Links]) [[Anker(kmix)]] == Lautstärke setzen mit kmix == Wenn kmix läuft, kann man mit diesem Befehl die Lautstärke des Hauptkanals auf 50% setzen: {{{#!vorlage Befehl dcop kmix Mixer0 setMasterVolume 50 }}} Die einzelnen Soundkanäle sind mit bei 0 beginnenden Ganzzahlen durchnummeriert, und sind je nach Soundkarte unterschiedlich belegt. Mit dieser Eingabe kann man sich die Lautstärke der einzelnen Kanäle anzeigen lassen: {{{#!vorlage Befehl i=0; while [ "$(dcop kmix Mixer0 isAvailableDevice $i)" = "true" ]; do echo "Kanal $i: Lautstärke $(dcop kmix Mixer0 volume $i)%"; let i++; done }}} Der Befehl {{{#!vorlage Befehl dcop kmix Mixer0 setVolume 2 60 }}} setzt die Lautstärke von Kanal 2 auf 60% [[Anker(kopete-verbinden-trennen)]] == Kopete == Die Onlineverbindung von [:Kopete:] kann man mit {{{#!vorlage Befehl dcop kopete KopeteIface disconnectAll }}} trennen, und mit {{{#!vorlage Befehl dcop kopete KopeteIface connectAll }}} wiederherstellen. Dies ist nützlich, wenn man Spiele im Vollbildmodus startet. Ein einfaches Skript der Form {{{#!/bin/bash dcop kopete KopeteIface disconnectAll /pfad/und/name/des/spiels && dcop kopete KopeteIface connectAll }}} verhindert störende Popups, ohne dass man Kopete beenden bzw. neu starten muss. [[Anker(AusfHistory)]] == Verlauf des "Ausführen"-Fensters löschen == Startet man Programme mit [[Vorlage(Tasten, Alt+F2)]], so wird der ausgeführte Befehl in den Verlaufsspeicher aufgenommen. Um diesen zu löschen, kann man entweder die Datei '''~/.kde/share/config/kdesktoprc''' manuell bearbeiten, oder einfach {{{#!vorlage Befehl dcop kdesktop KDesktopIface clearCommandHistory }}} ausführen. == Steuerung über SSH == Will man Programme über eine SSH Verbindung steuern, so muss man in der SSH Session noch den Parameter ``--user`` angeben, damit dcop weiß, welche Session gemeint ist. Gibt man diesen Parameter nicht an, so erhält man die Fehlermeldung "ERROR: Couldn't attach to DCOP server!" {{{#!vorlage Befehl dcop --user ZU_STEUERNDES_PROGRAMM KOMMANDO }}} = Links = * [http://www.penguin-soft.com/penguin/man/1/dcop.html Manpage zu dcop] {en} * [http://www.digipedia.pl/man/kdcop.1.html Manpage zu kdcop] {en} * [http://www.pro-linux.de/t_wm/kde-dcop.html Pro-Linux.de: KDE mit dcop steuern] {de} * [http://www.linux-user.de/ausgabe/2005/02/039-dcop/index.html LinuxUser 02/2005: Aufgabenautomatisierung in KDE mit DCOP] {de} # tag: KDE, Programmierung, Desktop