Ubuntuデスクトップで問題ないサンプルのpythonコードを実行しています:
import dbus, gobject
from dbus.mainloop.glib import DBusGMainLoop
from dbus.mainloop.glib import threads_init
import subprocess
from subprocess import call
gobject.threads_init()
threads_init()
dbus.mainloop.glib.DBusGMainLoop( set_as_default = True )
p = subprocess.Popen('dbus-launch --sh-syntax', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
call( "export DBUS_SESSION_BUS_ADDRESS" , shell=True )
call( "export DBUS_SESSION_BUS_PID" , shell=True )
bus = dbus.SessionBus()
# get DBUS objects, do other stuff with SESSION_BUS
# in same time we can start more independent processes with this file
# finaly kill the SESSION_BUS process
デスクトップで成功した後、コードをシェルのみのサーバー版に移動しました。dbus-launch はプロセスを開始しますが、python dbus.SessionBus() は「/bin/dbus-launch が次のエラーで異常終了しました: 自動起動エラー: X11 初期化に失敗しました」というエラーを返します。
「dbus-launch」で開始されたプロセスが正常に起動して実行されたときに、SESSION_BUS と X11 の間に厳密な依存関係がないことを願っています。エラーはpythonで発生します。
最良の解決策は、クリーンな python または linux 環境設定です。最悪ですが、いくつかの偽または仮想 X11 で許容される可能性があります (試してみると運が悪かったです)。