使用Python编程的Paramiko X11模式
我在使用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)
这样做之后应该会弹出一个新窗口。对我来说,至少是这样有效的。