来自另一个用户的 DBus
Posted
技术标签:
【中文标题】来自另一个用户的 DBus【英文标题】:DBus from another user 【发布时间】:2012-08-20 20:38:35 【问题描述】:我正在尝试从 php 程序连接到 DBus。
当我从命令行运行程序时,它可以工作,但是当它由 Apache 网络服务器(以用户 apache
运行)运行时,它无法连接到总线。
我尝试使用system
调用qdbus
和使用python-dbus 调用Python 脚本,但是这两种方法都不起作用。另外,我无法编译this PHP extension,但我认为它不会解决我的问题。
我认为问题在于提供会话总线的 DBus 守护程序以我的用户身份运行(系统总线一以messagebus
运行),但 PHP 以apache
运行。
如何连接到其他用户的总线?
(This 不适合我。)
【问题讨论】:
您使用的是什么操作系统/发行版? 我正在运行 PCLinuxOS(基于 Mandriva) 【参考方案1】:首先,您是否有尝试调用的 dbus 方法? Dbus 仅仅是传输层,你需要一个承载 dbus 方法的程序和一个调用 dbus 方法的程序。我假设你有一个你想从你的 php 程序中调用的 dbus 方法。
apache 是如何尝试调用您的 dbus 方法的?如果您使用 php 中的 system() 方法或类似方法来调用 qdbus,则会失败。 PHP 由 apache 运行,apache 没有像您的用户那样的自动登录 dbus 进程,也没有 X11 访问权限。这意味着为了让您的 apache 拥有 dbus,您必须使用:
eval 'dbus-launch --auto-syntax' [command]
使用 PHP 的 system() 时。但这并不是最佳选择。
一些解决方案是:
-
以您的用户身份运行 apache。
在系统总线上运行 dbus 并公开方法并允许 apache 从 dbus 配置文件中调用它们。这需要 root 访问权限,这会使事情复杂化。
研究将会话 dbus 方法公开给其他用户是否可行。最好有一个可以使用的 dbus-php 库。我很确定只要 apache 可以调用 dbus 方法,在 dbus 配置文件夹中有一个 xml 文件暴露它应该可以工作。
【讨论】:
以上是关于来自另一个用户的 DBus的主要内容,如果未能解决你的问题,请参考以下文章
将密码安全地传递给另一个程序(单独的 shell/dbus)
在 Gnome 中,dbus-monitor 上的啥信号表明用户正在注销?