Python DBUS会话_总线-X11依赖关系

Python DBUS会话_总线-X11依赖关系,python,x11,dbus,Python,X11,Dbus,我已经在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.DBusGMai

我已经在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
在桌面上成功后,我将代码移动到服务器版,该版本仅与shell一起使用。dbus启动启动进程,但python dbus.SessionBus()返回错误“/bin/dbus启动异常终止,错误如下:自动启动错误:X11初始化失败”

希望当进程以“dbus启动”启动并成功运行时,会话_总线和X11之间不应该存在严格的依赖关系。错误来自python


最好的解决方案是干净的python或linux环境设置,最差的是,可能可以接受一些假的或虚拟的X11(我尝试时运气不好)

问题是,您在不同的shell中运行
导出
调用。您需要捕获
dbus launch
的输出,解析值,并使用
os.environ
将它们写入环境:

p = subprocess.Popen('dbus-launch', shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for var in p.stdout:
  sp = var.split('=', 1)
  print sp
  os.environ[sp[0]] = sp[1][:-1]

太好了,os.Enviro完成了任务!非常感谢。