使用Python编程的Paramiko X11模式

1 投票
2 回答
2664 浏览
提问于 2025-04-16 08:33

我在使用Paramiko这个Python模块时,遇到了问题,特别是在它的ssh X11管理功能上。
我想用它的方式就像使用ssh -X选项一样。
我尝试了好几种解决办法,但在我的系统上都不管用。

这是我尝试过的代码:


client = paramiko.SSHClient()   
client.set_missing_host_key_policy(AutoAddPolicy())   
client.connect(machineName, username=xxx, password=xxx)  
t = client.get_transport ()  
chan = t.open_session ()  
chan.request_x11 ()  
chan.set_combine_stderr (True)  
chan.exec_command (xxxxx)  # the command that should display a X11 window  
bufsize = -1  
stdin = chan.makefile('wb', bufsize)  
stdout = chan.makefile('rb', bufsize)  
stderr = chan.makefile_stderr('rb', bufsize)  
for line in stdout:   
    print '... ' + line.strip('\n')  
client.close()  

我还尝试了(不是exec_command):

chan.get_pty("vt100", 80, 50)  
chan.invoke_shell()  
chan.send(xxxxx) # the command that should display a X11 window  

不幸的是,当应该出现X11窗口的时候,我的应用程序就卡住了。值得注意的是,如果我运行一个不需要显示X11窗口的命令,它就能正常工作。

谢谢你的帮助,
祝好

2 个回答

1

看了paramiko的代码,我发现paramiko只是提供了一种建立x11通道的方法。它并没有把这个通道连接到本地的x11显示器上。这部分需要你自己来处理。

想要了解怎么做,可以参考这个回答,里面有一个可用的例子: https://stackoverflow.com/a/12903844/72911

1

我需要用paramiko在另一个X11窗口中运行图形界面,找到了这个帖子。我觉得你可能需要加几行代码才能让它正常工作。关键在于处理程序的参数。

在这里,你需要为进入的X11连接指定一个函数。

chan.request_x11 (handler=testFunc())  

然后写一个简单的函数。

import commands
def testFunc():
    cmd = "xterm"
    result = commands.getoutput(cmd)

这样做之后应该会弹出一个新窗口。对我来说,至少是这样有效的。

撰写回答