Hallo,
ich hoffe das ich den richtigen Forenbereich gewählt habe.
System OpenSuse 11.1
Ausgangssituation:
Ich möchte mit DBUS ein Programm steuern (Mumble). Das Funktioniert auch wunderbar wenn man die Anweisungen von
http://mumble.sourceforge.net/Running_Murmur
http://mumble.sourceforge.net/DBus
befolgt auch wunderbar. Zumindest wenn man sich per Shell eingeloggt hat.
Wenn man
|
Quellcode
|
1
|
dbus-launch --sh-syntax > ~/.dbus.sh
|
als User mit shell ausführt wird ein DBUS Prozess für den gerade angemeldeten User erstellt und die "session" Daten in einer sh datei gespeichert. Mit
|
Quellcode
|
1
|
source ~/.dbus.sh
|
sag ich ihm auch wo er die Session Daten finden kann. Und mann kann während der session alle dbus befehle einwandfrei ausführen. Wie z.B.
|
Quellcode
|
1
|
dbus-send --print-reply --dest=net.sourceforge.mumble.murmur --type=method_call / net.sourceforge.mumble.Meta.getAllServers
|
Problem:
so nun möchte ich aber per php shell_exec eine .sh Datei ausführen die z.B. den Befehl
|
Quellcode
|
1
|
dbus-send --print-reply --dest=net.sourceforge.mumble.murmur --type=method_call / net.sourceforge.mumble.Meta.getAllServers
|
ausführt. Und da ist mein Problem. Diese Datei wird natürlich vom Apache ausgeführt (user wwwrun). Dieser User hat keine Shell (ist standart auf /bin/false) gestellt. Man kann zwar mit
|
Quellcode
|
1
|
sudo -u wwwrun dbus-launch --sh-syntax > ~/.dbus.sh
|
ohne probleme den DBUS Prozess für wwwrun laufen lassen. Aber man kann ja per sudo nicht source angeben wenn der user auf /bin/false gestellt ist (was ich ungern ändern möchte). Deswegen kann man mit
|
Quellcode
|
1
|
sudo -u wwwrun dbus-send --print-reply --dest=net.sourceforge.mumble.murmur --type=method_call / net.sourceforge.mumble.Meta.getAllServers
|
nichts ereichen. Dann kommt folgende Fehlermeldung
|
Quellcode
|
1
|
Failed to open connection to session message bus: dbus-launch failed to autolaunch D-Bus session: Autolaunch error: X11 initialization failed.
|
Weil er halt nicht die nötigen Information aus der .dbus.sh besitzt (mann kann auch noch andere Syntax benutzen wie z.b. Binär ausgabe oder csh anstatt sh), das brachte mich aber nicht weiter.
Hier noch der Inhalt der .dbus.sh
|
Quellcode
|
1
2
3
|
DBUS_SESSION_BUS_ADDRESS='unix:abstract=/tmp/dbus-oHZGYWtBh8,guid=dc7a92146b5f9832847844154aa6e723';
export DBUS_SESSION_BUS_ADDRESS;
DBUS_SESSION_BUS_PID=13922;
|
Das manual dbus-daemon / dbus-send / dbus-laun hab ich mir natürlich angeguckt, diese manuals erzeugen leider bei mir sehr viel "Gehirn Gulasch" und ich kommt echt nicht mehr weiter.
Meine Frage ist nun, wie schaffe ich es das der user wwwrun nun auf die session daten des für wwwrun gestarteten DBUS Daemons zugreifen kann ? Oder gibts vllt ne andere lösung das ich im dbus-send die session id mitgeben kann ?
Danke schonmal im Vorraus
MfG
Izze