2011-12-19 28 views
3

私は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); 

私は次のエラーを取得する:

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に関連したものを使用しましたし、むしろ失われています初めてです。

私は1つの(Ubuntuの11.10で)ターミナルで次のように実行したときに発生するものと同様の効果を目指しています:

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

私が見つけたとき、私が最初にnotify-send & execを使用していますが、切り替えました私はそれがよりクリーンなインターフェイスを提供するかもしれないと思ったGREEのDbus拡張。またnotify-sendは、私が現在ログインしているユーザーと同じであるように私のapacheユーザーを変更した場合にのみ適切に機能します - 理想的な解決策ではありません。

希望の結果を得るためにどのような変更が必要か、教えてもらえませんか?

または、これを行う別の方法はありますか?

+0

あなたが試みることができる:http://stackoverflow.com/questions/2701059/how-to-send-a-notification-to-another

簡単なテストでは、このような何かを実行することです-user-with-notify-send-bash – Petah

答えて

1

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

+0

いいえ、もう一度試してください。しかし、読んで。 –

3

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コマンドはその出力を受け取り、評価してcommandがこれらの環境変数で実行されるようにします。

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 
+1

またはコマンドラインで: 'DISPLAY =":0 "DBUS_SESSION_BUS_ADDRESS =" unix:path =/run/dbus/system_bus_socket "/ your/bin/program' – NuclearPeon

関連する問題