2017-03-03 91 views
1

我想從我的遠程Linux服務器啓動和X11連接到我的本地Windows機器。窗口中的Python和X11連接

我已經下載了Xming portable,如果我啓動一個SSH連接到我的Linux機器並啓動Firefox,它將傳遞給Xming並顯示在我的Windows機器上。

我現在已經嘗試在python中實現相同的功能。但我不認爲我理解正確。

我用下面的代碼

import paramiko 
import time 

ssh = paramiko.SSHClient() 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh.connect('server-1', username='me', password='xxxxxxx') 
stdin, stdout, stderr = ssh.exec_command("firefox") 

t = ssh.get_transport() 
chan = t.open_session() 
print(chan.request_x11()) 

print(stdout.readlines(), stderr.readlines()) 

time.sleep(100) 

只得到了以下錯誤:

Error: GDK_BACKEND does not match available displays 

我也看到了Python它自身可以就XLL會話。但現在我只需要將它轉發給我的Xming服務器。

我只理解X11連接的基本功能,我在這裏看到的所有例子都是針對python腳本在Linux上運行的。

Regards

回答

0

我想出了我的自我。雖然我不完全瞭解細節,但我想Xming必須掛鉤SSH套接字或其他東西。無論如何,我所需要做的就是將我的命令更改爲以下內容

stdin, stdout, stderr = ssh.exec_command("export DISPLAY=localhost:10.0; xterm & firefox &") 

和Firefox在Xming中打開。另請注意,直到Firefox應用程序再次關閉時,python腳本纔會被阻止。

所以我最終的代碼看起來如下

import paramiko 

ssh = paramiko.SSHClient() 
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 
ssh.connect('server-1', username='me', password='xxxx') 
stdin, stdout, stderr = ssh.exec_command("export DISPLAY=localhost:10.0; xterm & firefox & env") 


print(''.join(stdout.readlines()), ''.join(stderr.readlines())) 

ssh.close() 

以來的Xming是一個命令行應用程序也應該可以從Python應用程序中啓動它。