KDesktop DCOP im Script zeitgesteuert (at / cron)

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Pendevil
Beiträge: 24
Registriert: 23.06.2007 21:55:02
Lizenz eigener Beiträge: GNU Free Documentation License

KDesktop DCOP im Script zeitgesteuert (at / cron)

Beitrag von Pendevil » 24.06.2007 00:05:14

Hallo Debian-Forum,

ich versuche mit Hilfe von 'dcop' innerhalb eines Scriptes den Hintergrund von KDesktop zeitgesteuert ( 'at' / 'cron' ) zu ändern. Das Script funktioniert auch, nur kann ich es nicht mit 'at' oder 'cron' (crontab) aufrufen, weil da scheinbar die letzte Anweisung nicht ausgeführt wird:
'dcop kdesktop KBackgroundIface setWallpaper $PICFILE 6'
Warum nicht? wenn ich das Script von 'konsole' aus aufrufe funktioniert das einwandfrei.
Hier mal das gesammte kurze Script:

Code: Alles auswählen

#!/bin/sh

# Webcam-Image-URL
PICURL=http://www.neuss.de/webcam/current.jpg

# lokaler Dateiname löschen
PICFILE=.bgfile.jpg
rm -f $PICFILE

# Bild holen und lokal speichern
wget -q -O $PICFILE $PICURL

# Bild auf den Hintergrund legen
dcop kdesktop KBackgroundIface setWallpaper $PICFILE 6

Wie der intelligente Leser bemerkt, hole ich mir ein Bild von einer Webcam per URL mit 'wget' aus dem Internet und will es dann mit dem 'dcop' Befehl auf den Hintergrund bringen.
Das Script holt auch mit 'at' oder 'cron' das Bild ab und speichert es lokal, aber es wird nicht auf dem Hintergrund angezeigt (also der 'dcop' Befehl nicht ausgeführt). Aber NUR DANN, wenn ich es per at oder cron mache. Wenn ich das Script von Hand aufrufe, funktioniert das 1a.

Woran kann das liegen? Was gibt es sonst noch für Möglichkeiten, das Script alle 15 Minuten laufen zu lassen?

Liebe Grüße,
Daniel
Wenn Windows die Antwort ist, dann war's 'ne dumme Frage!

Timo
Beiträge: 403
Registriert: 15.08.2003 14:26:57
Wohnort: Berlin & Düsseldorf
Kontaktdaten:

Beitrag von Timo » 24.06.2007 03:36:44

Herzlich Willkommen im Forum! :D

was hast du denn bei cron eingetragen?
Debian GNU/Linux testing
...und für den Desktop auch das Beste: KDE !!!

Benutzeravatar
Pendevil
Beiträge: 24
Registriert: 23.06.2007 21:55:02
Lizenz eigener Beiträge: GNU Free Documentation License

Beitrag von Pendevil » 24.06.2007 06:17:00

Hallo Timo :-)

Meine crontab:

Code: Alles auswählen

# Shell setzen
SHELL=/bin/sh
# Mailemfänger löschen (keine Mail)
MAILTO=""
#
# Eigentliche crontab
0,5,10,15,20,25,30,35,40,45,50,55 * * * *       /home/daniel/bin/setBGPic >> ~/.log/setSatPic.log

'/home/daniel/bin/setBGPic' ist das Script oben (ausführbar).

Ich glaube aber das Problem liegt an der 'dcop'-Zeile im Script. Da ist irgendetwas nicht richtig. Ich hatte jetzt auch auf der Kommandozeile Probleme mit dem 'dcop'. Scheinbar wechselt der nicht immer das Bild :-( Ich kann aber nicht ausmachen, woran das liegt.

Ich habe das Problem jetzt umgangen, indem ich alle 5 Minuten nur noch das Bild (http://www.neuss.de/webcam/current.jpg) hole. Außerdem habe ich im (KDE) Kontrollzentrum die Hintergrundverarbeitung auf "Diashow" mit nur diesem Bild gesetzt. Jetzt wird alle 5 Min. das Bild neu geholt und durch die Diashow alle 5 Min. aktualisiert.

Ich finde das nicht besonders elegant, aber es geht.

Vielleicht wechselt der 'dcop' Befehl den Hintergrund nicht, weil es immer der selbe Dateiname ist !? Nur, über Kommandozeile funktionierte es (vor meinem letzten Reboot).
Da brauche ich wohl tiefere Einblicke in die KDE- und DCOP-Interna.

Gruß,
Daniel
Wenn Windows die Antwort ist, dann war's 'ne dumme Frage!

elraki
Beiträge: 50
Registriert: 09.12.2006 13:47:49

Beitrag von elraki » 17.07.2007 12:34:02

Ist zwar etwas verspätet, aber ich hatte vor kurzem das Selbe Problem.

Ich habs zwar schlussendlich nicht als Cron gemacht, aber der Hinweis unter [1] sollte helfen:
Sie können diese Kommandos direkt in einer Konsole innerhalb von KDE ausführen. Wenn Sie DCOP-Kommandos irgendwo anders, zum Beispiel in einem Cron-Skript ausführen wollen, müssen Sie die Umgebungsvariable DCOPSERVER setzen (genauso, wie in der ersten Zeile der Datei ~/.DCOPServer_hostname_:0). Zum Beispiel mit:

Code: Alles auswählen

#!/bin/sh
DCOPSERVER=`cat /home/yourhome/.DCOPserver_yourhostname_:0 | grep local`
export DCOPSERVER
dcop kmix Mixer0 setMasterVolume 0
Erik

[1] http://docs.kde.org/stable/de/kdemultim ... mples.html

Antworten