2016-04-08 116 views
1

我連接到我的遠程計算機來的AutoLaunch一個DBUS守護進程沒有$顯示X11:無法通過ssh在python

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調用,這並不重要。

回答

0

在沒有X11/Display的情況下使用Shell的Dbus。 Dbus需要知道DBUS_SESSION_BUS_ADDRESS。 所以要麼你出口這個或出口DISPLAY ...

1)導出DBUS_SESSION_BUS_ADDRESS方法。

第一臺啓動服務器。 EVAL 'DBUS推出--auto語法' ./server

從服務器ENVIRON(/ proc /進程服務器/ ENVIRON) 你可以得到DBUS_SESSION_BUS_ADDRESS。 在你正在啓動客戶端程序的shell中導出該值,啓動客戶端 ./client ... 它應該沒有問題。