我在没有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
然后,从同一个shell
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会话或任何其他变体。
Thx
答案 0 :(得分:0)
你已经编译了dbus并支持x11。所以dbus-launch会产生问题。 尝试 $ export DISPLAY =:0 看看你是否能够使用dbus-launch
或直接启动守护程序 $ dbus-daemon --session --print-address 将地址导出到DBUS_SESSION_BUS_ADDRESS
答案 1 :(得分:0)
THX, DISPLAY =:0并没有完全解决问题。
没有X11,我没有重新编译dbus,但我正在使用 系统总线,没关系。我必须使用系统总线 因为lighttp服务器通过dbus.actualy与服务进行通信 我在dbus配置文件中启用了权限,就行了。