Dbus PHPが$ DISPLAYなしでdbus-daemonを起動できない

私は自分の試みで GREE LabsのDbus PHP Extension を使っていますデスクトップ通知を作成できるPHPクラス。

$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);

私のコードが実行されると、次のエラーが発生します。

警告:dbus_bus_get()[function.dbus-bus-get]:dbusの作成に失敗しました   接続オブジェクト[なしでdbus-daemonを自動起動できません   $ DISPLAY for X11] [... COI/GTK/Notify.php 39行目

私がdbusに関連するものを使ったのはこれが初めてで、むしろ失われています。

私は、端末(Ubuntu 11.10上)で次のようなことが起こった場合と同様の効果を目指しています。

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

I did initially use notify-send & exec, but switched when I found the GREE Dbus extension as I thought it may provide a cleaner interface. Also notify-send would only work properly if I changed my apache user to be the same as the user I'm currently logged in as - not an ideal solution.

誰かが私の望む結果を達成するために必要な変更を教えてもらえますか、あるいは私がしたいことが実際には不可能であるかどうか教えてください。

それとも、これをやっていけばいいのでしょうか?

3
試してみることができます: stackoverflow.com/questions/2701059/…
追加された 著者 Petah,

2 答え

Dbusは、コマンドライン環境でXを使わずに実行されているようなものではないです。これはイライラしていますが、これをPythonで書き換えて書き換えます。 2つの環境変数を設定することになります。

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
3
追加された
または、コマンドラインで次のように入力します。 DISPLAY = ":0" DBUS_SESSION_BUS_ADDRESS = "unix:path =/run/dbus/system_bus_soc‌ ket"/your/bin/program
追加された 著者 NuclearPeon,

適切なDBusデーモンを同時に開始するには、Webサーバーを起動するスクリプトで dbus-launch を使用します。詳細は、 dbus-launch(1)のマニュアルページを参照してください。

1
追加された
いいえ、もう一度お試しくださいしかし、読んで。
追加された 著者 Ignacio Vazquez-Abrams,
PHP - 日本のコミュニティ [ja]
PHP - 日本のコミュニティ [ja]
4 参加者の

このグループではPHPについて話します。 パートナー:kotaeta.com