dbus PHP,没有$DISPLAY的X11,Dbus PHP无法启动dbus-daemon

$dbus = $dbus = dbus_bus_get(DBUS_BUS_SESSION);

$message = new \DBusMessage(DBUS_MESSAGE_TYPE_SIGNAL);

$message->setDestination("org.freedesktop.DBus");

$message->setAutoStart(true);

$dbus->sendWithReplyAndBlock($message, 1);

运行我的代码时,出现以下错误:

Warning: dbus_bus_get() [function.dbus-bus-get]: failed to create dbus

connection object [Unable to autolaunch a dbus-daemon without a

$DISPLAY for X11] in […COI/GTK/Notify.php on line 39

这是我第一次使用与dbus相关的任何东西,而我很迷路.

我的目标是类似于在终端(在Ubuntu 11.10上)执行以下操作时所发生的效果:

/usr/bin/notify-send -t 2000 'title' 'message'

最初我确实使用了通知发送& exec,但是当我找到GREE Dbus扩展时切换了,因为我认为它可以提供更简洁的界面.另外,仅当我将apache用户更改为与当前登录的用户相同时,notify-send才能正常工作-并非理想的解决方案.

谁能告诉我要达到我想要的结果需要进行哪些修改,或者告诉我我想做的事实际上是否不可能?

或者,还有其他方法我应该这样做吗?

解决方法:

Dbus不喜欢在没有X的命令行环境中运行.这很令人沮丧,但这就是我在python中写的重写它的内容.归结为设置两个环境变量.

def run(self):

os.environ['DBUS_SESSION_BUS_ADDRESS'] = "unix:path=/run/dbus/system_bus_socket"

os.environ["DISPLAY"] = ":0"

try:

bus_name = dbus.service.BusName(INTERFACE,

bus = dbus.SessionBus())

dbus.service.Object.__init__(self, bus_name,

'/com/your/path/here')

gobject.MainLoop().run()

except Exception, E:

f = file('/tmp/bus.log', 'a')

f.write(str(E))

f.close()

编辑:我忘记了在命令行上运行dbus的另一种非常有用的方法

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

我在树莓派上使用它来运行我的自定义dbus守护进程. dbus-launch –auto-syntax是在bash中输出适用于dbus的环境变量和文件的命令. eval命令将获取该输出并对其进行评估,以便您的命令将与这些环境变量一起运行.

一个简单的测试将是运行以下内容:

eval 'dbus-launch --auto-syntax' python /usr/bin/my-dbus-daemon.py

eval 'dbus-launch --auto-syntax' qdbus org.dbus.method /org/dbus/method/test

标签:dbus,php

来源: https://codeday.me/bug/20191101/1987149.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值