Lighthttp, Dbus и MyApp, без X11

Я работаю в системе без X11, myapp, которая регистрирует сервер dbus, приложение php, которое должно отправлять на сервер сообщение через dbus.

На машине для разработки все работало задушевно (с gnome, X11), но когда я развернул на сервере без X11, я сталкивался с каждым вызовом dbus:

# process status 
ps ax | grep dbus
2033 ?        Ss     0:00 /usr/bin/dbus-daemon --system
2383 pts/0    S+     0:00 grep --color=auto dbus


# listing names
dbus-send --session --print-reply --dest="org.freedesktop.DBus" /org/freedesktop/DBus  org.freedesktop.DBus.ListNames  
Failed to open connection to "session" message bus: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11

# from php running with system("<above command> 2>&1"); I get same response

./myapp 
terminate called after throwing an instance of 'DBus::Error'
what():  Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
Aborted
# same when calling into DBus::Connection bus = DBus::Connection::SessionBus();

Если я добавляю в./.bashrc следующий скрипт

if test -z "$DBUS_SESSION_BUS_ADDRESS" ; then
    ## if not found, launch a new one
    eval `dbus-launch --sh-syntax --exit-with-session`
    echo "D-BUS per-session daemon address is: $DBUS_SESSION_BUS_ADDRESS"
fi
#reboot
ps ax |grep dbus
2023 ?        Ss     0:00 /usr/bin/dbus-daemon --system
2389 pts/0    S      0:00 dbus-launch --sh-syntax --exit-with-session
2390 ?        Ss     0:00 /usr/bin/dbus-daemon --fork --print-pid 4 --print-address 6 --session
2392 pts/0    S+     0:00 grep --color=auto dbus

затем из той же оболочки

dbus-send --session --print-reply --dest="org.freedesktop.DBus" /org/freedesktop/DBus  org.freedesktop.DBus.ListNames 

выводит имя моего сервера, но из php

system("above command"); same error, and

system ("echo system("eval 'dbus-launch --auto-syntax' dbus-send --session --print-reply --dest=\"org.freedesktop.DBus\" /org/freedesktop/DBus  org.freedesktop.DBus.ListNames  2>&1");

не перечисляет имена.

Вопрос в том, как присоединиться с lighthttpd к существующему сеансу dbus или любым другим вариантам.

Спасибо

2 ответа

Вы скомпилировали dbus с поддержкой x11. Так что dbus-launch создаст проблемы. Попробуйте $ export DISPLAY=:0 и посмотрите, можете ли вы использовать dbus-launch

или напрямую запустить демон $ dbus-daemon --session --print-address экспортировать адрес в DBUS_SESSION_BUS_ADDRESS

Спасибо, DISPLAY=:0 не совсем решил проблему.

Я не перекомпилировал dbus без X11, но я использую системную шину и все в порядке. Я должен использовать системную шину, потому что сервер lighttp общается с сервисом через dbus.actualy
Я включил права в конфигурационных файлах dbus и все в порядке.

Другие вопросы по тегам