Python DBUS会话_总线-X11依赖关系
我已经在Ubuntu桌面上运行了python示例代码: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
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完成了任务!非常感谢。