Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: Linux Forum Linux-Web.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

10.09.2009, 14:08

DBUS / PHP Problem

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

3

10.09.2009, 22:34

is das schlimm in anderen foren nachzufragen ? irgendwie scheint ja keiner da ne antwort zu wissen :(

4

10.09.2009, 22:41

Das Kreuzposten ist ein wenig unfair den Helfenden Gegenüber.

Man macht es eigentlich nur (das gleiche Problem in verschiedenen Foren posten), wenn es wirklich sehr dringend ist. Und auch dann mit einem Querverweis auf das andere Forum.

So wissen alle Beteiligten bescheid, wie Stand der Dinge ist und es lässt sich ggf. doppelte Arbeit sparen.

Edit: Ich habe mal ein paar Foren angesurft: Hast du irgendein Forum ausgelassen? :()
Tipp 1: NT - I. Paulus Brief [1. Thessalonicher]- 5, 21-22
Tipp 2: http://www.linux-web.de/thread.php?threadid=7741

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »PaulchenKuhn« (10.09.2009, 22:48)


5

10.09.2009, 23:06

ja das mit den querverweisen wusst ich nich editier ich aber jetzt ebend :)
irgendwie kann mir bei dem problem bis jetzt keiner helfen :(

Querverweise:

http://www.linuxforen.de/forums/showthre…610#post1724610
http://www.linux-club.de/viewtopic.php?f…=648880#p648880
http://www.linux-forum.de/dbus-problem-30080.html

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »izzetee« (10.09.2009, 23:07)


6

10.09.2009, 23:23

Versuch den Befehlsaufruf aus der php-Datei wie nachstehend.

Quellcode

1
shell_exec("sudo screen -dmS Hier-steht-deine-Befehlskette");

Dazu noch das programm screen installieren und in sudoers eintragen.




Beitrag editiert: COLOR-Tags entfernt
Tipp 1: NT - I. Paulus Brief [1. Thessalonicher]- 5, 21-22
Tipp 2: http://www.linux-web.de/thread.php?threadid=7741

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »PaulchenKuhn« (10.09.2009, 23:25)


7

10.09.2009, 23:52

hm.. wenn man

Quellcode

1
sudo screen -dmS wwwrun dbus-launch --sh-syntax > .dbus.sh

eingibt möchte er das root passwort haben (wenn man nicht als root eingelogt ist was der apache natürlich nicht ist), gibts da ne möglichkeit das ohne das root passwort ?

8

11.09.2009, 08:45

moin moin,

klar geht das. Du muszt die /etc/sudoers anpassen. Das solltest du aber _NUR_ ueber den Befehl visudo machen.
for Windows problems: reboot
for Linux problems: be root

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »BorneBjoern« (11.09.2009, 08:46)


9

11.09.2009, 18:27

ok das werd ich nacher mal ausprobieren :) kenne screen noch nicht muss ich mich erstmal schlau machen :) danke für die antworten

10

11.09.2009, 20:50

hallo, ich habs nun ausprobiert

in visudo hab ich folgendes hinein geschrieben

Quellcode

1
wwwrun  ALL=NOPASSWD: /usr/bin/screen -dmS wwwrun dbus-launch --sh-syntax > .dbus.sh


und in der php datei

Quellcode

1
shell_exec('sudo screen -dmS wwwrun dbus-launch --sh-syntax > .dbus.sh');


doch leider startet sich der dienst nicht :(

dafür kommen unzählige

Quellcode

1
wwwrun    1110  0.1  2.8  29236  7384 ?        S    20:40   0:00 /usr/sbin/httpd2-prefork -f /etc/apache2/httpd.conf

prozesse zu stande :/

was mach ich falsch ?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »izzetee« (11.09.2009, 20:52)


11

11.09.2009, 23:25

Der Eintrag in /etc/sudoers sollte eher so aussehen:

Quellcode

1
wwwrun      ALL=(root) NOPASSWD:/usr/bin/screen
Tipp 1: NT - I. Paulus Brief [1. Thessalonicher]- 5, 21-22
Tipp 2: http://www.linux-web.de/thread.php?threadid=7741

12

13.09.2009, 14:14

hallo :)

danke das starten des daemons klappt nun mit dem screen aufruf *freu*
aber nun folgendes, wie kann ich die .dbus.sh einbinden ? Funktioniert der source befehl auch mit screen ?

Quellcode

1
shell_exec('sudo screen -dmS wwwrun source ./.dbus.sh && dbus-send --print-reply --dest=net.sourceforge.mumble.murmur --type=method_call / net.sourceforge.mumble.Meta.stop int32:1');


wenn ich das eingebe passiert leider garnichts obowhl die server instanz von mumble gestoppt werden sollte. Muss der Name von dem Screen identisch sein wie beim aufruf des daemons ? also wwwrun ? oder sollte die 2te shell_exec nen anderen namen bekommen wie wwwrun2 ?

13

13.09.2009, 14:53

ok aus irgendeinem mir total nicht erklärlichen grund wird nix in die .dbus.sh geschrieben das muss ich nochmal kontrollieren und fixen.

Weiss jemand warum er nichts in die .sh datei schreibt ? eig. sollte das so passieren -.-

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »izzetee« (13.09.2009, 14:56)


14

13.09.2009, 16:50

ok der dbus launch prozess und die dbus datei lassen sich über das script

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
#! /bin/bash 
DIR=$HOME/murmur
DBUSFILE=$DIR/.dbus.sh 
DBUS_SESSION_BUS_ADDRESS=invalid:/ 
[ -f $DBUSFILE ] && . $DBUSFILE 
if ! dbus-send --print-reply --dest=org.freedesktop.DBus --type=method_call / org.freedesktop.DBus.GetId 2> /dev/null > /dev/null; then   
echo "Launching D-Bus session"   
dbus-launch --sh-syntax > $DBUSFILE   . $DBUSFILE   
if ! dbus-send --print-reply --dest=org.freedesktop.DBus --type=method_call / org.freedesktop.DBus.GetId 2> /dev/null > /dev/null; then     
echo "Failed to launch session DBUS, bailing out."   
fi 
fi

starten/erstellen (das hab ich dbusDaemonStart.sh genannt)

Mit

Quellcode

1
shell_execute('./dbusDaemonStart.sh')

lässt sich die Datei ohne Probleme ausführen, und der prozess wird auch unter dem user wwwrun gestartet. Die .dbus.sh hat auch die nötigen chmod rechte.

einzige problem ist nun die source datei unterzubringen damit wwwrun die benutzen kann

weder

Quellcode

1
shell_exec('sudo screen -dmS source .dbus.sh && <dbus befehl>')

noch

Quellcode

1
shell_exec("bash -c "source .dbus.sh && <dbus befehl>""))

funktioniert
-.-

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »izzetee« (13.09.2009, 16:51)


15

16.09.2009, 10:29

ok, das Problem ist nun gegessen.
Bevor ich garnicht mehr weiter komm benutze ich nun den globalen system dbus prozess.
Das funzt ohne Probleme.

Danke für eure Hilfe und geduld mit mir :)

Thema bewerten