无法通过python

时间:2016-04-08 19:28:19

标签: python ssh paramiko dbus

我用:

连接到我的远程计算机
    self.client = paramiko.SSHClient()
    self.client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    self.client.connect(hostname=ip_address, username=self.user, password=self.password, look_for_keys=False)

当我发送命令时:

    chan = self.client.get_transport().open_session(timeout=timeout)
    chan.request_x11()
    chan.settimeout(timeout)
    chan.exec_command(command)
    stdin = chan.makefile('wb', -1)
    stdout = chan.makefile('r', -1)
    stderr = chan.makefile_stderr('r', -1)
    return stdin, stdout, stderr

如果我不使用这一行:

chan.request_x11()

我尝试使用:

self.client.exec_command(command) 

但同样的错误

我从标题中收到错误消息。当我使用该行时,我尝试从stdout读取时获得超时连接。我试过设置

DISPLAY=:0

什么也没做。我正在尝试通过ssh发送dbus命令。当我通过终端手动连接ssh时,我可以使用-X或不使用它,我可以使用我的dbus调用无所谓。

1 个答案:

答案 0 :(得分:0)

在没有X11 / Display的情况下使用Shell的Dbus。 Dbus需要知道DBUS_SESSION_BUS_ADDRESS。 所以要么导出这个或导出DISPLAY ...

1)导出DBUS_SESSION_BUS_ADDRESS方法。

首次启动服务器。 eval'dbus-launch --auto-syntax'./server

来自服务器环境(/ proc / pid-server / environ) 你可以得到DBUS_SESSION_BUS_ADDRESS。 在启动客户端程序的shell中导出该值, 启动客户端 ./client ... 它应该没有问题。