来自其他用户的DBus

时间:2012-08-25 16:23:17

标签: php dbus

我正在尝试从PHP程序连接到DBus。

当我从命令行运行程序时,它可以工作,但是当它由Apache webserver运行时(以用户apache运行),它无法连接到总线。

我尝试使用qdbus调用system并使用python-dbus调用Python脚本,但它无论如何都不起作用。此外,我无法编译this PHP extension,但我认为它不会解决我的问题。

我认为问题在于提供会话总线的DBus守护程序作为我的用户运行(系统总线运行为messagebus),但PHP运行为apache

如何连接到其他用户的总线?

This对我不起作用。)

1 个答案:

答案 0 :(得分:0)

首先,你有一个你试图打电话的dbus方法吗? Dbus只是传输层,你需要一个托管dbus方法的程序和一个调用dbus方法的程序。我假设您有一个想要从php程序调用的dbus方法。

apache如何尝试调用您的dbus方法?如果你使用system()方法或类似的PHP来调用qdbus,那将失败。 PHP由apache运行,apache没有像你的用户那样的自动登录进程,也没有X11访问权限。这意味着为了让你的apache拥有dbus,你必须使用:

eval 'dbus-launch --auto-syntax' [command]

使用PHP的系统()时。但这并非最佳。

有些解决方案是:

  1. 以您的用户身份运行apache。
  2. 在系统总线上运行dbus并公开方法并允许apache从dbus配置文件中调用它们。这需要root访问权限,这可能会使问题复杂化。
  3. 研究是否将会话dbus方法暴露给其他用户。最好应该有一个你可以使用的dbus-php库。我很确定只要apache可以调用dbus方法,在dbus配置文件夹中有一个xml文件,暴露它应该可以工作。